Holen Sie sich Youtube-Kanalinformationen mit der Rails-App (mit Yt gem)

Einführung

Ich bin ein Rails-Anfänger, der mit Ruby on Rails Web-Apps erstellt. Plötzlich tut es mir leid, es Ihnen persönlich zu sagen, aber vor kurzem war ich süchtig nach Youtuber und verbringe die meiste Zeit damit, Youtube zu schauen, außer das Programmieren zu studieren (lacht). Youtube macht Spaß ... Youtuber ist gut ... Da es so ein tägliches Leben ist, dachte ich, dass ich eine Webanwendung erstellen möchte, die verschiedene Informationen auf Youtube als Ergebnis einer Studie verarbeitet, und begann damit. Ideal zum Lernen und für Hobbys! Es ist einfach

Während ich viel recherchierte, stellte ich fest, dass ich die ** Youtube Data API ** verwenden musste, um mit Youtube-Informationen umzugehen.

Dieses Mal möchte ich ein Memorandum über den Erwerb von Youtube-Informationen mit dieser Youtube-API schreiben.

Informationen zur Youtube Data API

Übersicht über die Youtube-Daten-API

Diese API bietet verschiedene Funktionen.

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

・ Art der Operation スクリーンショット 2020-10-04 14.11.25.png

Dieses Mal möchte ich darüber schreiben, was ich getan habe, um Informationen über den Youtube-Kanal zu erhalten. (Ressourcentyp: Kanal, Operation: Liste in der obigen Tabelle)

Prämisse dieses Artikels

-Sie müssen einen API-SCHLÜSSEL erworben haben, mit dem Sie auf die Youtube-Daten-API zugreifen können, indem Sie verschiedene Vorgänge mit der Google-API ausführen. Informationen zum Erwerb des API-Schlüssels finden Sie im Folgenden.

Suchen Sie mit dem aktuellen Google API Ruby Client nach Videos auf Youtube und laden Sie sie als Dateien herunter [Ruby on Rails] Der einfachste Weg, die YouTube-API zu verwenden

Autorenumgebung

ruby 2.4.5
Ruby on rails 5.0.7.2

#Prämisse Juwel
#Ich verwende dotenv, um den GOOGLE API KEY in eine Umgebungsvariable einzufügen
dotenv-rails 2.7.6

Auswahl des Edelsteins

Das berühmte Juwel für die Handhabung dieser API ist der offizielle Google "Google-API-Ruby-Client", der erstellt wurde, um verschiedene Google-APIs mit Schienen zu treffen.

google-api-ruby-client

Da es einige Informationen auf Japanisch gibt und diese offiziell sind, habe ich zuerst über dieses Juwel nachgedacht, aber dieses Mal habe ich vor, nur die Youtube-API zu verwenden, und ich dachte, ich könnte es mit etwas Einfacherem machen.

Deshalb habe ich "yt" gefunden.

Yt - a Ruby client for the YouTube API

Ein Juwel, das sich auf die Youtube-API spezialisiert hat. Ich war besorgt, weil es nicht viele Informationen und wenige Sterne gab, aber ich persönlich war eine Ameise, weil sie mit einer einfachen Beschreibung implementiert werden kann! Danach werde ich darüber schreiben, wie man mit Yt Youtube-Informationen erhält.

Yt Einstellungen

Laden Sie zuerst das Juwel herunter. Beschreibe es in der Gemfile, wie in yts Github gezeigt.

Gemfile


gem 'yt', '~> 0.32.0'

Führen Sie dann eine Bundle-Installation durch.

terminal


bundle install

gemlife.lock


yt (0.32.6)

Schreiben Sie nach dem Herunterladen von yt eine Konfiguration, die den GOOGLE API KEY auf yt setzt. Beim Aufrufen verschiedener Informationen ist nur dieser API-SCHLÜSSEL in Ordnung, da nur der Server gelesen wird.

