2011-11-16 5 views
3

Je viens de this question.Recherche Google via Java Api - Demandes multiples

Le code suivant ne fonctionne pas bien:

public static void main(String[] args) throws Exception { 
    for (int i = 0; i < 15; i++) 
    { 
     String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q="; 
     String search = "test"; 
     String charset = "UTF-8"; 

     URL url = new URL(google + URLEncoder.encode(search, charset)); 
     Reader reader = new InputStreamReader(url.openStream(), charset); 
     GoogleResults results = new Gson().fromJson(reader, GoogleResults.class); 

     // Show title and URL of 1st result. 
     System.out.println(results.getResponseData().getResults().get(0).getTitle()); 
     System.out.println(results.getResponseData().getResults().get(0).getUrl()); 
    } 
} 

La requête de recherche fonctionne très bien si j'exécuter une fois, mais dans cette boucle, je reçois une exception de pointeur nul.

Malheureusement, je besoin de mon programme pour faire plusieurs requêtes :(Que puis-je faire?

Il retourne un NullPointerException au premier results.getResponseData.

+0

Je suis également confronté à ce problème. Alors, comment se débarrasser de cela? –

+0

vous ne pouvez pas. C'est contre les TOS de Google. Vous pouvez essayer d'ajouter un délai plus long ou essayer d'envoyer des adresses IP à Google. – David

+0

j'ai ajouté l'IP également. mais ne fonctionne toujours pas. 'String address =" https://ajax.googleapis.com/ajax/services/search/web?v=1.0&start=0&userip=14.90.136.150&safe=active&rsz=8 &q="; ' parfois il ne donne aucun exception et rechercher le texte de google, mais la plupart du temps il jette 'NullPointerException'. pourquoi? –

Répondre

2

Ce qui se passe parce que Google bloque activement Suspecte d abus de conditions d'utilisation. Voir la section 5.3 ici:

http://www.google.com/accounts/TOS

Si Google détecte que vous émettez demandes de recherche via un programme sans leur consentement, ils ne renvoient pas les résultats. Votre réponse JSON contiendra ceci:

{"responseData": null, "responseDetails": "Suspected Terms of Service Abuse. Please see http://code.google.com/apis/errors", "responseStatus": 403} 
+0

parfois, il ne donne aucune exception et recherche le texte à partir de google et parfois il jette NullPointerException. –

0

Assurez-vous results et d'autres objets qu'il contient ne sont pas null avant de les utiliser.

if ((results != null) && (results.getResponseData() != null) && 
    (results.getResponseData().getResults() != null) && 
    (results.getResponseData().getResults().get(0) != null)) { 
    // Show title and URL of 1st result. 
    System.out.println(results.getResponseData().getResults().get(0).getTitle()); 
    System.out.println(results.getResponseData().getResults().get(0).getUrl()); 
} 
+1

Eh bien, ce que je demande est - pourquoi les résultats sont NULL en premier lieu et comment puis-je l'éviter – David