2013-03-17 4 views
1

Je peux utiliser la bibliothèque python JSON pour extraire des informations à partir de cette adresseTwitter API de recherche, Python et JSON problème d'analyse syntaxique

http://search.twitter.com/search.json?q=%23damn&result_type=recent&rpp=1&filter:retweets 

et la plupart du temps à l'aide

j =json.loads(urllib.urlopen('http://search.twitter.com/search.json?q=%23damn&result_type=recent&rpp=1&filter:retweets').read()) 

text = j['results'][0]['text'] 
id = j['results'][0]['id'] 

Je peux extraire le texte et ID à partir des résultats et les pprint. Je demande JSON toutes les 15 secondes afin que je ne sois pas bloqué par la limite de twitter.

De temps en temps, je rencontre cela.

{u'completed_in': 0.021, 
u'max_id': 313306991827238912L, 
u'max_id_str': u'313306991827238912', 
u'next_page': u'?page=2&max_id=313306991827238912&q=%23damn&rpp=1&result_type=recent', 
u'page': 1, 
u'query': u'%23damn', 
u'refresh_url': u'?since_id=313306991827238912&q=%23damn&result_type=recent', 
u'results': [], 
u'results_per_page': 1, 
u'since_id': 0, 
u'since_id_str': u'0'} 

Rien ne semble être contenu dans le champ des résultats. Cela provoque l'erreur suivante.

Traceback (most recent call last): 
    File "C:\Users\Home\Desktop\test.py", line 32, in <module> 
    text = j['results'][0]['text'] 
IndexError: list index out of range 

Qui ferme à son tour la ligne de commande Python. J'ai envisagé de placer une boucle 'while' pour m'assurer que le champ de résultats est plein avant de continuer mais je pense que cela pourrait envoyer beaucoup de requêtes et faire sortir le script de twitter.

Avez-vous rencontré ce problème? Savez-vous comment le surmonter?

+0

Pourquoi ne faites pas simplement 'si j ['résultats']:'? –

+0

pourquoi ne pas attendre un peu, si le champ des résultats est vide? consultez http://stackoverflow.com/questions/4152969/genrate-timer-in-python –

+0

Je vais essayer ça maintenant. Parfois, il faut une heure ou deux avant qu'un résultat douteux entre en jeu. – Hooperstu

Répondre

0

Je soit jeter dans une instruction if avant d'appeler les résultats ou un essai, je l'ai remarqué dans mon temps en utilisant l'API Web est que les résultats ne sont pas toujours fiables, mieux être du bon côté