如何使用Yt gem获取YouTube频道的所有视频?

时间:2017-03-13 10:35:21

标签: ruby youtube youtube-data-api

我想使用Yt gem来获取频道的所有视频。我使用YouTube Data API密钥配置了gem。

不幸的是,当我使用它时,它会返回最多约1000个视频,即使对于视频超过1000个的频道也是如此。 Yt::Channel#video_count会返回正确数量的视频。

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

Youtube API无法设置为每个请求返回50个以上的项目,因此我想Yt会自动执行多个请求,每个下一页的结果都能返回超过50个结果。

由于某种原因,它没有通过所有结果页面。我没有看到Yt让我控制它如何通过结果页面的方式。特别是我找不到强制它获取单页结果的方法,访问返回值nextPageToken,以便使用此值执行新请求。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

查看gem' s / 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是频道名称旁边youtube上显示的数字。这个值不准确。不能确定它代表什么。

如果您执行channel.videos.size,则该数字也不准确,因为视频集合可能包含一些空(?)记录。

如果您执行channel.videos.map(&:id).size,则返回的值应该是正确的。正确的意思是它应该等于:

中列出的视频数量
  

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