Python+APIでYouTube動画を自動検索。ダウンロードも? [コピペサンプルコード付き]

PythonとGoogle APIを使ってYouTube動画のキーワード検索を自動化。設定方法&サンプルコード付きで解説します

YouTubeはもはや皆が視聴する動画サイトとなりました。ポピュラーなサービスとなったからこそ、PythonやJSからプログラムで制御したいという需要も増えていると思います。

実はYouTubeを含めGoogleの各種サービス・プラットフォームは、「Google APIs(Google APIs Discovery Service)」のAPIを使うことで、各種サービスのリソースにプログラムからアクセスすることができるのです。

本記事では、人気のプログラム言語「Python」で実際にYouTubeのAPIを操作してみました。Google APIsの利用方法、および、自動検索のサンプルコードを公開しています。

 

なお、以下の方法にてYouTube動画の自動検索や自動ダウンロードを試みているが、トラブルで上手く動かずに困っている方もいるかと思います。本記事の内容はYouTube動画をプログラムで操作する代替手段として参考になるかと思います。

ライブラリ「gdata」「pytube」を使ってYouTube動画の自動検索+ダウンロードをしようとしたが以下のようなエラーが出る場合。

optional_warn_function.func_name = f.func_name

AttributeError: 'function’ object has no attribute 'func_name’

⇒詳細は不明ですが、おそらくライブラリ「gdata」はpython3.x系統では動かないのだと思います(python2.x時代のライブラリと思われる)。

gdata-python3」というpython3.x系統に対応したライブラリがあるので、こちらを使えば改善する可能性はあります(pip installできますが、私はこのライブラリは使っていませんので動く確証はありません)。

pythonのライブラリでアクセスした際に以下のようなエラーが出る場合。

xxxx.service.RequestError: {'status’: 404, 'body’: ' ~

⇒Googleのリソースにアクセスするタイプのライブラリの多くはOAuth2.0認証をする必要があります。credentialsを取得して認証をしていないと404エラーが返ってきてしまいます。

こちらのライブラリのサンプルコードなどが参考になるでしょう。本記事ではGoogle APIのOAuth2.0認証には触れませんが、後日別途記事に書くかもしれません。

 

なお、実行環境はローカルPCのWindows環境で実行しています(Pythonなどインストール済)。

環境

  • Windows 10 Pro
  • Python 3.6.4

 

Python+Google APIを使用して、指定のキーワードでYouTube動画を検索するソースコードの全容。

まず最初にソースコード全体を記載します。詳細な解説は後述します。

さらに、プログラムを動作させるためにはAPIキーを取得して「api_key」の部分に指定する必要があります。APIキーの取得方法も後述します。

Pythonソースコード ※ダブルクリックでコピペできます

実行結果

 

プログラムとしては非常にシンプルです。

 

Google APIキーの取得方法まとめ。「YouTube Data API v3」を有効化し認証情報を取得する

Google APIsにアクセスし、Google Cloud Platformの規約同意

まずはGoogle APIsにアクセスします(Googleのアカウントがまだ無い方は作成しておいてください)。

初めてアクセスすると以下のように、規約同意のメッセージが表示されますので、内容を読んでチェックを付けて「同意して続行」をクリックします。

引用元:Google APIs https://console.developers.google.com/

 

プロジェクトを作成する

ダッシュボード画面に遷移します。最初にプロジェクトを作成します。

引用元:Google APIs https://console.developers.google.com/

プロジェクト名は何でもOKですので、解りやすい名前を付けます。今回は説明用に「youtube test」と名前を付けました。

引用元:Google APIs https://console.developers.google.com/

 

必要なAPIを有効化する。今回は「YouTube Data API v3」を使用

最初の状態では何もできません。APIは有効化したものだけが使えるようになるという仕様になっています。「APIとサービスを有効化」をクリックします。

引用元:Google APIs https://console.developers.google.com/

「APIライブラリにようこそ」というページが表示されます。

Googleは非常にたくさんのサービスがあり膨大なAPIが用意されています。検索して探す必要があります。今回は「YouTube Data API v3」を使用します。


引用元:Google APIs https://console.developers.google.com/

目当てのAPIが見つかったら「有効にする」をクリックします。

引用元:Google APIs https://console.developers.google.com/

 

APIキー(認証情報)を取得する

引き続きAPIキーを取得します。プロジェクトに認証情報を追加する画面が表示されますので、「YouTube Data API v3」を選択します。今回アクセスするのは公開されている情報になりますので、アクセスするデータの種類は「一般公開データ」でOKです。

引用元:Google APIs https://console.developers.google.com/

これでAPIキーが発行されますので、コピペしておきましょう。必要に応じてAPIキーに制限を設定しておくこともできます。

引用元:Google APIs https://console.developers.google.com/

なお、APIキーの制限の設定方法、および、OAuth2.0認証の設定方法については本記事では省きます。

 

YouTube動画を検索するソースコードの解説詳細。

APIキーの設定
api_key = 'XXXXXXXXXXXXXXXXX’

前項で取得したAPIキーをXXXXXXXXXXXXXXXXXの部分に書き込みます。キー情報やcredentialsは外だしのファイルで管理した方が良いですが、今回はサンプルコードですのでそのまま書き込みます。

 

検索処理本体
def get_videos_search(keyword):
youtube = build('youtube’, 'v3′, developerKey=api_key)
youtube_query = youtube.search().list(q=keyword, part=’id,snippet’, maxResults=5)
youtube_res = youtube_query.execute()
return youtube_res.get('items’, [])

検索用の処理をdefで記述しています。検索したいキーワードを引数に指定して呼び出す形になります。

「maxResults=5」の部分は検索で取得する動画の件数になります。必要に応じて数を増やしてください。最大50件まで上げることが可能です。

 

検索実行
result = get_videos_search('可愛い 猫’)
for item in result:
if item['id’]['kind’] == 'youtube#video’:
print(item['snippet’]['title’])
print('https://www.youtube.com/watch?v=’ + item['id’]['videoId’])

今回は「可愛い 猫」のキーワードで検索をしてみました。

動画のタイトルとURLをprintで出力しています。videoIdは動画毎に振られているIDでURLのvパラメータ部分となります。

詳細なAPIレスポンスの形式については公式サイトを確認ください。

YouTube Data APIではクォータの使用量で利用が制限されることがあります。クォータを超過してしまうと、以下エラーが表示されAPIが利用できなくなります。この場合は1日待てば、また使えるようになるはずです。

“code": 403,

“message": “The request cannot be completed because you have exceeded your

 

YouTube動画の自動ダウンロードは?pytubeなどのライブラリを使えば可能だが違法の可能性もある

上述したとおりに動画URLを取得した後、pytubeなどのライブラリを使えば動画をダウンロードすることも技術的には可能です。

pytube
from pytube import YouTube
YouTube('http://youtube.com/watch?v=XXXXXXXXXX’).streams[0].download()

 

ただし、YouTube動画のダウンロードは規約違反であり、最悪違法となる場合もあり大変危険です(そのため、本記事のサンプルコードではダウンロードする処理は記述していません)。

基本的にダウンロードが許可されている一部の動画以外は、YouTubeの利用規約にてダウンロードが禁止されています。許可されていない動画のダウンロードは規約違反となってしまいます。

さらに著作権法違反の違法アップロード動画については、ダウンロード自体が違法です(2年以下の懲役若しくは200万円以下の罰金)。

 

もし動画をダウンロードする場合は、ダウンロード可とされている動画を公式アカウントから取得するようにしましょう。

 

2020年3月22日PythonGoogle API,Python TIPS,Python3

Posted by KodoCode