PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche nach 23 Begriffen; in 10ner Schritten


yozek
03.04.2006, 09:49:34
Hallo Leute,

wie ihr unschwer am Topic sehen könnt, weiß ich gar nicht so recht, wie ich dieses Thema benennen soll; sorry.

Ich experimientiere gerade mit der Google API. Klappt alles wunderbar, jedoch stehe ich bei einer Sache auf dem Schlauch. Vielleicht liegt es dadran, dass ich noch keinen Kaffee getrunken habe und der Tee eindeutig zu lange gezogen ist *gg* (zur Info: Er verliert dadruch die Koffeinwirkung)

Es geht darum, eine beliebige Anzahl von Suchergebnissen anzufordern (0-n) und dementsprechenad auch anzuzeigen. Die Google API gibt jedoch nur maximal 10 Ergebnisse pro Suche zurück. Bedeutet also für mich: Ich muss eine Schleife bauen und diese n/10 mal durchlaufen lassen.

Nur stellt sich mir die Frage: Wie stelle ich das am geschicktesten und perfomant an.

Meine Überlegung geht in die Richtung, dass ich jeweils 10 Ergbenisse sammel, egal ob ggf. auch nur 6 angefordert worden sind.

Habt ihr eine Idee, wie ich das am besten realisieren kann?

meikel (†)
03.04.2006, 15:00:21
Obwohl ich die Google API nicht kenne...:
Vielleicht liegt es dadran, dass ich noch keinen Kaffee getrunken habe und der Tee eindeutig zu lange gezogen ist *gg* (zur Info: Er verliert dadruch die Koffeinwirkung)
Die "Koffeinwirkung" von Tee ist gleich Null, weil der anregende Wirkstoff in kurzgebrühten Tee nicht das Koffein sondern das Teein ist.

yozek
03.04.2006, 15:07:45
Obwohl ich die Google API nicht kenne...:

Die "Koffeinwirkung" von Tee ist gleich Null, weil der anregende Wirkstoff in kurzgebrühten Tee nicht das Koffein sondern das Teein ist.

IMHO ist doch Teein von der chemischen Formel her genau so aufgenaut wie das Koffein, welches jedoch nicht - im Gegensatz zu dem "Teein" durch das Zentrale Nervensystem, sondern durch den Blutkreislauf wirkt.

meikel (†)
03.04.2006, 15:34:21
IMHO ist doch Teein von der chemischen Formel her genau so aufgenaut wie das Koffein, welches jedoch nicht - im Gegensatz zu dem "Teein" durch das Zentrale Nervensystem, sondern durch den Blutkreislauf wirkt."gleich aufgebaut" und "wirkt anders" machen nachdenklich.

Zum Thema:
diesen Artikel hast Du sicherlich gelesen?
http://www.heise.de/ix/artikel/2002/07/118/

yozek
03.04.2006, 15:49:14
Ich bin kein Chemiker ;) Insofern lassen wir das lieber...
Jop, den Artikel habe ich gelesen, so wie viele andere auch. Meine Schwierigkeit hat an sich ja nichts mit der Google-API zu tun, sondern ist ein Logikproblem.

Vielleicht habe ich mich ja falsch geäußert.. Meine Schwierigkeit kann man sicherlich allgemeiner formulieren. In etwa so:

Ich kann per einem einzelnen Query maximal 10 Ergebnisse ranholen, mindestens 1.
Wie stelle ich es am geschicktesten an, wenn ich bsp. 34 Ergebnisse brauche.

Zur Zeit mache ich das folgendermassen

$maxResults = 34;
// number of needed rows containing 10 results
$numberOfNeededLoops = ceil($maxResults/10);

for($i=1;$i<=$numberOfNeededLoops;$i++) {
$results[] = googleQuery::performQuery(...);
}

// init counter
$i = 1;
// building results array
foreach((array)$results as $numberOfFullQueries) {
foreach((array)$numberOfFullQueries['resultElements'] as $searchResult) {
if($i < $maxResults) {
$resultArray[] = $searchResult;
// increase counter
$i++;
}
}
}

// debug
$content = print_r($resultArray, true);
// debug
print('<pre>'. $content .'</pre>');


In wirklichkeit ist jeder dieser Schritte ausgelagert in eigenen Funktionen. Habe die eben schnell zusammengefasst.

Was ich daran nicht schön finde sind die Verschachtelungen und dass ich jedesmal 10 Result abgreife und die dann zum Schluss verwerfe.. Ich finde das nicht so ideal..

Wie kann man es denn "schöner" machen? Any ideas?

meikel (†)
03.04.2006, 22:33:12
gelöscht. Siehe die nächsten zwei Texte.

yozek
04.04.2006, 09:19:29
Ähmm...

Guckst du hier:
Punkt 2.7 (http://www.google.com/apis/reference.html#2_7)

meikel (†)
04.04.2006, 22:26:50
Guckst du hier:
Huch? Damit ist diese API witzlos, wenn man nur an die ersten 10 Treffer kommt.

yozek
04.04.2006, 23:47:09
Huch? Damit ist diese API witzlos, wenn man nur an die ersten 10 Treffer kommt.

Nee, vielleicht habe ich mich ja falsch ausgedrückt. du kannst max. 1000 Results erreichen. Damit das aber geht ist es erforderlich das ganze in 10ner-Schritten zu bewerkstelligen.
Du erhöhst dann denn internen Zeiger bei dem an den Web Service übergebenem Parameter...

$params = array(
'Googlekey' => 'l33t',
'queryStr' => $queryString,
'startFrom' => $startFrom,
'maxResults' => 10,
'filter' => true,
'restrict' => '',
'adultContent' => true,
'language' => '' ,
'iencoding' => '',
'oendcoding' => ''
);


Du wiederholst mit einer while Schleife solange den Aufruf des Service bis alle Ergebnisse eingegangen sind oder es keine mehr zum abgreifen gibt. Dafür erhöhst du intern die Variable $startFrom jeweils um 10...

Und da schliesst sich meine Frage von ganz anfang wieder an.. Wie mache ich es am sinnvollsten, dass ich beim letzten Query den $result auf die Zahl setze, die ich noch brauche...

Mir schwebt ca. folgendes vor


if($rest = googleQuery::countResults() - $desiredResults < 10) {
$resultsToFetch = $rest;
} else {
$resultsToFetch = 10;
}


Ist das denn sinnvoll?

meikel (†)
05.04.2006, 02:23:43
Ist das denn sinnvoll?
Nur dann, wenn Du es nicht automatisch machst. Sonst sucht einer nach 'windows' und der RAM kriegt Beulen...

yozek
05.04.2006, 02:27:17
Seh ich ein wenig anders...
Zumal kann ich ja die max. Anzahl der Ergebnisse beschränken, sodass sich meine Klasse weigert irgendwas zu machen...

Aber nun gut... Schauen wir mal was dabei rumkommt!