首页 > 解决方案 > 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'

有人可以帮我吗?提前致谢

标签: ruby-on-railsyoutube-data-api

解决方案


您使用的是哪种宝石,因此我们可以更好地了解您必须使用什么。

只需加一点盐,但您的图像有一个 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

干杯


推荐阅读