Twitch TV Appel de l'API Génère l'Erreur 400 en FGA
J'ai rencontré ce problème dans le passé, et ont été en mesure de travailler autour d'elle jusqu'à maintenant. Lors d'un appel à la Contraction de l'API dans app engine, j'obtiens une Erreur 400. J'ai été à la google groupes contraction de la page, ainsi que twitch tv propre forum.
J'ai pu parler à une tonne de gens à Twitch TV, ainsi que d'App Engine, et à pas de chance ai-je été en mesure de résoudre ce problème. Dans l'espoir de clarifier ma question, j'ai été en mesure de faire une application simple à reproduire directement ce qui se passe quand j'essaie de faire un URL appel à Twitch TV API.
Résumé:
C'est le code simple qui échoue lorsque mon application est déployée, mais fonctionne parfaitement dans le localhost de l'environnement:
import webapp2
import urllib2
class MainHandler(webapp2.RequestHandler):
def get(self):
url = ('https://api.twitch.tv/kraken/streams/nl_kripp')
contents = urllib2.urlopen(url)
self.response.out.write(contents.read())
app = webapp2.WSGIApplication([('/', MainHandler)],
debug=True)
Ici est ce que cette application génère lorsque vous en cours d'exécution sur l'hôte local (comme il est supposé trop):
{"flux":{"nom":"live_user_nl_kripp","jeu":"Guild Wars 2","viewers":3229,"_links":{"self":"https://api.twitch.tv/kraken/streams/nl_kripp"},"_id":3681678672,"broadcaster":"fme","channel":{"game":"Guild Wars 2","name":"nl_kripp","created_at":"2012-04-15T02:25:31Z","teams":[{"name":"nolife","created_at":"2012-06-20T23:48:51Z","background":null,"updated_at":"2012-06-20T23:49:08Z","banner":null,"_links":{"self":"https://api.twitch.tv/kraken/teams/nolife"},"_id":330,"logo":null,"info":"\n","display_name":"noLife"}],"banner":null,"updated_at":"2012-08-26T21:12:55Z","background":"http://static-cdn.jtvnw.net/jtv_user_pictures/nl_kripp-channel_background_image-527e8b792a46df22.png","url":"http://www.twitch.tv/nl_kripp","logo":"http://static-cdn.jtvnw.net/jtv_user_pictures/nl_kripp-profile_image-267fd5e2fb95a15d-300x300.png","_id":29795919,"_links":{"stream_key":"https://api.twitch.tv/kraken/channels/nl_kripp/stream_key","self":"https://api.twitch.tv/kraken/channels/nl_kripp","chat":"https://api.twitch.tv/kraken/chat/nl_kripp","commercial":"https://api.twitch.tv/kraken/channels/nl_kripp/commercial","features":"https://api.twitch.tv/kraken/channels/nl_kripp/features"},"mature":null,"video_banner":"http://static-cdn.jtvnw.net/jtv_user_pictures/nl_kripp-channel_offline_image-f3ad1124bc19cffd-640x360.png","display_name":"nl_Kripp","status":"nolife Kripparrian -- GW2 Ranger Lvling. Serveur = Maguuma"},"preview":"http://static-cdn.jtvnw.net/previews/live_user_nl_kripp-630x473.jpg","partner":true},"_links":{"self":"https://api.twitch.tv/kraken/streams/nl_kripp"}}
Et maintenant exactement la même application dans l'App Engine environnement:
http://urltestingsite.appspot.com/
J'ai passé un bon moment à essayer de résoudre ce problème car c'est une grande chaîne de lien dans mon site web. Quelqu'un, qui n'ont aucune idée de pourquoi cela se produit?
MODIFIER - c'est le code de mon application réelle:
def check_if_live(self, b):
url = ('https://api.twitch.tv/kraken/streams/%s' %b)
url2 = urlfetch.fetch(url, headers = {'User-Agent': "suitegamer_User-Agent"})
contents = urllib2.urlopen(url2)
if (contents.read()).find('{"stream":null,') == 0:
return 'Offline'
else:
return 'Live'
Ce code est de retour cette AttributeError:
AttributeError: '_URLFetchResult' object has no attribute 'get_type'
Vous devez vous connecter pour publier un commentaire.
Cette erreurs sont retournées, à certains moments, lorsque vous atteignez la limite de taux ou lorsque votre application est vu refuser l'accès.
Selon ce fil, il est peut-être ce qui pourrait effectivement être le cas. Depuis GAE est un environnement partagé, vous aurez très certainement frappé ces limites, très souvent, car il pourrait y avoir de nombreux utilisateurs d'interroger la twitch.tv et/ou justin.tv (je ne sais pas si les limites sont partagés entre les deux).
Également selon cet autre fil, l'api n'aime pas le GAE de production de l'Agent Utilisateur (je l'ai essayé moi-même et le problème est toujours là).
La solution pour le deuxième problème est de mettre le User-Agent (voir Comment changer le User-Agent sur Google App Engine UrlFetch service?), mais vous aurez encore probablement frapper les limites de fréquence.
User-agent
ne peut pas être complètement modifié. Vous pouvez configurer votre personnalisé UA, mais GAE sera toujours ajouterAppEngine-Google
à la fin de celui-ci: code.google.com/p/googleappengine/issues/detail?id=342Je me sens stupide de répondre à ma propre question, cependant si quelqu'un d'autre s'exécute dans ce problème, j'espère que je propagation de la lumière sur la question.
Twitch TV est actuellement à la liste noire de tous les appels à partir de l'App Engine. Je suis sûr que c'est une erreur de leur fin, mais de toute façon, j'ai essayé la même application à l'aide de ow3d.tv's de l'API et cela a fonctionné parfaitement. Il sera probablement corrigé dans les temps, mais si ce n'est pas le cas, ne perdez pas votre temps à essayer de surmonter ce problème! Cheers!