我过去遇到过这个问题,并且到目前为止已经能够解决这个问题。在应用程序引擎中调用Twitch API时,我收到错误400.我去过谷歌团体抽搐页面,以及抽搐电视自己的论坛。
我能够在Twitch TV以及App Engine上与很多人交谈,但没有运气,我能够解决这个问题。为了澄清我的问题,我已经能够创建一个简单的应用程序来直接复制当我尝试对Twitch TV的API进行URL调用时发生的事情。
要点:
这是部署应用程序时失败的简单代码,但在localhost环境中完美运行:
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)
以下是这个确切的应用程序在localhost上运行时生成的内容(因为它也是假设的):
{“stream”:{“name”:“live_user_nl_kripp”,“游戏”:“激战2”,“观众”: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”, “队”:[{ “名称”: “nolife”, “created_at”: “2012-06-20T23:48:51Z”, “背景”:空, “的updated_at”: “2012-06-20T23:49:08Z”, “旗帜”:空, “_links”:{ “自我”: “https://api.twitch.tv/kraken/teams/nolife”}, “_id”:330, “标识”:空, “信息”: “\ n”, “DISPLAY_NAME”: “noLife”}], “旗帜”:空 “的updated_at”:“2012-08-26T21:12: 55Z “ ”背景“: ”http://static-cdn.jtvnw.net/jtv_user_pictures/nl_kripp-channel_background_image-527e8b792a46df22.png“, ”URL“: ”http://www.twitch.tv/nl_kripp“,”标志 “:” http://static-cdn.jtvnw.net/jtv_user_pictures/nl_kripp-profile_image-267fd5e2fb95a15d-300x300.png “ ”_id“:29795919, ”_links“:{ ”stream_key“:” https://开头的API .twitch.tv /海妖/渠道/ nl_kripp / stream_key “ ”自我“: ”https://api.twitch.tv/kraken/channels/nl_kripp“, ”聊天“:” 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。 Server = Maguuma“},”预览“:”http://static-cdn.jtvnw.net/previews/live_user_nl_kripp-630x473.jpg“,”partner“:true},”_ links“:{”self“:”https ://api.twitch.tv/kraken/streams/nl_kripp“}}
现在,App Engine环境中的应用程序完全相同:
http://urltestingsite.appspot.com/
我花了很长时间试图解决这个问题,因为它是我网站上的主要链接链接。有没有人,对于为什么会发生这种情况有任何远程想法?
编辑 - 这是我实际申请中的代码:
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'
此代码返回此AttributeError:
AttributeError: '_URLFetchResult' object has no attribute 'get_type'
答案 0 :(得分:2)
当您达到速率限制或拒绝访问您的应用时,有时会返回此错误。
根据this thread,它可能实际上正在发生。由于GAE是一个共享环境,你肯定会经常达到这些限制,因为可能有很多用户查询twitch.tv和/或justin.tv(我不知道两者之间是否共享限制)。
同样根据this other thread,api只是不喜欢GAE制作用户代理(我自己尝试过,问题仍然存在)。
第二个问题的解决方案是设置用户代理(请参阅How to change User-Agent on Google App Engine UrlFetch service?),但您仍可能达到速率限制。
答案 1 :(得分:0)
我回答自己的问题感到很愚蠢,但是如果有其他人遇到这个问题,我希望能够解决这个问题。
Twitch TV目前正在将App Engine的任何来电列入黑名单。我确定这是他们的错误,但无论如何,我使用ow3d.tv的API尝试了相同的应用程序,它运行完美。它可能会在适当的时候修复,但如果不是,请不要浪费你的时间来克服这个问题!干杯!