ずっと放置して別のものを作っていた時に不意に検索に引っかかって解決した。
みなさんは覚えているだろうか。過去にYoutubeの検索をするときにytというgemを利用した記事を書いたことを・・・・
そう。この記事です。こんなことを書いていました。
お手軽に取れるというのはいいのですが、複数動画の情報を取る場合どうすればいいのか?などがよくわかっていません。ひょっとしたら出来ないのかも?そうなったらgoogle-api-clientを使って書くしかないですかね。
そう。数か月前はytを使っての複数動画の情報取得がわからなかった。
( ・`д・´) < これが解決したぞー!!
ってことでやり方を覚えておく。
複数ビデオの情報を取る場合
YoutubeのVideoIDを指定してあげてYt::Collections::Videosを使います。
実際のソースコード。VideoIDとして「xSsUl7i0sis,Cb2_iJkE01g」を指定しています。
require 'yt' module Api class Youtube API_KEY = 'KEYを入れてね。' def initialize Yt.configure do |config| config.api_key = API_KEY end end def main multi_video() end def info_video() video = Yt::Video.new id: 'xSsUl7i0sis' p video.title p video.thumbnail_url p video.tags p video.description p video.view_count p video.like_count p video.dislike_count p video.favorite_count p video.comment_count end def multi_video() ids = "xSsUl7i0sis,Cb2_iJkE01g" videos = Yt::Collections::Videos.new videos.where(id: ids).each do |video| p video.title p video.thumbnail_url p video.tags p video.view_count p video.like_count p video.dislike_count end end end end aaa = Api::Youtube.new aaa.main
実行結果はこうなります。
$ rails runner lib/batch/youtube.rb "Aqours ラブライブ!サンシャイン!! 第11話挿入歌「想いよひとつになれ」CM (60秒ver.)" "https://i.ytimg.com/vi/xSsUl7i0sis/default.jpg" [] 278608 2765 40 "THE IDOLM@STER M@STERS OF IDOLWORLD!!2015 Live Blu-ray 【第一弾】" "https://i.ytimg.com/vi/Cb2_iJkE01g/default.jpg" ["バンダイナムコエンターテインメント", "アイマス", "アイドルマスター", "765プロ", "プロデュース", "アイマス ライブ", "idolmaster", "シンデレラガールズ", "ミリオンライブ!", "アイドル", "imas", "im@s", "10th", "アイマス総合ライブ", "アイマス10th"] 220008 nil nil
うむ。想いよひとつになれ、めっちゃいい曲。あのピアノの音が素晴らしい。Starの演出、最高だよ。
・・・・・・・・失礼(;´・ω・)。
解説を。
multi_video()
っていうところが本題です。idsってのがYoutubeの動画IDをカンマ区切りで記載したものでYt::Collections::Videos.new
をして、whereで検索している感じですね。これで同時に動画情報が取得できます。
ちなみに、info_video()で使っているYt::Video.new
を使って単独動画情報を取得することができます。
ついでに分かった動画の検索方法
検索も同時に理解しました。
コード的にはこちら。
require 'yt' module Api class Youtube API_KEY = 'Keyを書いてね' def initialize Yt.configure do |config| config.api_key = API_KEY end end def main search_video() end def search_video() key_word = "佐倉綾音" videos = Yt::Collections::Videos.new videos.where(q: key_word).first(500).each do |item| if (item.view_count > 100 ) puts "*" * 20 puts "https://www.youtube.com/watch?v=" + item.id puts item.id puts item.title puts item.description puts item.published_at puts item.thumbnail_url puts item.channel_id puts item.channel_title puts item.view_count end end end end end aaa = Api::Youtube.new aaa.main
うむ。あやねるかわいいよ。あやねる。
・・・・・失礼。(;´・ω・)。
使うのは先ほどと同様Yt::Collections::Videos
。whereでのパラメータがid
ではなくq:
で検索する感じです。ちょっと細工していて、100以上のViewがあったもののみを表示するようにしています。その辺のコードがいらなければ削除してください。
まとめ
検索をしたい場合も複数動画情報を取得する場合もYt::Collections::Videos.new
を使って、検索の場合は「where(q: [キーワード情報])」、複数動画情報を取得したい場合は「where(id: [ID情報])」でYoutubeAPIが使えることがわかりました。
今回理解した情報は非常に有益な情報でした。
これを使っていろいろと試したいことが一気に進む気がするぞー。
参考にしたサイト
ありがとうございました!
Class: Yt::Collections::Videos — Documentation for yt (0.33.4)