2011-11-07 3 views
6

Ho appena scoperto il Google APIs Client Library for .NET, ma a causa della mancanza di documentazione ho difficoltà a capirlo.Come posso effettuare una ricerca con l'API di ricerca personalizzata di Google per .NET?

Sto cercando di fare un semplice test, facendo una ricerca personalizzata, e ho guardato tra l'altro, al seguente spazio dei nomi:

Google.Apis.Customsearch.v1.Data.Query 

Ho cercato di creare un oggetto query e compilare SearchTerms , ma come posso recuperare i risultati da quella query?

risposta

3

sguardo API Reference utilizzando il codice da google-api-dotnet-client

CustomsearchService svc = new CustomsearchService(); 

string json = File.ReadAllText("jsonfile",Encoding.UTF8); 
Search googleRes = null; 
ISerializer des = new NewtonsoftJsonSerializer(); 
googleRes = des.Deserialize<Search>(json); 

o

CustomsearchService svc = new CustomsearchService(); 

Search googleRes = null; 
ISerializer des = new NewtonsoftJsonSerializer(); 
using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    googleRes = des.Deserialize<Search>(fileStream); 
} 

con il flusso si può anche leggere di webClient o HttpRequest, come si desidera

+0

Il tuo link "Riferimento API" è morto ... – billy

4

Prima di tutto , devi assicurarti di aver generato la tua chiave API e il CX. Io parto dal presupposto che hai fatto già, altrimenti si può fare a quei luoghi:

  • API Key (è necessario creare una nuova chiave del browser)
  • CX (è necessario creare un motore di ricerca personalizzato)

una volta che avete quelli, ecco una semplice applicazione console che esegue la ricerca e discariche tutti i titoli/link:

static void Main(string[] args) 
{ 
    WebClient webClient = new WebClient(); 

    string apiKey = "YOUR KEY HERE"; 
    string cx = "YOUR CX HERE"; 
    string query = "YOUR SEARCH HERE"; 

    string result = webClient.DownloadString(String.Format("https://www.googleapis.com/customsearch/v1?key={0}&cx={1}&q={2}&alt=json", apiKey, cx, query)); 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    Dictionary<string, object> collection = serializer.Deserialize<Dictionary<string, object>>(result); 
    foreach (Dictionary<string, object> item in (IEnumerable)collection["items"]) 
    { 
     Console.WriteLine("Title: {0}", item["title"]); 
     Console.WriteLine("Link: {0}", item["link"]); 
     Console.WriteLine(); 
    } 
} 

Come puoi vedere, sto usando una deserializzazione JSON generica in un dizionario invece di essere fortemente tipizzata. Questo è per scopi di comodità, dal momento che non voglio creare una classe che implementa lo schema dei risultati di ricerca. Con questo approccio, il payload è il set annidato di coppie chiave-valore. Ciò che ti interessa di più è la collezione di oggetti, che è il risultato della ricerca (prima pagina, presumo). Sto solo accedendo alle proprietà "title" e "link", ma ce ne sono molte più di quante tu possa vedere dalla documentazione o ispezionare nel debugger.

+1

Sto cercando come utilizzare [Libreria client API di Google per .NET] (http://code.google.com/p/google-api-dotnet- client/wiki/API # CustomSearch_API) correttamente. Comunque grazie ... anche questo aiuta. – Darshana

6

Il mio male, la mia prima risposta non stava usando le API di Google.

come un pre-requisito, è necessario ottenere il Google API client library

(In particolare, sarà necessario fare riferimento Google.Apis.dll nel progetto). Ora, supponendo che hai la tua chiave API e la CX, qui è lo stesso codice che ottiene i risultati, ma ora utilizzando le API effettivi:

string apiKey = "YOUR KEY HERE"; 
string cx = "YOUR CX HERE"; 
string query = "YOUR SEARCH HERE"; 

Google.Apis.Customsearch.v1.CustomsearchService svc = new Google.Apis.Customsearch.v1.CustomsearchService(); 
svc.Key = apiKey; 

Google.Apis.Customsearch.v1.CseResource.ListRequest listRequest = svc.Cse.List(query); 
listRequest.Cx = cx; 
Google.Apis.Customsearch.v1.Data.Search search = listRequest.Fetch(); 

foreach (Google.Apis.Customsearch.v1.Data.Result result in search.Items) 
{ 
    Console.WriteLine("Title: {0}", result.Title); 
    Console.WriteLine("Link: {0}", result.Link); 
}