2010-07-30 3 views
7

J'essaie d'obtenir les résultats de la recherche API Twitter pour un hashtag donné en utilisant Python, mais j'ai des problèmes avec cette erreur "Aucun objet JSON n'a pu être décodé". J'ai dû ajouter le% supplémentaire vers la fin de l'URL pour éviter une erreur de formatage de chaîne. Cette erreur JSON peut-elle être liée au% supplémentaire, ou est-elle causée par autre chose? Toutes les suggestions seraient très appréciées.Comment réparer un "JSONDecodeError: Aucun objet JSON n'a pu être décodé: ligne 1 colonne 0 (char 0)"?

Un extrait:

import simplejson 
import urllib2 

def search_twitter(quoted_search_term): 
    url = "http://search.twitter.com/search.json?callback=twitterSearch&q=%%23%s" % quoted_search_term 
    f = urllib2.urlopen(url) 
    json = simplejson.load(f) 
    return json 
+1

Quel est le contenu de la réponse? En utilisant votre code, vous pouvez trouver cela avec quelque chose comme 'content = f.read()'. –

+0

J'ai utilisé votre code et j'ai essayé d'imprimer du contenu mais j'ai eu la même erreur: JSONDecodeError: Aucun objet JSON n'a pu être décodé: ligne 1 colonne 0 (char 0) function pull_tweets dans twitter_puller_1.py à la ligne 28 data1 = search_twitter (query1) fonction search_twitter dans twitter_puller_1.py à la ligne 14 json = simplejson.load (f) de la charge de la fonction en titre à la ligne 328 fonction charge Aucun en titre à la ligne 384 de décodage de fonction Aucun en titre à la ligne 402 obj, end = self.raw_decode (s, idx = _w (s, 0) .end()) function raw_decode dans sans titre à la ligne 420 raise JSONDecodeErro r ("Aucun objet JSON n'a pu être décodé", s, idx) – user374372

+1

Voir la réponse de blcArmadillo. Vous devez supprimer l'argument 'callback' de votre requête sur Twitter. Quelque chose comme 'url =" http://search.twitter.com/search.json?q=%s "% quoted_search_term' devrait fonctionner. –

Répondre

8

Il y avait des problèmes de couple avec votre code initial. D'abord, vous n'avez jamais lu dans le contenu de Twitter, vient d'ouvrir l'URL. Deuxième dans l'URL, vous définissez un rappel (twitterSearch). Ce que fait un rappel est d'enrouler le json retourné dans un appel de fonction, dans ce cas, il aurait été twitterSearch(). Ceci est utile si vous souhaitez qu'une fonction spéciale gère les résultats renvoyés.

import simplejson 
import urllib2 

def search_twitter(quoted_search_term): 
    url = "http://search.twitter.com/search.json?&q=%%23%s" % quoted_search_term 
    f = urllib2.urlopen(url) 
    content = f.read() 
    json = simplejson.loads(content) 
    return json 
+3

Vous avez à moitié raison. Le véritable problème était l'argument 'callback', ce qui a amené Twitter à retourner' JSONP', qui ne peut pas être analysé comme JSON'. Mais le code pour lire le JSON était correct (il passait juste l'objet de type fichier 'f' directement à la fonction' simplejson.load() ', qui prend des objets de type fichier). –

+0

Ahh, bon point! – blcArmadillo

+0

Merci beaucoup de me l'expliquer, blcArmadillo et Will McCutchen! Ça fonctionne maintenant :) – user374372

Questions connexes