YouTube Data APIを導入してみるという記事を公開しましたが、YouTube Data APIのAPIキーを取得しましたので、PythonでYouTubeのデータを取得してみます。(Windows10)
参考:https://developers.google.com/youtube/v3/code_samples/python?hl=ja
■Python
今回のPythonのバージョンは、「3.8.2」を使用しています。
Google API Clientをインストールする
PythonでYoutueのデータを取得する前に、PythonにGoogle API Clientをインストールします。
pip install google-api-python-client
コマンドプロンプトから上記のコードを記述し、ENTERキーを押します。
ENTERキーを押すと、パッケージが確認され、インストールが開始されます。
Successfully installed google-api-core-1.20.0 google-api-python-client-1.9.2 google-auth-1.16.1 google-auth-httplib2-0.0.3 httplib2-0.18.1 uritemplate-3.0.1
Successfully installed(正常にインストールされました)と表示されればインストールは完了となります。
oauth2clientもインストールする
pip install oauth2client
コマンドプロンプトから上記のコードを記述し、ENTERキーを押します。
Successfully installed oauth2client-4.1.3
Successfully installed(正常にインストールされました)と表示されればインストールは完了となります。
■指定したキーワードでYouTubeの検索結果の情報を取得してみる
指定したキーワードでYouTubeの検索結果の情報を取得してみます。コードサンプルはこちらのものを使います。
■コード
#!/usr/bin/python from apiclient.discovery import build from apiclient.errors import HttpError from oauth2client.tools import argparser # Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps # tab of # https://cloud.google.com/console # Please ensure that you have enabled the YouTube Data API for your project. DEVELOPER_KEY = "REPLACE_ME" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" def youtube_search(options): youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) # Call the search.list method to retrieve results matching the specified # query term. search_response = youtube.search().list( q=options.q, part="id,snippet", maxResults=options.max_results ).execute() videos = [] channels = [] playlists = [] # Add each result to the appropriate list, and then display the lists of # matching videos, channels, and playlists. for search_result in search_response.get("items", []): if search_result["id"]["kind"] == "youtube#video": videos.append("%s (%s)" % (search_result["snippet"]["title"], search_result["id"]["videoId"])) elif search_result["id"]["kind"] == "youtube#channel": channels.append("%s (%s)" % (search_result["snippet"]["title"], search_result["id"]["channelId"])) elif search_result["id"]["kind"] == "youtube#playlist": playlists.append("%s (%s)" % (search_result["snippet"]["title"], search_result["id"]["playlistId"])) print "Videos:\n", "\n".join(videos), "\n" print "Channels:\n", "\n".join(channels), "\n" print "Playlists:\n", "\n".join(playlists), "\n" if __name__ == "__main__": argparser.add_argument("--q", help="Search term", default="Google") argparser.add_argument("--max-results", help="Max results", default=25) args = argparser.parse_args() try: youtube_search(args) except HttpError, e: print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)
このままVisual Studio Codeなどで新規ファイルを作成して貼り付けても実行できません。
print “Channels:\n”, “\n”.join(channels), “\n”
print “An HTTP error %d occurred:\n%s” % (e.resp.status, e.content)
上記のコードには、print関数で出力する際の「()」がなく、「invalid syntax (<unknown>, line 45)」のエラーが発生し、プログラムが実行されないので、修正しなければいけません。
また、
DEVELOPER_KEY = “REPLACE_ME”
上記のDEVELOPER_KEYでは、”REPLACE_ME”のところに、「YouTube Data API v3」に登録した際に発行されたAPIキーを記述します。
修正後のコード
from apiclient.discovery import build from apiclient.errors import HttpError from oauth2client.tools import argparser # Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps # tab of # https://cloud.google.com/console # Please ensure that you have enabled the YouTube Data API for your project. DEVELOPER_KEY = "自分のAPIキー" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" def youtube_search(options): youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) # Call the search.list method to retrieve results matching the specified # query term. search_response = youtube.search().list( q=options.q, part="id,snippet", maxResults=options.max_results ).execute() videos = [] channels = [] playlists = [] # Add each result to the appropriate list, and then display the lists of # matching videos, channels, and playlists. for search_result in search_response.get("items", []): if search_result["id"]["kind"] == "youtube#video": videos.append("%s (%s)" % (search_result["snippet"]["title"], search_result["id"]["videoId"])) elif search_result["id"]["kind"] == "youtube#channel": channels.append("%s (%s)" % (search_result["snippet"]["title"], search_result["id"]["channelId"])) elif search_result["id"]["kind"] == "youtube#playlist": playlists.append("%s (%s)" % (search_result["snippet"]["title"], search_result["id"]["playlistId"])) print("Videos:\n", "\n".join(videos), "\n") print("Channels:\n", "\n".join(channels), "\n") print("Playlists:\n", "\n".join(playlists), "\n") if __name__ == "__main__": argparser.add_argument("--q", help="Search term", default="検索したいキーワード") argparser.add_argument("--max-results", help="Max results", default=25) args = argparser.parse_args() try: youtube_search(args) except HttpError as e: print("An HTTP error %d occurred:\n%s" % (e.resp.status, e.content))
若干の修正したものが上記のコードです。「argparser.add_argument(“–q”, help=”Search term”, default=”検索したいキーワード”)」の部分には検索したいキーワードを記述します。今回は「遊戯王」とテストで記述してみます。
■実行
修正したコードを「googleapiclient-test.py」というファイル名で保存し、コマンドプロンプトから実行してみます。
Videos: 【遊戯王】初期の最強デッキ【エクゾディア】を解説! (LLq6TwzYzaQ) 【遊戯王】20,000円絶版くじ「青眼伝説」リベンジで11万円分大勝負!!!!!! (g0KuqHPpiw0) 【遊戯王ADS】コイントスで超バーン!時の魔導師【ゆっくり実況】 (dyfkLT4VrtY) 【#遊戯王】ストラク新規で安定性アップ!!『ザンギュラのスーパーウリアッ上~2020』紹介対戦 (7Iv2N1_dluA) 【遊戯王】過激すぎて修正!?その結果、謎なことになってる闇のプレイヤーキラー戦【雑談】 (DPclpDkIYao) 【遊戯王】 まだいける…? 2020年7月改訂予想 【ゆっくり解説】 (yq2P0X2Zp6E) 【遊戯王ADS】アーク・リベリオン・エクシーズ・ドラゴン搭載型幻影騎士団【ゆっくり解説】 (op-9MvhkBs4) 【KC1st突破!!】天才ギミック搭載の岩石デッキ強すぎワロタ【遊戯王デュエルリンクス 実況No.955.5】【Yu-Gi-Oh! Duel Links】 (7RqeovmGVOM) 【#遊戯王】三体融合決戦!殲滅のサイバーエンド vs 撃滅のブルーアイズ【#博多どんよく】#64 (zGHKSFazc-Q) 【ゆっくり解説】普通の人なら一生行かない魔境。カードショップの実態について【遊戯王】 (eHgurcM175Y) 【#遊戯王】岩石リバース vs 令和ゴッドファイブ【城下町デュエル】 (9M0o2idemKQ) 【遊戯王】RRファン必見!新規の来たRRはどんな動きになるのか!?レイド・ラプターズ新展開・盤面紹介!! (fnNTHKxPVFk) 【遊戯王】瞬殺完売!!今、話題の「謎の箱」買ってみた!!!!! (rU1YQq-MuIU) 【遊戯王】見つけたら絶対買うべきBOX。 (MjT0mPrE07w) 【遊戯王】RR(レイド・ラプターズ)と幻影騎士団(ファントム・ナイツ)の強化カードが強くて月光新規でもあった~PHANTOM RAGE(フ ァントム・レイジ)収録新規カードの効果解説~ (4sHgsPWrv8A) 遊戯王#24 || 伝説のブラックパラディン! 憎しみに火をつけろ!Legendary Black Paladin! Set hatred on fire! ! Yugioh 2020 (k7G6WARkIjw) 【遊戯王】新弾「冥闇の決闘者」大量購入でラーの翼神竜ホロ狙ってみた!!!!! (ZiPhWHvHcG0) 遊戯王!次元のダークサイド|武藤優希vs海馬瀬戸 (Tqt0_dNIOv0) 【遊戯王タッグフォース6】猿でも分かる簡単害悪デッキの回し方【ましろ/にじさんじ】 (9oo3iasaKYI) 【#遊戯王】大人気テーマ「閃刀姫」のストーリーを紹介! (AmxwJC1PqCw) [遊戯王] ODINの開封動画 その619 ~アジア版 混沌の三幻魔開封~ (CC6imMpXKSk) 【#遊戯王】倒せるかッ!神をッ!!新規カードで最高神覚醒!!ブラックマジシャン vs ラーの翼神竜【#博多どんよく】#63 (dxLE3dsH6HI) 【遊戯王】カードショップの在庫パックを開封していく!③ Yugioh Booster pack opening Extravaganza!! 2020 #3 (F_0IMo1_tPo) 【遊戯王】超強化『機皇』VS『レッド・デーモン』次のターンなんてないんですよ...【対戦動画】/ #カードラボ サテライトショップチャンネル (zsyK-8w2Bms) 【#遊戯王】この世でポータン使ってるの俺だけ説【垂流しフリー対戦】【#ミソのデュエルのミソ】 (BNvIF87UFDU) Channels: Playlists:
実行してみると、「遊戯王」という指定したキーワードでYouTubeの検索結果の情報を取得することができました。
コメント