2010-07-30 14 views
7

Estoy tratando de obtener resultados de búsqueda de Twitter API para un hashtag dado usando Python, pero estoy teniendo problemas con este error "No se puede decodificar ningún objeto JSON". Tuve que agregar el% extra al final de la URL para evitar un error de formato de cadena. ¿Podría este error JSON estar relacionado con el% extra, o es causado por algo más? Cualquier sugerencia sería muy apreciada.¿Cómo puedo arreglar un "JSONDecodeError: no se puede decodificar ningún objeto JSON: línea 1 columna 0 (char 0)"?

un fragmento:

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

¿Cuál es el contenido real de la respuesta? Usando su código, puede encontrarlo con algo como 'content = f.read()'. –

+0

Utilicé el código e intenté imprimir el contenido pero obtuve el mismo error: JSONDecodeError: No se pudo decodificar ningún objeto JSON: línea 1 columna 0 (char 0) función pull_tweets en twitter_puller_1.py en la línea 28 data1 = search_twitter (query1) función search_twitter en twitter_puller_1.py en la línea 14 json = simplejson.load (f) carga función en sin título en la línea 328 Ninguno cargas de función en sin título en la línea 384 Ninguno función de decodificación en sin título en la línea 402 obj, end = auto.raw_decode (s, idx = _w (s, 0) .end()) función raw_decode en sin título en la línea 420 raise JSONDecodeErro r ("No se puede decodificar ningún objeto JSON", s, idx) – user374372

+1

Consulte la respuesta de blcArmadillo. Debe eliminar el argumento 'devolución de llamada 'de su solicitud a Twitter. Algo como 'url =" http://search.twitter.com/search.json?q=%s "% quoted_search_term' debería funcionar. –

Respuesta

8

Había un par de problemas con el código inicial. Primero, nunca leyó en el contenido de Twitter, acaba de abrir la url. En segundo lugar en la url estableces una devolución de llamada (twitterSearch). Lo que hace una devolución de llamada es envolver el json devuelto en una llamada de función, por lo que en este caso habría sido twitterSearch(). Esto es útil si desea una función especial para manejar los resultados devueltos.

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

Tienes la mitad de razón. El problema real fue el argumento 'callback', que hace que Twitter devuelva' JSONP', que no se puede analizar como JSON'. Pero el código para leer el JSON estaba bien (simplemente pasó el objeto similar a un archivo 'f' directamente a la función' simplejson.load() ', que toma objetos similares a archivos). –

+0

Ahh, buen punto! – blcArmadillo

+0

¡Muchas gracias por explicarme esto, blcArmadillo y Will McCutchen! Ahora funciona :) – user374372

Cuestiones relacionadas