2017-03-13 1 views
0

채널의 모든 동영상을 보려면 Yt gem을 사용하고 싶습니다. 내 YouTube Data API 키로 보석을 구성합니다.Yt 보석을 사용하여 YouTube 채널의 모든 동영상을 가져 오는 방법은 무엇입니까?

불행히도 1000 개 이상의 동영상이있는 채널의 경우에도 최대 1000 개의 동영상을 반환합니다. Yt::Channel#video_count은 올바른 비디오 수를 반환합니다.

channel = Yt::Channel.new id: "UCGwuxdEeCf0TIA2RbPOj-8g" 
channel.video_count   # => 1845 
channel.videos.map(&:id).size # => 949 

유튜브 API

는 요청에 따라 50 개 이상의 항목을 반환하도록 설정, 그래서 나는 yt에 자동으로 결과를 각각 다음 페이지를 거치지 여러 요청이 50 개 이상의 결과를 반환 할 수 있도록 수행 추측 할 수 없습니다.

모든 결과 페이지를 살펴 보지는 않지만 어떤 이유로 든. 결과 페이지를 어떻게 제어하는지 Yt에 표시되지 않습니다. 특히, 결과의 단일 페이지를 얻고,이 값으로 새 요청을 수행하기 위해 리턴 값 nextPageToken에 액세스하도록 강제 할 수있는 방법을 찾을 수 없습니다.

아이디어가 있으십니까?

답변

0

gem의/spec 폴더를 보면 코드 테스트를 볼 수 있습니다.

describe 'when the channel has more than 500 videos' do 
    let(:id) { 'UC0v-tlzsn0QZwJnkiaUSJVQ' } 

    specify 'the estimated and actual number of videos can be retrieved' do 
    # @note: in principle, the following three counters should match, but 
    # in reality +video_count+ and +size+ are only approximations. 
    expect(channel.video_count).to be > 500 
    expect(channel.videos.size).to be > 500 
    end 
end 

나는 몇 가지 테스트를했고, 내가 그것을 발견 한 것은 것을 : VIDEO_COUNT는 다음 채널의 이름으로 유튜브에 표시되는 번호입니다. 이 값은 정확하지 않습니다. 그것이 무엇을 나타내는 지 확신하지 마십시오.

channel.videos.size을 수행하는 경우 비디오 컬렉션에 빈 (?) 레코드가 포함될 수 있으므로 숫자도 정확하지 않습니다.

channel.videos.map(&:id).size을 수행하면 반환 값이 정확해야합니다. 올바른으로 나는에 나열된 비디오의 수와 일치한다는 의미는 :

https://www.youtube.com/channel/:channel_id/videos

+0

감사하지만 난 그냥 https://www.youtube.com/channel에 나열된 비디오의 수를 계산 한/UCGwuxdEeCf0TIA2RbPOj-8g/videos (모든 동영상이 표시 될 때까지 '추가로드'를 클릭했습니다.) 실제로 'channel.video_count'와 정확히 일치합니다 (1845). 그래서 나는'channel.videos'가 모든 채널 비디오를 반환하지 않는 것으로 보입니다. – Florent2

+0

당신 말이 맞아요. 더 정확하게 사례를 테스트 했어야합니다. 내가 읽은 바에 따르면 YT API는 최대 1k 개의 레코드로 제한됩니다. 그것은 그 보석이 한계를 초과함에 따라 모든 비디오를 반환 할 수없는 이유를 주로 설명합니다. – DiodonHystrix

관련 문제