Pythonで色々なサイトの動画情報を取得する

経緯

discordBOTが作れるdiscord.pyでyoutube-dlをプレイヤーとして使うことができるが、動画再生しかできないのでurlからタイトルやサムネを尋ねる方法を調べた。youtube-dlを用いる理由は対応している動画サイトの数が圧倒的に多いから。discordBOTについては今度書きます。チャットBOTについては解説が多いけどボイスチャンネルはあんまりないので。

本題

こんな感じ。

import youtube_dl

def get_info(url):

    params = {
        'simulate':True
        }
        
    ydl = youtube_dl.YoutubeDL(params)

    try:
        info = ydl.extract_info(url,download=False)
    except:
        print("失敗しました")
    else:
        print("「{}」の動画情報を取得しました\n".format(info['title']))
        return info

def main():
    url = "https://www.youtube.com/watch?v=03H1qSot9_s"
    info = get_info(url)
    
    if not info is None:
        print("'title' : "+info['title'])
        print("'webpage_url' : "+info['webpage_url'])
        print("'description' :\n"+info['description'])
        print("'upload_date' : "+info['upload_date'])


if __name__ == '__main__':
    main()

出力

[youtube] 03H1qSot9_s: Downloading video info webpage
[youtube] 03H1qSot9_s: Extracting video information
「10分で分かる月ノ美兎【にじさんじ公式】」の動画情報を取得しました

'title' : 10分で分かる月ノ美兎【にじさんじ公式】
'webpage_url' : https://www.youtube.com/watch?v=03H1qSot9_s
'description' :
にじさんじ公式バーチャルライバーの、月ノ美兎です!
こちらは、今までの生配信のいいところを無理やりギュギュッとまとめた動画になります。

苦渋の決断で削った部分が多々ありますので、興味を持ってくださった方は是非配信アーカイブをご視聴くださいね。
'upload_date' : 20180215

paramを色々変えるとダウンローダーの設定ができます。今回のは動画のダウンロードはしないよってやつ。
paramはここ全部載ってます。
github.com

infoは辞書型で返ってくるので、titleやらwebpage_urlやらで抜き出してあげるといいです。エンコード方法とかも分かるみたい。

youtubeだけじゃなくてniconicoとかtwitch、いかがわしい動画サイトもいけるみたいです。
ただ一部の動画(特に例のアレ動画は多い)は401でアクセスできないみたい、原因は不明。
動画の前に出てくる警告?がある動画はダメなのかなーと予想してます。ちなみに401エラーは、tryをスルーするので、

if info['formats'][0]['format_id']=='normal':
    print("失敗")

で判断するのがよさそう。大体の動画はこれで判別できます。