C++ i curl problem z konsekwencją programu.
: 17 grudnia 2009, 16:27
Witam. Piszę fragment programu którego zadaniem jest pobranie treści zwracanych przez google (google jak to google, ma wyszukać strony pasujące do wpisanego hasła) w celu późniejszej obróbki (chcę uzyskać same linki do tych stron). W zasadzie cel osiągnąłem ale niestety nie do końca. Program faktycznie zwraca wyniki ale niestety raz na 3 uruchomienia, w większości przypadków okienko konsolowe porostu się wyłącza. Nie za bardzo wiem czym to jest spowodowane, a zależy mi na tym żeby zapętlić program, tak aby sprawdził min 10 podstron google.
byłbym wdzięczny gdyby ktoś wytłumaczył mi gdzie tkwi błąd...
Kod: Zaznacz cały
#include <string>
#include <iostream>
#include <curl/curl.h>
#include <vector>
using namespace std;
string wynik;
static int geturl(char *data, size_t size, size_t nmemb, char *buffer){
int result = 0;
wynik.append((const char*)data);
result = size * nmemb;
return result;
}
string intToStr(int n){
string tmp, ret;
if(n<0){
ret="-";
n=-n;
}
do{
tmp += n%10+48;
n -= n%10;
}
while(n /= 10);
for(int i=tmp.size(); i>=0; i--) ret += tmp[i];
return ret;
}
size_t strpos(const string &haystack, const string &needle){
int sleng = haystack.length();
int nleng = needle.length();
if (sleng==0 || nleng==0) return string::npos;
for(int i=0, j=0; i<sleng; j=0, i++ ){
while (i+j<sleng && j<nleng && haystack[i+j]==needle[j]) j++;
if (j==nleng) return i;
}
return string::npos;
}
//zaczynamy koniec z funkcjami :)
int main(){
int k,i,x,y;
string liczba,url,zmienna;
CURL *curl;
//for(k=0;k<=0;k=k+10){
k=80;
liczba=intToStr(k);
liczba.replace(0,1,"");
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
url="http://www.google.pl/search?hl=pl&source=hp&q=warszawa&lr=&btnG=Szukaj+w+Google&start="+liczba;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, geturl);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
x=strpos(wynik, "<h3 class=r><a href=\"");
y=strpos(wynik, "<caption class=\"med nobr\" style");
wynik=wynik.substr(x,y-x);
for(i=0;i<=10;++i){
x=strpos(wynik, "<h3 class=r><a href=\"");
y=strpos(wynik, "\" class=l");
zmienna=wynik.substr(x+21, y-x-21);
wynik=wynik.replace(x,y-x+9,"");
zmienna=zmienna.replace(0,7,"");
y=strpos(zmienna, "/");
zmienna=zmienna.substr(0, y);
if(i!=10) cout<<zmienna<<endl;
zmienna="";
}
system("pause");
return 0;
}