1

我正在尝试使用 Youtube_it gem 来提取视频列表并存储 url,但内置对象每次最多只能给我 25 个项目。有谁知道如何使用这个宝石来做到这一点?

代码如下所示:

playlist = client.playlist(playlist_id)
playlist.videos
puts playlist.videos.length

同时,我认为我需要进行自定义搜索才能完成此操作。欢迎任何其他对我有用的建议和/或宝石。谢谢!

4

4 回答 4

2

我对 youtube_it 不太熟悉,但听起来您返回 25 个结果的原因是,这是可以在结果集中返回的默认最大结果。根据youtube_it 的帮助页面,您是否尝试过设置参数 max-results...

$ client.videos_by(:query => "penguin", :max_results => 50)

请注意,max_results 的数量有时会受到 YouTube API 本身的限制。

于 2012-07-28T22:18:41.523 回答
1

好吧,我很确定你不再遇到这个问题,但我找到了解决方案,我只想分享它。

如果您有播放列表的 ID,则可以执行以下操作

@xml = open("http://gdata.youtube.com/feeds/api/playlists/#{playlist_id}?max-results=50&start-index=1")
    @result = YouTubeIt::Parser::VideosFeedParser.new(@xml).parse_videos

在这个例子中,我最多只检索 50 个视频,但正如您所见,调整起来非常容易。

现在,@result 将成为一个包含视频对象的数组,因此您可以通过以下方式查看它:

@result.each do |video|
end

有一个小错误,由于某种原因 unique_id 属性为空,但您可以通过以下方式获取它:

str1_markerstring = "/v/"
str2_markerstring = "&"
@result.each do |video|
   unique_id = video.embed_url[/#{str1_markerstring}(.*?)#{str2_markerstring}/m, 1]
end

我希望这可以帮助与我有同样问题的其他人。

于 2013-05-02T03:10:10.603 回答
1

基于 Uriel 的回答,我写了一个有用的方法fetch_all_videos_from_playlist

def fetch_videos_from_playlist(playlist_id, start_index = 1)
  xml = open("http://gdata.youtube.com/feeds/api/playlists/#{playlist_id}?max-results=50&start-index=#{start_index}")
  YouTubeIt::Parser::VideosFeedParser.new(xml).parse_videos
end

def fetch_all_videos_from_playlist(playlist_id)
  all_videos = []
  offset = 1
  while (videos = fetch_videos_from_playlist(playlist_id, offset)).length > 0
    all_videos += videos
    offset += videos.length
  end
  all_videos
end

它一次获取 50 个视频,这似乎是当前 YouTube 支持的最大数量。显然,一个播放列表最多可以容纳 200 个视频。因此,该方法最多需要 4 次获取来获取所有视频。

于 2014-02-20T13:18:36.787 回答
0

在 GitHub 上的 youtube_it 问题中心找到了这个解决方案:

playlists_first_page = @client.playlists('sbnation', {'start-index' => 1, 'max-results' => 25})
playlists_second_page = @client.playlists('sbnation', {'start-index' => 26, 'max-results' => 25})

来源:https ://github.com/kylejginavan/youtube_it/issues/111

于 2014-05-21T23:57:29.270 回答