YouTube APIでデータ収集してみた

programming

とつぜんですが、日本最大級クラウドサービスのクラウドソーシングにて、

こんな依頼を発見。

依頼内容

Youtubeで公開されている「野良猫」に関する動画をエクセルに下記の内容を入力頂きたいです。

500件をお願いできればと考えております。

1作業は30秒ほどとなります。
・タイトル
・URL
・チャンネル名
・チャンネルURL
・再生時間
・投稿日

納品ファイル形式:Excel

4000円からで見積もりをお願いします。

https://crowdworks.jp

依頼主の方は1つにつき30秒と言われているので500件ノンストップでも4時間以上かかる。

自動化すればいけるんじゃね?

と考えたずるい僕はすぐさまYouTubeData APIを取得しにいきます。

目標

  1. YouTubeDataAPIを使ってクライアントの求めるデータを抽出
  2. 1のデータをExcelファイルで出力

いざ実践

環境はGoogle Colabを使用します

YouTubeDataAPIの取得

こちらの方法についてはすでにたくさんの方が載せられていたので、すんなりとできました。よって割愛…

こちらを参考にしました。

YouTube Data API の概要  |  Google Developers
Youtube Data APIを使ってPythonでYoutubeデータを取得する - Qiita
はじめに 最近、APIを用いて色々なデータを取得できないかを調べています。 Youtube Data APIを使用して動画の再生回数やいいね数などの情報取得する方法を調べて実践したので覚書的に記事にまとました。 参考 Yo...

PythonでAPIから情報を取得するためのライブラリを取得

#Colabのセルの中では!を先頭につける
!pip install google-api-python-client

#エクセルファイルを作成するとき用いるライブラリ
!pip install xlwt
!pip install openpyxl

今回は依頼のデモンストレーションということで「野良猫」についての動画情報を取得する

from apiclient.discovery import build
import pandas as pd

YOUTUBE_API_KEY = 'APIキー'

youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

dic_list = []
search_response = youtube.search().list(part='snippet',q="野良猫",order="viewCount",type='video')
output = youtube.search().list(part='snippet',q="検索ワード",order="viewCount",type='video').execute()

#一度に5件しか取得できないため何度も繰り返して実行
for i in range(20):
  dic_list = dic_list + output['items']
  search_response = youtube.search().list_next(search_response, output)
  output = search_response.execute()
  
df = pd.DataFrame(dic_list)
#各動画毎に一意のvideoIdを取得
df1 = pd.DataFrame(list(df['id']))['videoId']
#各動画毎に一意のvideoIdを取得必要な動画情報だけ取得
df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']]
ddf = pd.concat([df1,df2], axis = 1)

再生回数を取得し上のDataFrameと連結させる

#再生回数やいいね数を取得する関数を作成
def get_statistics(id):
    statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
    return statistics

df_static = pd.DataFrame(list(ddf['videoId'].apply(lambda x : get_statistics(x))))

df_output = pd.concat([ddf,df_static], axis = 1)

df_output['video_url']='https://www.youtube.com/watch?v='+ddf['videoId']
ddf_output['channelTitle_url']='https://www.youtube.com/channel/'+ddf['channelId']
#列名を変える
df_output.rename(columns={'publishedAt':'投稿日','channelTitle':'チャンネル名','title':'タイトル','viewCount':'再生回数','video_url':'URL','channelTitle_url':'チャンネルURL'},inplace=True)
#不要な列名を削除
df_output=df_output.drop(['videoId','channelId','description','likeCount','dislikeCount','favoriteCount','commentCount'],axis='columns')

完成形DataFrameを作ることができました

Excelファイルでローカルにダウンロード

#Excelファイル作成
import openpyxl
ddf.to_excel('ファイル名.xlsx',sheet_name='new_sheet_name')

#ローカル環境に保存
from google.colab import files
files.download('ファイル名.xlsx')

やっとできた。

約20分で完成これで4000円は夢あるんじゃないでしょうか

終わりに


初めて記事を書きました。半分おふざけのようなコードでも記事にして投稿するとなんだかためになった気がします。

この記事が少しでも皆さんの参考になればと思います。


コメント

タイトルとURLをコピーしました