Seit dem Google die SOAP API für Google Search eingestellt hat, läuft alles über die neue Google Ajax API. Dabei werden sogenannte JSON-Objekte bei Anfragen über die Google Ajax API übergeben. Leider gibt Google keine Beispiele für C#, sondern nur für PHP, Java, Flash, Python und Perl, wie man die Google Ajax API benutzt. Aus diesem Grund habe ich mich dazu entschlossen ein eigenes kleines Tutorial zu schreiben, wie man einfach und schnell Google Suchergebnisse in CSharp bekommt.
Hierzu gibt es bereits eine hilfreiche Dotnet-Library namens GAPI.NET, die einem das ungewohnte Hantieren mit JSON-Objekten erspart. Der Vorteil des Einsatzes einer externen Library ist, dass man sich nicht um das Ansprechen von Google kümmern muss und auch kein Einarbeiten in JSON notwendig ist. Wer sich trotzdem nicht auf fremden Code verlässt kann alles selbst nachvollziehen, denn GAPI ist Open Source.
Nachdem GAPI.NET heruntergeladen wurde muss die Assembly nur noch als Referenz in ein Visual Studio Projekt und die Using-Direktive „Gapi.Search“ hinzugefügt werden. Jetzt geht es auch schon mit einem Beispiel-Codeschnipsel los, wie wir unsere Antworten von Google über C# bekommen.
SearchResults googleResults = Searcher.Search(SearchType.Web, "Stephan Hawking", 0); for (int pageIndex = 0; pageIndex < googleResults.EstimatedResultCount; pageIndex = pageIndex + 8) { googleResults = Searcher.Search(SearchType.Web, keyword, pageIndex); foreach (SearchResult item in googleResults.Items) { Console.WriteLine(item.Title + " " + item.Url); } } |
Dieser Code bewirkt, dass eine Suchabfrage nach „Stephan Hawking“ gestartet wird. Bei jeder Suchanfrage spuckt GAPI bzw. Google nur 8 Ergebnisse aus, sodass jedesmal die Search-Methode erneut aufgerufen werden muss, wenn man die nächsten 8 Suchergebnisse haben möchte. Um zu verdeutlichen, wie die Search-Methode aufgerufen werden muss habe ich hier ein weiteres Code-Beispiel, die dies verdeutlichen soll.
// Gibt die zweite Seite mit 8 Suchergebnissen aus Searcher.Search(SearchType.Web, "Stephan Hawking", 8) // Gibt die dirtte Seite mit 8 Suchergebnissen aus Searcher.Search(SearchType.Web, "Stephan Hawking", 16) // Gibt die vierte Seite mit 8 Suchergebnissen aus Searcher.Search(SearchType.Web, "Stephan Hawking", 24) |
Jetzt dürfte jedem klar sein, wie er GAPI bis zum letztem Suchergebnis ausquetscht. GAPI kann aber nicht nur die Google Web Search API ansprechen, sondern alle anderen APIs wie beispielsweise die Google Maps API ansprechen. Hierzu muss in der Search-Methode der gewünschte Search-Typ, der als Enum definiert ist, eingestellt werden.
Hallo,
danke für diesen Beitrag – wusste gar nicht, dass es so schön möglich ist. Ich denke, da kann man in Zukunft doch nette schöne Erweiterungen für seine eigene Webseite bauen.
Gruß
Falcon ausm WMP
Hi,
super Info, vielen Dank! Weisst Du ob die Anzahl der Abfragen eingeschränkt ist wie bei der alten google API (waren glaube ich 1000 hits pro Tag)?
Grüße,
Timo
soweit ich weiß gilt dieses Limit noch. Aber ich bitte dich, wer macht
schon 1000 Anfragen am Tag? ;D
zumindest ist es so gewesen, als ich damit in einem Google-Map Projekt
von mir gearbeitet habe.
Hallo, schönen Dank für Dein Beispiel. Funktioniert gut nachdem man < durch ein < ersetzt und die Variable keyword deklariert.
Doch eine Frage bleibt mir verborgen. Wie kann ich wählen, welches Google ich verwenden möchte? Ich vermute, es wird bei Google.com gesucht. Wenn ich nun aber bei Google.at oder bei Google.ch suchen möchte? Wie kann ich das realisieren?
Seit mir herzlichst Gegrüsst
Markus
Hallo, habe ein bischen weiter gespielt. Der Code scheint mir einige Tücken zu haben.
Wenn ich nämlich mehr als ca 70 Suchresultate abfrage, kommt eine Fehlermeldung. Hat sich hier schon jemand damit befasst?
Viele Grüsse
Hallo Ich hab es genauso getan wie bei dir doch wenn ich es debugge erhlte ich eine Fehlermeldund obwohl zuvor alles korrekt brauche hilfe
tschüssikowski
ps: was soll ich für ein keyword eingeben