0

我花了一天的大部分时间阅读文档并观看有关如何在我的网站上嵌入 YouTube 的各种视频,并取得了一些不错的进展。但我现在有点卡住了。

我在一个网站上工作,除其他外,它将查看我的用户的个人资料,找到他们最喜欢的团队,然后显示该团队上传到其官方 YouTube 频道的视频。

我正在使用 Data APi v3 并使用 HTTParty。我能够获取视频 ID,这是检索每个视频资源所需的。这很好用。这是代码。(y_user 是频道名称,y_key 是我的 API 密钥)

__

获取频道信息....

response = HTTParty.get("https://www.googleapis.com/youtube/v3/channels?part=id%2C+snippet&forUsername=#{y_user}&key=#{y_key}")

channel_id = response["items"][0]["id"]

一个新呼叫,这次使用频道 ID 并从频道请求六个视频记录。

channel_info = HTTParty.get("https://www.googleapis.com/youtube/v3/search?part=id%2C+snippet&channelId=#{channel_id}&maxResults=6&order=date&key=#{y_key}")

现在从每个视频记录中获取视频 ID..

@video_ids = []
channel_info["items"].each do |item|
  @video_ids.push(item["id"]["videoId"])
end

获取每个视频 ID 的视频资源...并检索播放器的嵌入代码。

@videos = []
@video_ids.each do |video_id|
  source = HTTParty.get("https://www.googleapis.com/youtube/v3/videos?part=id,snippet,player&id=#{video_id}&key=#{y_key}")
  single_video  = source["items"][0]["player"]["embedHtml"]
  @videos.push(single_video)
end

和我的 HTML....

<% @videos.each do |v| %>
    <div class="video-slide"><%= v %></div>
<% end %>

这为我返回的是与我请求的六个视频相对应的六个 iframe,这就是我想要的。您可以看到每个视频 ID 都是唯一的......

<iframe type='text/html' src='http://www.youtube.com/embed/fNyKJjARuj4' width='640' height='360' frameborder='0' allowfullscreen='true'/>

<iframe type='text/html' src='http://www.youtube.com/embed/6HxJG60kZCI' width='640' height='360' frameborder='0' allowfullscreen='true'/>

ETC....

我现在不清楚的是如何为 EACH 渲染一个播放器(每个播放器都在一张幻灯片中)。如果我保持我的代码不变,我可以看到如图所示的 iframe HTML,但没有播放器。

但是如果我添加 .html_safe....

<div class="video-slide"><%= v.html_safe %></div>

它呈现一个播放器 - 但仅适用于其中一个 iframe。即使在检查代码时,其他的也会完全消失。

我不确定此时该做什么。我怀疑我不应该使用 html_safe 而是使用 iframe api 信息页面(如下)中的信息手动为每个 iframe 创建播放器,但此时我有点不知所措。任何帮助将不胜感激。

https://developers.google.com/youtube/iframe_api_reference#Examples

4

1 回答 1

0

好吧,所以我最终只是删除了这个:

@videos = []
@video_ids.each do |video_id|
  source = HTTParty.get("https://www.googleapis.com/youtube/v3/videos?part=id,snippet,player&id=#{video_id}&key=#{y_key}")
  single_video  = source["items"][0]["player"]["embedHtml"]
  @videos.push(single_video)
end

相反,只是将原始 video_ids 数组返回给 DOM,然后遍历该数组以获取每个视频 ID,然后像这样将 iframe 包裹在它周围......

<% @video_ids.each do |v| %>
<iframe id="player" class="video-slide" type="text/html" width="600" height="375"
src="http://www.youtube.com/embed/<%= v %>?enablejsapi=1&origin=http://localhost:3000.com"
frameborder="0"></iframe>
<% end %>

它有效....或多或少:)

于 2013-10-10T00:23:30.637 回答