diff --git a/src/add-ons/kernel/file_systems/googlefs/google_request.c b/src/add-ons/kernel/file_systems/googlefs/google_request.c index 8780aae503..8acf285cd1 100644 --- a/src/add-ons/kernel/file_systems/googlefs/google_request.c +++ b/src/add-ons/kernel/file_systems/googlefs/google_request.c @@ -35,7 +35,7 @@ #define FMT_Q "&q=%s" /* parse_google_html.c */ -extern int google_parse_results(const char *html, size_t htmlsize, struct google_result **results); +extern int google_parse_results(const char *html, size_t htmlsize, long *nextid, struct google_result **results); // move that to ksocket inlined static int kinet_aton(const char *in, struct in_addr *addr) @@ -150,7 +150,7 @@ status_t google_request_process(struct google_request *req) close(fd); } #endif /* FAKE_INPUT */ - err = count = google_parse_results(req->cnx->data, req->cnx->datalen, &req->results); + err = count = google_parse_results(req->cnx->data, req->cnx->datalen, &req->nextid, &req->results); if (err < 0) goto err_get; #ifdef DO_PUBLISH diff --git a/src/add-ons/kernel/file_systems/googlefs/google_request.h b/src/add-ons/kernel/file_systems/googlefs/google_request.h index 7352bbb7d7..6163eb633e 100644 --- a/src/add-ons/kernel/file_systems/googlefs/google_request.h +++ b/src/add-ons/kernel/file_systems/googlefs/google_request.h @@ -12,6 +12,7 @@ struct google_request { char *query_string; struct http_cnx *cnx; struct google_result *results; + long nextid; }; /* those are quite arbitrary values */ diff --git a/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c b/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c index 881fe6b8cb..3ac2349f86 100644 --- a/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c +++ b/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c @@ -34,9 +34,9 @@ int dbgstep = 0; //#define G_BEGIN_URL "
"
-#define G_END_URL "\" class=l>"
+#define G_END_URL "\">"
//#define G_BEGIN_NAME
#define G_END_NAME ""
#define G_BEGIN_SNIPSET /*"
"*/""
@@ -44,15 +44,14 @@ int dbgstep = 0;
#define G_BEGIN_CACHESIM " "
-int google_parse_results(const char *html, size_t htmlsize, struct google_result **results)
+int google_parse_results(const char *html, size_t htmlsize, long *nextid, struct google_result **results)
{
struct google_result *res = NULL, *nres = NULL, *prev = NULL;
char *p, *q;
char *nextresult = NULL;
long numres = 0;
- long maxres = 0;
- long startid = 0;
- long lastid = 0;
+ long maxres = 1000;
+ //long startid = 0;
int done = 0;
int err = ENOMEM;
@@ -63,8 +62,10 @@ int google_parse_results(const char *html, size_t htmlsize, struct google_result
PRST;
/* google now sends sometimes... */
if (strstr(html, "") != html) {
- if (strstr(html, "") != html)
- return EINVAL;
+ if (strstr(html, "") != html) {
+ if (strstr(html, "Google Search:");
@@ -74,26 +75,12 @@ int google_parse_results(const char *html, size_t htmlsize, struct google_result
p = strstr(html, " Results ");
- if (!p) return EINVAL;
- PRST;
- p+= strlen("> Results ");
- startid = strtol(p, &p, 10);
- if (!p) return EINVAL;
- PRST;
- p = strstr(html, " - ");
- p+= strlen(" - ");
- if (!p) return EINVAL;
- PRST;
- lastid = strtol(p, &p, 10);
- if (!p) return EINVAL;
- PRST;
- maxres = lastid - startid + 1;
- printf(DBG"getting %ld results (%ld to %ld)\n", maxres, startid, lastid);
+ /*
p = strstr(html, "Search Results<");
if (!p) return EINVAL;
PRST;
+ */
printf(DBG"parsing...\n");
@@ -111,7 +98,7 @@ int google_parse_results(const char *html, size_t htmlsize, struct google_result
goto err0;
}
memset(nres, 0, sizeof(struct google_result));
- nres->id = startid + numres; //- 1;
+ nres->id = (*nextid)++; //- 1;
PRST;
/* find url */
@@ -273,13 +260,14 @@ int main(int argc, char **argv)
size_t len;
char *p;
int err;
+ long nextid = 0;
p = malloc(BUFSZ+8);
len = read(0, p+4, BUFSZ);
p[BUFSZ+4-1] = '\0';
*(uint32 *)p = 0xa5a5a5a5;
*(uint32 *)(&p[BUFSZ+4]) = 0x5a5a5a5a;
- err = google_parse_results(p+4, len, &results);
+ err = google_parse_results(p+4, len, &nextid, &results);
printf("error 0x%08lx\n", err);
if (err < 0)
return 1;