Obtenez des informations sur la chaîne Youtube avec l'application Rails (en utilisant Yt gem)

introduction

Je suis un débutant en Rails qui crée des applications Web avec Ruby on Rails. Du coup, je suis désolé de vous le dire personnellement, mais récemment je suis devenu accro à Youtuber, et je passe le plus clair de mon temps à regarder Youtube sauf pour étudier la programmation (rires) Youtube est amusant ... Youtuber est bon ... Comme c'est une vie quotidienne, j'ai pensé que j'aimerais faire une application web qui gère diverses informations sur Youtube comme sortie d'étude, alors j'ai commencé à la faire. Idéal pour étudier et passe-temps! C'est simple

En faisant beaucoup de recherches pour cela, j'ai trouvé que je devais utiliser ** l'API de données Youtube ** pour gérer les informations Youtube.

Cette fois, j'aimerais rédiger un mémorandum sur l'acquisition d'informations Youtube à l'aide de cette API Youtube.

À propos de l'API de données Youtube

Présentation de l'API de données Youtube

Cette API fournit diverses fonctions.

· Type de ressource スクリーンショット 2020-10-04 14.11.15.png

・ Type d'opération スクリーンショット 2020-10-04 14.11.25.png

Cette fois, j'aimerais écrire sur ce que j'ai fait pour obtenir les informations sur la chaîne Youtube. (Type de ressource: canal, opération: liste dans le tableau ci-dessus)

Prémisse de cet article

-Vous devez avoir acquis une clé API qui vous permet d'accéder à l'API Youtube Data en effectuant diverses opérations avec l'API Google. Veuillez vous référer à ce qui suit pour la procédure d'acquisition de la clé API.

Recherchez des vidéos sur Youtube à l'aide du récent client Ruby de l'API Google et téléchargez-les sous forme de fichiers [Ruby on Rails] La façon la plus simple d'utiliser l'API YouTube

Environnement de l'écrivain

Je développe Rails en créant un conteneur avec Docker pour Mac.

ruby 2.4.5
Ruby on rails 5.0.7.2

#Gemme de prémisse
#J'utilise dotenv pour mettre la clé API GOOGLE dans une variable d'environnement
dotenv-rails 2.7.6

Sélection de Gem

Le célèbre joyau pour gérer cette API est le google officiel google-api-ruby-client créé pour frapper diverses API Google avec des rails.

google-api-ruby-client

Puisqu'il y a des informations en japonais et que c'est officiel, j'envisageais ce bijou au début, mais cette fois je prévois d'utiliser uniquement l'API Youtube, et j'ai pensé que je pourrais le faire avec quelque chose d'un peu plus simple.

C'est pourquoi j'ai trouvé «yt».

Yt - a Ruby client for the YouTube API

Un bijou spécialisé pour l'API Youtube. J'étais inquiet car il n'y avait pas beaucoup d'informations et il n'y avait pas beaucoup d'étoiles, mais j'étais personnellement une fourmi parce que je pouvais l'implémenter avec une description simple! Après cela, j'écrirai sur l'obtention d'informations Youtube avec Yt.

Paramètres Yt

Tout d'abord, téléchargez la gemme. Décrivez-le dans le Gemfile comme indiqué dans le github de yt.

Gemfile


gem 'yt', '~> 0.32.0'

Effectuez ensuite une installation groupée.

terminal


bundle install

gemlife.lock


yt (0.32.6)

Après avoir téléchargé yt, écrivez une configuration qui définit la CLE API GOOGLE sur yt. Lors de l'appel de diverses informations, seule cette clé API est OK car elle ne lit que le serveur.

Si vous souhaitez exploiter un client Web tel que le téléchargement de vidéos sur Youtube, Vous aurez besoin de client_id et client_secret séparément de la clé API. Référence) Module: Yt :: Config

videos_controller.rb


class VideosController < ApplicationController
 GOOGLE_API_KEY = ENV['GOOGLE_API_KEY'] #.Comment écrire lorsque la clé API est déjà définie dans env
:
 def set_yt
   Yt.configure do |config|
     config.api_key = GOOGLE_API_KEY #Définir l'API Google dans Config
   end
 end
:
end
```

 Maintenant, si vous appelez `set_yt` à l'avance avant diverses opérations, la CLE API sera définie et vous pourrez effectuer diverses opérations avec yt.


# Obtenez des informations Youtube avec yt

 Ceci termine les préparatifs. Faisons immédiatement diverses opérations.

 Cette fois, je vais examiner deux opérations que je voulais faire avec mon application web.
 ** Partie 1) Obtenez le nombre spécifié d'abonnés Youtube **
 ** Partie 2) Obtenez la vidéo de la chaîne Youtube spécifiée et enregistrez-la dans la base de données **

 Jetons un coup d'œil à chacun!


## Partie 1) Obtenez le nombre spécifié d'abonnés Youtube
 Tout d'abord, apportez l'identifiant de la chaîne Youtube à partir de l'URL de la chaîne Youtube.

 ![スクリーンショット 2020-10-04 15.03.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176783/8be443f0-f917-8840-14e1-db7518f0b29b.png)


 Accédez à la page de la chaîne que vous souhaitez enregistrer (écran comme l'image ci-dessus), et la partie après ** chaîne / ** de l'URL sera l'ID de la chaîne. Dans ce cas, c'est la partie de ʻUCQ_MqAw18jFTlBB-f8BP7dw`.
 Nous définirons ces informations comme identifiant du canal.

 Ensuite, les informations de canal sont acquises sur la base de cet ID. Très facile.


