/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

gemのytで動画の検索方法や複数情報取得がようやくわかった!!

ずっと放置して別のものを作っていた時に不意に検索に引っかかって解決した。

みなさんは覚えているだろうか。過去にYoutubeの検索をするときにytというgemを利用した記事を書いたことを・・・・

yatta47.hateblo.jp

そう。この記事です。こんなことを書いていました。

お手軽に取れるというのはいいのですが、複数動画の情報を取る場合どうすればいいのか?などがよくわかっていません。ひょっとしたら出来ないのかも?そうなったら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)

Yt · The reliable YouTube API Ruby client · Yt::Video

WebサービスをRailsで1週間程度で作ってみた:技術編1 - khondalitのブログ

Youtube API

Youtube API

  • Betascript Publishing
Amazon