LoginSignup
6
3

More than 3 years have passed since last update.

【募集終了案件】YoutubeDataAPIv3を用いてスクレイピング→スプレッドシートに保存

Last updated at Posted at 2020-08-11

pythonに初めて触れてから約1年が経ちましたので
趣味の競馬ばかりに対してばかりでなく
そろそろ本腰いれて案件をとっていけるように簡単な案件から
経験を積んでいこうと画策中。

↓↓↓今回やらせていただく募集終了済みの案件(ランサーズ様より本文抜粋)↓↓↓


youtube上のキーワード検索した状態で、
指定の条件にある動画のURL、再生回数、登録日付、チャンネル登録者数、タイトルなどの情報を抜き出してスプレッドシートに反映させたい

指定の条件は、再生回数/チャンネル登録者数=○%以上 ・・・a%以上
       ○日以内に投稿されたもの ・・・b日以内
       検索キーワード ・・・キーワード'c'
という条件

指摘の検索キーワードで条件に該当する動画をひたすら集めてくる形
キーワードは複数登録可能
キーワードの選定はこちらでやります


環境はanaconda/jupyternotebook/python3でやっていきます。
実際のこちらの作業順序としては

YoutubeAPIv3の使用申請、キーを取得

条件a,b,cを取得

(ここでは再生回数/チャンネル登録者数100%以上、1800日以内
検索キーワード…ものまね とする)
あらかじめgoogleスプレッドシートのセルにリサーチ希望の
条件a,b,cが書かれているとする
test_before.jpg

(test.py実行前)

json形式で動画情報取得、一度pd.Dataframeに格納

import pandas as pd
from googleapiclient.discovery import build

YOUTUBE_API_KEY = 'xxx'

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

part='snippet'
q = import_value_C
order = 'viewCount'
type = 'video'
num = 1 #num*5件を検索

search_response = youtube.search().list(part=part,q=q,order=order,type=type)
output = youtube.search().list(part=part,q=q,order=order,type=type).execute()

dic_list = []
for i in range(num):        
    dic_list = dic_list + output['items']
    search_response = youtube.search().list_next(search_response, output)
    output = search_response.execute()

df = pd.DataFrame(dic_list)

df1 = pd.DataFrame(list(df['id']))['videoId']

df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title']]
df_get = pd.concat([df1,df2], axis = 1)

条件に合わない動画情報をDrop

#指定の条件に絞る
import datetime
#再生回数/チャンネル登録者数=a%以上(サンプルは100%以上/変数viewrate)
drop_list = []
for i in range(0,df_output.shape[0]-1,1):
    videoviewcount = int(df_output.iloc[i,6])
    subscriberCount = int(df_output.iloc[i,-1])
    viewrate = round(videoviewcount/subscriberCount * 100,1)
    if viewrate < import_value_A:
        drop_list.append(i)

df_output_percent = df_output.drop(drop_list)
#b日以内に投稿されたもの以外は削除(サンプルは1800日、約6年)

drop_list = []
for j in range(0,df_output_percent.shape[0]-1,1):
    upload_date = df_output_percent.iloc[j,2].split('T')[0].split('-')

    dt1 = datetime.datetime(year=int(upload_date[0]), month=int(upload_date[1]), day=int(upload_date[2]), hour=0)
    dt_dis = int(str(datetime.datetime.now() - dt1).split(" days, ")[0])
    if dt_dis > import_value_B:
        drop_list.append(j)

df_output_drop = df_output_percent.drop(drop_list)

条件に合う動画情報のみgoogleスプレッドシートに書き込み

test_after.jpg
(test.py実行後)

ここまでやって、test.pyを何かしらの方法でクライアントが使用できる形にして
納品となり案件完了ですかね。

またgoogleスプレッドシートに書き込まれたセルの情報をpythonに反映させるのは
①googleスプレッドシートに対して情報取得(googleAPI,スプレッドシートの秘密鍵,スプレッドシートキー取得必要)
②セルの情報を取得(条件a,b,c取得)
という流れになります。

作成中に参考にしたサイト様

YoutubeAPIv3
https://qiita.com/g-k/items/7c98efe21257afac70e9
googleスプレッドシート読み書き
https://tanuhack.com/operate-spreadsheet/

ご覧いただきありがとうございました。
夏季休暇中にASIN、twitterAPIを使った案件にも触れていきます。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3