2013-12-14 3 views
1

다른 재생 목록의 YouTube 동영상 목록이 있으며이 동영상이 여전히 유효한지 (약 1000 개) 확인해야합니다. 내가이이 간단한 스크립트는 API v2를하고 그루비를 사용하여 유튜브을 치는 순간에하고있는 중이 야 : Groovy를 사용하는 Youtube API V2에 대한 다중 요청

import groovyx.net.http.HTTPBuilder 
import static groovyx.net.http.Method.GET 

http = new HTTPBuilder('http://gdata.youtube.com') 

myVideoIds.each { id -> 
    if (!isValidYoutubeUrl(id)) { 
     // do stuff 
    } 
} 

boolean isValidYoutubeUrl (id) { 
    boolean valid = true 
    http.request(GET) { 
     uri.path = "feeds/api/videos/${id}" 

     headers.'User-Agent' = 'Mozilla/5.0 Ubuntu/8.10 Firefox/3.0.4' 

     response.failure = { resp -> 
      valid = false 
     } 
    } 
    valid 
} 

하지만 어떤 하나의 id 인 403을 반환하기 시작 몇 초 후에 (가 원인 일 수 있습니다

사실 너무 많은 요청을 가까이서 실행하고 있습니다.) Thread.sleep(3000)과 같은 것을 삽입하면 문제가 줄어 듭니다. 요청을 지연시키는 것보다 나은 해결책이 있습니까?

답변

2

API의 V2에는 만들 수있는 요청 수에 시간 기반 제한이 있지만 엄격하고 빠른 제한이 아닙니다 (즉, 많은 후두 요인 및 항상 같은 한도가 아닐 수도 있습니다). 설명서에 표시되는 내용은 다음과 같습니다.

불규칙한 API 사용과 관련된 문제를 방지하기 위해 YouTube API가 할당량을 적용합니다. 특히 too_many_recent_calls 오류 은 API 서버가 동일한 발신자 에서 너무 많은 호출을 짧은 시간 내에 수신했음을 나타냅니다. 이 유형의 오류가 발생하면 몇 분 후에 다시 요청을 시도하는 것이 좋습니다.

당신이하는 것처럼 잠을 자면 피할 수 있지만, 10-15 초 정도면 좋을 것입니다.

그러나 배치 처리를 구현하는 것이 더 중요합니다. 이를 통해 최대 50 개의 요청을 동시에 처리 할 수 ​​있습니다.이 요청은 일일 할당량에 대한 전체 요청에 대해 50 개의 요청으로 계산되지만 시간 할당량 당 하나의 요청으로 계산됩니다. API의 v2를 사용하여 일괄 처리하는 것은 다소 복잡합니다. 먼저 일괄 처리 끝점에 POST 요청을 한 다음 여러 요청으로 보낼 수있는 결과를 기반으로합니다. 여기에 문서입니다 :

https://developers.google.com/youtube/2.0/developers_guide_protocol?hl=en#Batch_processing

당신은 API의 V3를 사용하는 경우 당신은 단지 요청에 한 번에 50 개 ID를 전송으로 일괄 처리는 상당히 쉬워집니다. 변경 :

http = new HTTPBuilder('http://gdata.youtube.com') 

에가 :

http = new HTTPBuilder('https://www.googleapis.com') 

이 그런 다음 uri.path 1000
youtube/v3/videos?part=id&max_results=key={your API key}&id={variable here that represents 50 YouTube IDs, comma separated} 

에 비디오를 설정 한 다음, 당신은 20 개 통화를 할 필요가 유일한 것입니다. 목록에 돌아 오지 않는 모든 비디오는 비디오 정보를 얻을 필요가있는 경우, id,snippet,contentDetails 또는 귀하의 요구에 적합한 뭔가하는 part 매개 변수를 변경 (더 이상 존재하지 않는 다음

는 문서입니다 :.

https://developers.google.com/youtube/v3/docs/videos/list#id

+0

의견을 보내 주셔서 감사합니다. – Randomize