0

我过去遇到过这个问题,直到现在都能够解决它。在应用程序引擎中调用 Twitch API 时,我收到错误 400。我去过谷歌群组 twitch 页面,以及 twitch tv 自己的论坛。

我能够在 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 上运行时生成的内容(假设也是如此):

twitch.tv/kraken/channels/nl_kripp/features"},"成熟":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。服务器 = 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"}}

现在在 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'
4

2 回答 2

2

当您达到速率限制或您的应用程序被拒绝访问时,有时会返回此错误。

根据这个线程,这可能是实际发生的事情。由于 GAE 是一个共享环境,您肯定会经常达到这些限制,因为可能有很多用户查询 twitch.tv 和/或 justin.tv(我不知道限制是否在两者之间共享)。

同样根据this other thread,api只是不喜欢GAE生产用户代理(我自己尝试过,问题仍然存在)。

第二个问题的解决方案是设置 User-Agent(请参阅如何在 Google App Engine UrlFetch 服务上更改 User-Agent?),但您仍然可能会达到速率限制。

于 2012-08-27T06:59:16.640 回答
0

我觉得回答自己的问题很愚蠢,但是如果其他人遇到这个问题,希望我能在这个问题上有所启发。

Twitch TV 目前正在将来自 App Engine 的所有呼叫列入黑名单。我确定这是他们的一个错误,但无论如何,我使用 ow3d.tv 的 API 尝试了同一个应用程序,它运行完美。它可能会在适当的时候得到修复,但如果不是,请不要浪费时间试图解决这个问题!干杯!

于 2012-08-28T20:33:50.060 回答