Je demande des termes de recherche YouTube pour une utilisation avec JQuery Autocomplete, mais j'ai du mal à convertir la réponse de l'URL en un format approprié.
dans ma vue (django / python) Je fais: p>
j2 = json.loads(data2.read())
4 Réponses :
Ce n'est pas JSON C'est JavaScript, si vous souhaitez l'utiliser comme JSON, vous devez désigner la partie JavaScript: mais vous pouvez simplement modifier l'URL (supprimer la fenêtre JSONP =. yt.www.suggest.handlerleresponse 'Part) Pour avoir une sortie PURE JSON: P> >>> data2 = urllib2.urlopen('http://suggestqueries.google.com/complete/search?hl=en&ds=yt&client=youtube&hjson=t&q=jum&cp=3')
>>> json.loads(data2.read())
[u'jum', [[u'jumpstyle', '', u'0'], [u'jump', '', u'1'], [u'jump around', '', u'2'], [u'jump on it', '', u'3'], [u'jumper', '', u'4'], [u'jump around house of pain', '', u'5'], [u'jumper third eye blind', '', u'6'], [u'jumbafund', '', u'7'], [u'jump then fall taylor swift', '', u'8'], [u'jumpstyle music', '', u'9']], '', '', '', '', '', {}]
La sortie de la page n'est pas une page codée JSON appropriée. Vous devez supprimer l'appel de la fonction JS l'enveloppant.
Faites ceci: p>
import urllib2
import re
import json
data2 = urllib2.urlopen('http://suggestqueries.google.com/complete/search?' +
'hl=en&ds=yt&client=youtube&hjson=t&jsonp=window.yt.' +
'www.suggest.handleResponse&q=jum&cp=3')
data = re.compile('^[^\(]+\(|\)$').sub('', data2.read())
parsedData = json.loads(data)
Vous faites une demande JSON-P qui enveloppe automatiquement le JSON dans une fonction de rappel JavaScript, celle que vous avez spécifiée dans la demande en fait :)
Élevez le paramètre JSON-P de votre demande et vous allez Obtenez directement JSON directement à partir de la demande sans avoir à faire des trucs de python supplémentaires du tout. P>
Ceci devrait être votre demande: p>
["jum",[["jumpstyle","","0"],["jump","","1"],["jump around","","2"],["jump on it","","3"],["jumper","","4"],["jump around house of pain","","5"],["jumper third eye blind","","6"],["jumbafund","","7"],["jump then fall taylor swift","","8"],["jumpstyle music","","9"]],"","","","","",{}]
Ah ... Comment puis-je ressembler à: ["Jumpstyle", "sauter", "sauter" ...] Je ne sais pas comment manipuler ces types de données: qu'est-ce que c'est? Une liste, une chaîne, un objet JSON? J'ai essayé json.loads (retourné_by_url) mais obtenez une erreur.
Xavier semble avoir couvert que :)
Supprimer le & jsonp = window.yt.www.suggest.handleresponse code> partie