Twitch TV API调用在GAE中生成错误400

时间:2012-08-27 05:55:27

标签: python api google-app-engine

我过去遇到过这个问题,并且到目前为止已经能够解决这个问题。在应用程序引擎中调用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'

2 个答案:

答案 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尝试了相同的应用程序,它运行完美。它可能会在适当的时候修复,但如果不是,请不要浪费你的时间来克服这个问题!干杯!