目的
タイトルそのまま、PythonでYoutubeの情報を色々取得したかった。
事前準備
API KEYの取得
Youtube APIを使うにはAPI KEYというものが必要。
手順は以下を参照。
【Google APIs】Youtube API Key を取得する方法
みんな大好きYoutubeそれを色々こねくり回したいなーと思い、APIのお勉強を使用かと思いましたが、YoutubeのAPIを使用するにはAPI KEYというものが必要とのこと。どうやら無料で作成できるようなので、手順をまとめてみました。令
モジュールのインストール
# pip install --upgrade google-api-python-client
python3 で利用する場合はpip3で。
ソースコード
# coding:utf-8
#==========================
# インポートモジュール
#==========================
from apiclient.discovery import build
from apiclient.errors import HttpError
import sys
#==========================
# グローバル変数
#==========================
args = sys.argv # CLI引数格納
API_KEY = '************************************'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=API_KEY
)
#==========================
# 関数
#==========================
## 検索結果の詳細を配列にして全て返却する(主にデバッグとかに使用する)
def searchDetails(_keyword, max=25):
search_response = youtube.search().list(q=_keyword, part='id,snippet', maxResults=max).execute()
details = []
for search_result in search_response.get("items", []):
details.append(search_result)
return details
## チャンネル名を検索してチャンネル名とチャンネルIDを配列で返却する
def searchChannels(_keyword, max=25):
search_response = youtube.search().list(q=_keyword, part='id,snippet', maxResults=max).execute()
channels = []
for search_result in search_response.get("items", []):
if search_result["id"]["kind"] == "youtube#channel":
channels.append([search_result["snippet"]["title"],search_result["id"]["channelId"]])
return channels
## チャンネルIDから紐づくビデオIDを取得する(detail=TrueならIDだけでなくすべての情報を返す)
def getVideoInfo(_channelid, max=50, detail=False):
searches = []
nextPagetoken = None
nextpagetoken = None
while True:
if nextPagetoken != None:
nextpagetoken = nextPagetoken
search_response = youtube.search().list(
part = "snippet",
channelId = _channelid,
maxResults = max,
order = "date", #日付順にソート
pageToken = nextpagetoken #再帰的に指定
).execute()
for search_result in search_response.get("items", []):
if search_result["id"]["kind"] == "youtube#video":
if detail:
searches.append(search_result)
else:
searches.append(search_result["id"]["videoId"])
try:
nextPagetoken = search_response["nextPageToken"]
print('[INFO] NextPageToken is ' + nextPagetoken)
except Exception as e:
print('[INFO] NextPageToken is Null. Stop get video detail.')
break
return searches
ちょっと躓いた点だけ補足。
API_KEY = '************************************'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=API_KEY
)
これはおまじないみたいなもの。インスタンス化する。
API_KEYは事前準備で取得したAPI_KEYを入力する。
search_response = youtube.search().list(q=_keyword, part='id,snippet', maxResults=max).execute()
search APIを叩くところ。
partはidとsnippetどちらかを指定できる。
基本的には両方入れておくのが良い。(帰ってくるものがidとsnippet両方になるだけなので)
少しでも処理データ量を削減したいのであればどちらかだけにする。
search_response = youtube.search().list(
part = "snippet",
channelId = _channelid,
maxResults = max,
order = "date", #日付順にソート
pageToken = nextpagetoken #再帰的に指定
).execute()
特にnextpagetokenあたりは全然理解できなかったが、
YoutubeAPIは一気にmax50件しか取得できないので、50以上の動画を投稿しているチャンネルは全てを取得できない。
が、pageTokenというステータスにToken(文字列)を渡してあげることで、その続きを取得できるようになるらしい・・・。
ちなみにpageTokenは戻ってくる情報に挿入されているらしい。
参考
【Python】YouTube Data API v3を利用した特定チャンネルの動画情報取得 | Analytics Board | python特化のプログラミングサイト
実は需要の高いプログラミングスキルの中に、外部機能を利用するための仕組みとしてAPI技術が存在します。本記事では、様々なAPIの中でも人気が高まってきているYouTube Data API v3を利用していきたいと思います。また、クラウドソーシングサービスであるクラウドワークスやランサーズの案件も確認しながら、取り進め...
コメント