Wenn Sie einen Webclient wie den Video-Upload auf Youtube betreiben möchten, Sie benötigen "client_id" und "client_secret" getrennt vom API-Schlüssel. Referenz) Modul: Yt :: Config

videos_controller.rb


class VideosController < ApplicationController
 GOOGLE_API_KEY = ENV['GOOGLE_API_KEY'] #.So schreiben Sie, wenn API KEY bereits in env festgelegt ist
:
 def set_yt
   Yt.configure do |config|
     config.api_key = GOOGLE_API_KEY #Stellen Sie die Google API in Config ein
   end
 end
:
end
```

 Wenn Sie nun vor verschiedenen Operationen `set_yt` im Voraus aufrufen, wird der API-SCHLÜSSEL gesetzt und Sie können verschiedene Operationen mit yt ausführen.


# Holen Sie sich Youtube-Informationen mit yt

 Damit sind die Vorbereitungen abgeschlossen. Lassen Sie uns sofort verschiedene Operationen ausführen.

 Dieses Mal werde ich mir zwei Vorgänge ansehen, die ich mit meiner Webanwendung ausführen wollte.
 ** Teil 1) Erhalte die angegebene Anzahl von Youtube-Abonnenten **
 ** Teil 2) Holen Sie sich das Video des angegebenen Youtube-Kanals und speichern Sie es in der Datenbank **

 Werfen wir einen Blick auf jeden!


## Teil 1) Holen Sie sich die angegebene Anzahl von Youtube-Abonnenten
 Bringen Sie zuerst die Youtube-Kanal-ID von der Youtube-Kanal-URL.

 ![スクリーンショット 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)


 Gehen Sie zur Seite des Kanals, den Sie registrieren möchten (Bildschirm wie im Bild oben), und der Teil nach ** Kanal / ** der URL ist die Kanal-ID. In diesem Fall ist es der Teil von `UCQ_MqAw18jFTlBB-f8BP7dw`.
 Wir werden diese Informationen als Kanal-ID festlegen.

 Dann werden die Kanalinformationen basierend auf dieser ID erfasst. Sehr leicht.


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

class VideosController < ApplicationController
:

 def index #Hier ist die geeignete Methode
  set_yt #Laden Sie die zuvor festgelegte Konfiguration
  channel = Yt::Channel.new id: 'UCQ_MqAw18jFTlBB-f8BP7dw' #Kanalinformationen abrufen
  @subscriber_count = channel.subscriber_count #Holen Sie sich die Anzahl der Registranten
 end

:
end
```

 Jetzt können Sie die Anzahl der Abonnenten ermitteln, indem Sie "subscriber_count" aufrufen.


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

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


 Es sieht so aus (ich verarbeite, wie es mit jquery aussieht)
 ![スクリーンショット 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) Holen Sie sich das Video des angegebenen Youtube-Kanals und speichern Sie es in der Datenbank
 Das Abrufen der Kanal-ID ist dieselbe wie in Teil 1.

 In Teil 2,
 ① Kanalinformationen abrufen
 ② Holen Sie sich das diesem Kanal zugeordnete Video
 ③ Speichern Sie die Informationen in der DB
 Es gibt drei Hauptschritte.
 Die diesmal verwendete Zieltabelle zum Speichern ist eine Videotabelle, die den Videonamen, die URL und das Veröffentlichungsdatum enthält.

 Wenn Sie alle Daten auf einmal erhalten, sind Sie möglicherweise in die Einschränkungen auf der Google API-Seite verwickelt. Ich werde daher schreiben, um etwa 30 der neuesten Videos einmal zu erhalten.
 * Siehe unten, wie man wo schreibt
 (Referenz)
 [Ich habe versucht, die YouTube-API mit Rails zu verwenden](https://qiita.com/sakakinn/items/46c0d4945e4646f346f6)
 [Ich habe endlich herausgefunden, wie man mit gem yt Videos sucht und mehrere Informationen erhält! !! ](Https://yatta47.hateblo.jp/entry/2016/10/31/100755)


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

:
 #Rufen Sie die YouTube-Videoaufnahme an
 def create_videodata
   create_videodata_from_youtube
   redirect_to videos_path, notice: { "Die Videoaufnahme ist abgeschlossen" }
 end

:
 def create_videodata_from_youtube
  set_yt
  channel = Yt::channel.new id: 'UCQ_MqAw18jFTlBB-f8BP7dw' #Kanalinformationen abrufen
  #Erhalten Sie ungefähr 30 Videos, die in den letzten 2 Monaten gepostet wurden.
  channel.videos.where(publisher_afer: 2.months.ago.iso8601).first(30).each do |video|
   #Wenn keine Videodaten gespeichert sind, fügen Sie diese als Tabelle hinzu
    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
:
```

 Jetzt können Sie das YouTube-Video abrufen, indem Sie bei Bedarf die oben beschriebene Methode aufrufen.
 In der von mir erstellten Web-App habe ich eine Schaltfläche "Video abrufen" installiert und create_videodata aufgerufen, als ich darauf gedrückt habe, um Youtube-Informationen abzurufen.

 Sie haben jetzt die Funktionalität implementiert, die Sie implementieren möchten. Dank Yt ist die Beschreibung ziemlich einfach!

# Fehlerbehebung (quotaExceeded)
 Zuerst wusste ich, wie man es schreibt, aber aus irgendeinem Grund funktionierte es nicht ... Als ich es mir ansah, war es "Quota Exceeded".
 Mit anderen Worten, ich habe die Fehlermeldung erhalten, dass ich zu viel verwendet und die tägliche Zuordnung verloren habe, und die Google-API wurde eingeschränkt.
 Zu dieser Zeit war es mir nie gelungen, also änderte ich den Tag und dachte: "Mir können nicht die Quoten ausgehen ...".

 Ich habe mein Konto geändert und es unter Bezugnahme auf Folgendes neu erstellt, und es hat funktioniert!
https://teratail.com/questions/270779

 Ich verstehe nicht warum, auch wenn ich es nachschlage ... Wenn Sie den gleichen Fehler erhalten, erstellen Sie bitte ein Google-Konto und erstellen Sie den API-Schlüssel mit einem anderen Konto neu.


# Am Ende
 Wir haben gesehen, wie Sie Youtube-Informationen mithilfe der Youtube-API erhalten.
 Mit Yt ist es ziemlich einfach zu schreiben, so dass es einfach zu implementieren ist, was Sie tun möchten.
 Es gibt viele andere Informationen, die ich mitbringen möchte, daher möchte ich auch andere Funktionen untersuchen und nutzen.
 Zum Schluss vielen Dank an alle Autoren der Artikel und Blogs, auf die ich verwiesen habe!



Recommended Posts

Holen Sie sich Youtube-Kanalinformationen mit der Rails-App (mit Yt gem)
Holen Sie sich Youtube-Videoinformationen mit Retrofit und behalten Sie sie in der Android-App.
Japanisieren Sie mit i18n mit Rails
Holen Sie sich PV (Ansichten) mit Impressionist ~ Rails
[Ethereum] Blockinformationen mit web3j abrufen
Strg-Z funktioniert, es gibt also eine Möglichkeit zu unterbrechen und zu töten: Dies ist mühsam und kann den falschen töten. Sie können dies in ein Python-Skript schreiben. Verfolgen Sie Rails-App-Fehler mit Python, C-Erweiterung Sentry
[Rails] So erhalten Sie die aktuell mit devise angemeldeten Benutzerinformationen
[Schienen] Verwalten Sie mehrere Modelle mit einem Edelstein
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Hinweise zur Verwendung von FCM mit Ruby on Rails
[Rails] Verwalten wir Konstanten mit config gem
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
[AWS] Veröffentlichen Sie die Rails-App mit Nginx + Puma