2013-06-21 4 views
0

약 7000 개의 동영상이 게시되었으며 약 500 개를 '비공개'로 설정해야합니다. 먼저 해당 동영상 목록을 살펴보고 현재 '액세스' '작업' '나열된'상태를보고 싶습니다.200 개 이상의 요청 후 YouTube API v2/feeds/api/videos/VIDEOID가 실패합니다. 400 회의 요청이 잘못되었습니다.

YouTube V2 API를 사용할 때 콘텐츠에 OAuth 인증을 사용합니다.

url = 'http://gdata.youtube.com/feeds/api/videos/' + youtube_id + '?alt=json' 

약 214 요청 후, 이후의 모든 사람이 실패 :

<HTML> 
    <HEAD> 
    <TITLE>Bad Request</TITLE> 
    </HEAD> 
    <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
    <H1>Bad Request</H1> 
    <H2>Error 400</H2> 
    </BODY> 
</HTML> 

headers={'status': '400', 'content-length': '145', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'expires': 'Fri, 21 Jun 2013 20:08:28 GMT', 'server': 'GSE', 'cache-control': 'private, max-age=0', 'date': 'Fri, 21 Jun 2013 20:08:28 GMT', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'text/html; charset=UTF-8'} 

이 이유에 대한 더 자세한 내용은 없으며, 남아있는이 쿼리와 동영상 ID의 목록을 통해 그럼 루프 ~ 300, 실패.

다시 반복하면 다시 214 번 죽는다고 반복됩니다. 시퀀스의 중간에서 시작하여 처음 212 개를 건너 뛰면 426 번째 비디오에서 종료되므로 문제가없는 비디오 # 215는 격리되어 있지 않습니다.

할당량에 도달하는 것처럼 들리 겠지만, 우리는 우리 팀을 우연히 만났습니다. 그리고 API 콘솔은 우리가 한계 근처에 아무데도 보여주지 않습니다.

아이디어가 있으십니까?

아직 변경 사항을 작성하지 않으므로 걱정됩니다. 감사합니다. .

+0

질문의 제목에'solved'를 추가하지 마십시오. 대신 대답을 게시하고 수락하십시오. –

답변

0

API에 대한 쿼리를 실행하기 전에 OAUTH로 로그인하여 HTTP 요청 개체를 만들었습니다. 내 수정은 정기적으로 모든 10 번째 쿼리를 수행하는 로그인을 다시 호출하는 것이 었습니다. 이것이 충분할 것으로 보입니다.

FWIW, 내 인증 (Posnick의 예에 따라) 루틴 호출은 다음과 같습니다

class YouTubeV2(object): 
    """Authenticate to APIv2 and do stuff we can't do with v3, like captions 
    """ 
    OAUTH_SCOPE = "https://gdata.youtube.com" 

    def __init__(self, client_id, client_secret, developer_key): 
     """OAuth authenticates, creates 'http' attribute to make a .request(). 

     Get client_id, client secret from: http://code.google.com/apis/console 
     Get developer_key from: http://code.google.com/apis/youtube/dashboard 
     """ 
     # This auth code is generic and should be used for any APIv2 calls. 
     self.client_id = client_id 
     self.client_secret = client_secret 
     self.developer_key = developer_key 
     self.headers = {'GData-Version': '2', 
         'X-GData-Key': 'key=%s' % self.developer_key} 
     storage = Storage("%s-oauth" % sys.argv[0]) 
     self.credentials = storage.get() 
     if self.credentials is None or self.credentials.invalid: 
      # If there are no valid cached credentials, take the user through the 
      # OAuth2 login flow, and rely on the client library to cache the 
      # credentials once that's complete. 
      flow = OAuth2WebServerFlow(
       client_id=self.client_id, 
       client_secret=self.client_secret, 
       scope=self.OAUTH_SCOPE, 
       user_agent=sys.argv[0]) 
      self.credentials = run(flow, storage) 
     self.http = self.credentials.authorize(httplib2.Http()) 

yt2 = YouTubeV2(client_id, client_secret, developer_key)