#### **`videos_controller.rb`**
```ruby

class VideosController < ApplicationController
:

 def index #Voici la méthode appropriée
  set_yt #Chargez la configuration que vous avez définie précédemment
  channel = Yt::Channel.new id: 'UCQ_MqAw18jFTlBB-f8BP7dw' #Obtenir des informations sur la chaîne
  @subscriber_count = channel.subscriber_count #Obtenez le nombre d'inscrits
 end

:
end
```

 Vous pouvez maintenant obtenir le nombre d'abonnés en appelant `abonné_compte`.


#### **`ruby:index.html.erb`**
```

:
<%= @subscriber_count %>
:
```


 Cela ressemble à ceci (je traite ce à quoi il ressemble avec jquery)
 ![スクリーンショット 2020-10-04 16.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176783/968d2803-9157-be99-6f39-f1815b6d53b4.png)



## 2) Obtenez la vidéo de la chaîne Youtube spécifiée et enregistrez-la dans la base de données
 L'obtention de l'ID de canal est la même que dans la partie 1.

 Dans la partie 2,
 ① Obtenez des informations sur la chaîne
 ② Obtenez la vidéo associée à cette chaîne
 ③ Enregistrez les informations dans le DB
 Il y a trois étapes principales.
 La table de destination d'enregistrement utilisée cette fois est une table vidéo contenant le nom de la vidéo, l'URL et la date de publication.

 Si vous obtenez toutes les données en même temps, vous risquez d'être pris dans les restrictions du côté de l'API Google, donc j'écrirai pour obtenir environ 30 des dernières vidéos une fois.
 * Voir ci-dessous pour savoir comment écrire où
 (référence)
 [J'ai essayé d'utiliser l'API youtube avec Rails](https://qiita.com/sakakinn/items/46c0d4945e4646f346f6)
 [J'ai enfin découvert comment rechercher des vidéos et obtenir plusieurs informations avec gem yt! !! ](Https://yatta47.hateblo.jp/entry/2016/10/31/100755)


#### **`videos_controller.rb`**
```ruby

:
 #Appeler l'acquisition vidéo YouTube
 def create_videodata
   create_videodata_from_youtube
   redirect_to videos_path, notice: { "L'acquisition vidéo est terminée" }
 end

:
 def create_videodata_from_youtube
  set_yt
  channel = Yt::channel.new id: 'UCQ_MqAw18jFTlBB-f8BP7dw' #Obtenir des informations sur la chaîne
  #Obtenez environ 30 vidéos publiées au cours des 2 derniers mois.
  channel.videos.where(publisher_afer: 2.months.ago.iso8601).first(30).each do |video|
   #S'il ne s'agit pas de données vidéo enregistrées, ajoutez-les sous forme de tableau
    unless Video.find_by(name: video.title)
      Video.create!(
        name: video.title,
        url: "https://www.youtube.com/watch?v=" + video.id,
        uploaded_at: video.published_at
      )
     end
   end
 end
:
```

 Vous pouvez maintenant obtenir la vidéo youtube en appelant la méthode ci-dessus lorsque vous en avez besoin.
 Dans l'application Web que j'ai créée, j'ai installé un bouton "Obtenir la vidéo" et j'ai appelé create_videodata lorsque j'ai appuyé dessus pour obtenir des informations sur Youtube.

 Vous avez maintenant implémenté la fonctionnalité que vous vouliez implémenter. Grâce à Yt, la description est assez simple!

# Dépannage (quotaExceeded)
 Au début, je savais comment l'écrire, mais pour une raison quelconque, cela n'a pas fonctionné ... Quand je l'ai regardé, c'était "quota dépassé".
 En d'autres termes, j'obtenais une erreur disant que j'utilisais trop et que l'allocation quotidienne était perdue et que l'API Google était restreinte.
 À ce moment-là, je n'avais jamais réussi, alors j'ai changé de jour en pensant: "Je ne peux pas manquer de quotas ...".

 J'ai changé mon compte et l'ai recréé, en me référant à ce qui suit, et cela a fonctionné!
https://teratail.com/questions/270779

 Je ne comprends pas pourquoi même si je le cherche ... Si vous obtenez la même erreur, veuillez créer un compte Google et recréer la clé API avec un autre compte.


# À la fin
 Nous avons vu comment obtenir des informations Youtube à l'aide de l'API Youtube.
 Avec Yt, c'est assez simple à écrire, il est donc facile d'implémenter ce que vous voulez faire.
 Il y a beaucoup d'autres informations que je voudrais apporter, je voudrais donc étudier et utiliser d'autres fonctions également.
 Enfin, merci à tous les auteurs des articles et blogs auxquels j'ai fait référence!



Recommended Posts

Obtenez des informations sur la chaîne Youtube avec l'application Rails (en utilisant Yt gem)
Obtenez des informations vidéo YouTube avec Retrofit et conservez-les dans l'application Android.
Japaneseize en utilisant i18n avec Rails
Obtenez PV (vues) en utilisant impressionniste ~ Rails
[Ethereum] Obtenir des informations de bloc à l'aide de web3j
Suivre les erreurs de l'application Rails avec Sentry
[Rails] Comment obtenir les informations sur l'utilisateur actuellement connecté avec devise
[Rails] Gérez plusieurs modèles à l'aide de la gemme de devise
[Rails6] Créer une nouvelle application avec Rails [Débutant]
Remarques sur l'utilisation de FCM avec Ruby on Rails
[Rails] Gérons les constantes avec config gem
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
[AWS] Publier l'application Rails avec nginx + puma