我想使用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
,以便使用此值执行新请求。
有什么想法吗?
答案 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
,则返回的值应该是正确的。正确的意思是它应该等于: