ruby-on-rails - Youtube Data Api:如何为来自 Youtube 趋势的每个视频添加重定向链接
问题描述
我正在开发一个应用程序,通过 YoutubeDataApi 在 YouTube 上显示当前趋势视频(缩略图、视频标题和频道标题)。每当我点击热门视频的缩略图或标题时,我都想访问正确的 URL。这是我在控制器中使用的代码:
# frozen_string_literal: true
class WelcomeController < ApplicationController
def index
youtube_data_api = YoutubeDataApi.new.client
@result, @errors = youtube_data_api.list_videos 'snippet, id', chart: 'mostPopular', region_code: 'FR', max_results: '50'
end
end
这是我在我看来使用的代码:
<div style="margin:0 auto; padding:20px 0;">
<% @result.items.each do |video| %>
<a href="https://www.youtube.com/watch?v=#{video_id}" target="_blank" style="color:black"><img src="<%= video.snippet.thumbnails.default.url %>" height="90" width="120">
<div id="channel_title">
<u><b><%= video.snippet.channel_title %></u></b>
</div>
<div id="video_title" style="margin-bottom: 50px;">
<i><%= video.snippet.title %></i>
</div>
</a>
<% end %>
此应用程序中使用的宝石:gem'google-api-client', '>0.7'
有人可以帮我吗?提前致谢
解决方案
您使用的是哪种宝石,因此我们可以更好地了解您必须使用什么。
只需加一点盐,但您的图像有一个 src "<%= video.snippet.thumbnails.default.url %>"
该网址是否指向视频网址?如果它只是将您的 href 值更改为该 video.snippet.thumbnails.default.url。
目前,使用该 href,您的所有视频都将打开一个新标签页到“ https://www.youtube.com/feed/trending ”
video.snippet (video.snippet.url) 上有网址吗?
哦,你还需要在标题和缩略图周围加上一个,这样当你点击它们时它就会链接。通过您的循环,您可以获得每个视频的数据,因此如果您可以获得正确的网址,您只需在所有内容周围放置链接,您应该会很好。
编辑:
我想我有你的答案。您已经发送将视频的 id 检索到 api,因此您要做的就是获取它们,`video.id v=#{video.id} 而不是 video_id,除非您创建另一个名为该的变量并且将其设置为 video.id。在您的视图循环中:
<div style="margin:0 auto; padding:20px 0;">
<% @result.items.each do |video| %>
<a href="https://www.youtube.com/watch?v=<%= #{video.id} %>" target="_blank" style="color:black"><img src="<%= video.snippet.thumbnails.default.url %>" height="90" width="120">
<div id="channel_title">
<u><b><%= video.snippet.channel_title %></u></b>
</div>
<div id="video_title" style="margin-bottom: 50px;">
<i><%= video.snippet.title %></i>
</div>
</a>
<% end %>
因此,只需简单地将 a href 中注入的变量从 video_id 更改为 video.id。但是,正如您已经注意到的,youtube 给您的只是视频 ID,而不是完整链接。有了轻微的红宝石变量变化,你应该很高兴!:)
哦忘了提到红宝石不会出现,除非你像上面显示的那样添加一个类似 erb 的标签。
做同样事情的一个可能更好的方法是:
<%= link_to "https://www.youtube.com/watch?v=#{video.id}", style="color: black;", target="_blank", style="color: black;" do %>
.... (stuff you are wrapping)
<% end %>
总而言之:
<div style="margin:0 auto; padding:20px 0;">
<% @result.items.each do |video| %>
<%= link_to "https://www.youtube.com/watch?v=#{video_id}", style="color: black;", target="_blank", style="color: black;" do %>
<img src="<%= video.snippet.thumbnails.default.url %>" height="90" width="120">
<div id="channel_title">
<u><b><%= video.snippet.channel_title %></u></b>
</div>
<div id="video_title" style="margin-bottom: 50px;">
<i><%= video.snippet.title %></i>
</div>
<% end %>
<% end %>
https://api.rubyonrails.org/v5.2.1/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
干杯
推荐阅读
- python - 如何使用 matplotlib 从 pandas 数据框列中绘制具有不同标签的子图
- wpf - 使用 XAML 中的转换器创建对 Windows 系统颜色(值类型)的引用
- python - 如何使用 Pandas 数据框的常用键填充多个字典?
- angular - StaticInjectorError(AppModule) Service -> Angular 中的 InjectionToken 错误
- angular - angular build后如何直接引用html文件(Chrome扩展开发)
- android - 用凌空获取数组内的对象
- python - 库 ecCodes 不是由 Python 创建的,但库的自检有效
- hbase - 数据流在设置编码器时使用 HBaseResultCoder
- javascript - 同一页面上有多个反应应用程序(组件)?
- r - If循环有几个条件