2010-07-30 9 views
7

Ich versuche, Twitter API-Suchergebnisse für ein bestimmtes Hashtag mit Python zu bekommen, aber ich habe Probleme mit diesem "Kein JSON-Objekt könnte decodiert werden" Fehler. Ich musste den zusätzlichen% am Ende der URL hinzufügen, um einen String-Formatierungsfehler zu vermeiden. Könnte dieser JSON-Fehler mit dem zusätzlichen% zusammenhängen oder wird er durch etwas anderes verursacht? Irgendwelche Vorschläge würden sehr geschätzt.Wie behebe ich einen "JSONDecodeError: Kein JSON-Objekt konnte decodiert werden: Zeile 1 Spalte 0 (char 0)"?

ein Ausschnitt:

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

Was ist der eigentliche Inhalt der Antwort? Mit Ihrem Code können Sie das mit etwas wie 'content = f.read()' finden. –

+0

Ich habe Ihren Code verwendet und versucht, Inhalt zu drucken, aber den gleichen Fehler: JSONDecodeError: Kein JSON-Objekt konnte decodiert werden: Zeile 1 Spalte 0 (char 0) Funktion pull_tweets in twitter_puller_1.py bei Zeile 28 data1 = search_twitter (query1) Funktion search_twitter in twitter_puller_1.py in Zeile 14 json = simplejson.load (f) Funktion Last in unberechtigt in Zeile 328 None Funktion lädt in unberechtigt in Zeile 384 None Dekodierungsfunktion in unberechtigt in Zeile 402 OBJ, end = self.raw_decode (s, idx = _w (s, 0) .end()) Funktion raw_decode in unbenannt in Zeile 420 Raise JSONDecodeErro r ("Kein JSON-Objekt konnte decodiert werden", s, idx) – user374372

+1

Siehe blcArmadillos Antwort. Sie müssen das Argument "Callback" von Ihrer Anfrage zu Twitter entfernen. Etwas wie "url =" http://search.twitter.com/search.json?q=%s "% quoted_search_term" sollte funktionieren. –

Antwort

8

Es gibt ein paar Probleme mit Ihrem ursprünglichen Code waren. Zuerst liest du nie den Inhalt von Twitter ein, sondern öffnest einfach die URL. Als Zweites in der URL setzen Sie einen Rückruf (twitterSearch). Bei einem Rückruf wird der zurückgegebene JSON in einen Funktionsaufruf eingeschlossen, in diesem Fall wäre es also twitterSearch(). Dies ist nützlich, wenn Sie möchten, dass eine spezielle Funktion die zurückgegebenen Ergebnisse behandelt.

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

Sie haben halb Recht. Das eigentliche Problem war das 'callback'-Argument, das dazu führt, dass Twitter' JSONP' zurückgibt, das nicht als JSON' geparst werden kann. Aber der Code zum Lesen des JSON war in Ordnung (er übergab das dateiähnliche Objekt "f" direkt an die 'simplejson.load()' -Funktion, die dateiähnliche Objekte aufnimmt). –

+0

Ahh, guter Punkt! – blcArmadillo

+0

Vielen Dank für die Erklärung, blcArmadillo und Will McCutchen! Es funktioniert jetzt :) – user374372

Verwandte Themen