2012-08-27 2 views
0

저는이 문제를 과거에 경험해 왔으며 지금까지 해결할 수있었습니다. 앱 엔진에서 Twitch API를 호출 할 때 Error 400이 발생합니다. Google 그룹스 twitch 페이지뿐만 아니라 twitch tv 자신의 포럼에 가봤습니다.GAE에서 Twitch TV API 호출로 오류 400 발생

트위치 TV와 App Engine에서 수 많은 사람들과 이야기 할 수 있었기 때문에이 문제를 해결할 수있었습니다. 내 질문을 명확히하기 위해 Twitch TV API에 대한 URL 호출을 시도 할 때 일어나는 일을 직접 복제 할 수있는 간단한 응용 프로그램을 만들 수있었습니다.

요약 :

이 내 응용 프로그램을 배포 할 때 실패 간단한 코드이지만, 로컬 호스트 환경에서 완벽하게 작동 : 여기

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", "game": "Guild Wars 2", "viewers": 3229, ""{ "self :"https://api.twitch.tv/kraken/streams/nl_kripp "},"_id ": 3681678672,"broadcaster ":"fme ","channel ": {"game " "길드 워 2", "이름": "nl_kripp", "created_at": "2012-04-15T02 : 25 : 31Z", "teams": [{ "name": "nolife", "created_at": "2012 -06-20T23 : 48 : 51Z ","배경 ": null,"updated_at ":"2012-06-20T23 : 49 : 08Z ","배너 ": null,"_ 링크 ": {"self ":"https : //api.twitch.tv/kraken/teams/nolife"},"_id":330,"logo":null,"inn" ,"display_name":"noLife"}],"banner " : null, "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", "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 레인저 Lvling. Server = 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 "}}

이제 앱 엔진 환경에서 똑같은 응용 프로그램 :

http://urltestingsite.appspot.com/

나는 꽤을 보냈습니다 이 문제는 내 웹 사이트의 주요 체인 링크이므로이 문제를 해결하려고 노력합니다. 왜 이런 일이 발생했는지 원격으로 알 수 있습니까?

EDIT - 이것은 t입니다 내 실제 응용 프로그램에서 그는 코드 :

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

이 오류는 몇 번을 반환됩니다.

this thread에 따르면 실제로 발생할 수있는 내용 일 수 있습니다.GAE는 공유 환경이기 때문에 twitch.tv 및/또는 justin.tv를 쿼리하는 사용자가 많을 수 있으므로이 제한을 자주 극복해야합니다 (둘 사이의 제한이 공유되는지는 알 수 없습니다).

또한 this other thread에 따르면 api는 GAE 제작 사용자 에이전트를 좋아하지 않습니다. (직접 시도했지만 문제는 여전히 존재합니다.)

두 번째 문제점에 대한 해결책은 사용자 에이전트 (How to change User-Agent on Google App Engine UrlFetch service? 참조)를 설정하는 것이지만 여전히 속도 제한을 초과 할 것입니다.

+2

AFAIK,'User-agent'는 완전히 편집 할 수 없습니다. 맞춤 UA를 설정할 수 있지만 GAE는 항상 AppEngine-Google을 다음과 같이 추가합니다. http://code.google.com/p/googleappengine/issues/detail?id=342 –

+1

+1 나는 ' 그걸 알아. 다행스럽게도이 경우 유감스럽게도 유일한 UA는 콜론 뒤에 텍스트가있는 것입니다. –

+0

고마워! 몇 분 후에 이걸 줄께. – suitegamer

0

나는 내 자신의 질문에 답하는 것에 어리 석음을 느낀다. 그러나 다른 누구라도이 문제에 부딪혔다면, 나는 그 문제에 빛을 퍼트 리기를 희망한다.

Twitch TV는 현재 App Engine에서 모든 통화를 블랙리스트에 올립니다. 나는 이것이 결국 그들의 실수이지만, 어쨌든, 나는 ow3d.tv의 API를 사용하여 같은 응용 프로그램을 시도하고 완벽하게 작동했습니다. 때로는 고쳐질 수도 있지만, 그렇지 않은 경우이 문제를 극복하기 위해 시간을 낭비하지 마십시오! 건배!