# Attention! Before running this code, install an API-library as bellow
# pip install google-api-python-client
# YoutubeのAPIを使って、Youtube内の特定の動画の情報を取得
# ●毎日定時、所定時刻までくりかえし実行
from apiclient.discovery import build #GoogleAnalyticsAPI
import json
import time
import csv
import schedule
from time import sleep
from datetime import datetime,date
#自分のAPI KEY
YOUTUBE_API_KEY = "取得したキーをここへ入れる!"
# YoutubeAPIを使うための準備
API_SERVICE_NAME = "youtube"
API_VERSION = "v3"
youtube = build(API_SERVICE_NAME, API_VERSION, developerKey=YOUTUBE_API_KEY)
# 情報取得したい動画のID
YOUTUBE_MOVIE_IDs = []
YOUTUBE_MOVIE_IDs = ['Dokn5iGzjwU','1n83PbBLjls','HjEFHk_6nWA','0KfVYm2Rpxs','fGCmRBn6-7o','T5kZFuSTbMY']
# CSVファイルから情報取得したい動画のIDを読込み
# csvfile = "./YOUTUBE_MOVIE_IDs.csv"
# with open(csvfile, 'r') as csv_readfile:
# YOUTUBE_MOVIE_IDs = csv.reader(csv_readfile)
#01 定期実行する関数を準備
def task():
for YOUTUBE_MOVIE_ID in YOUTUBE_MOVIE_IDs:
import datetime
# mv基本情報の取得
part_get_snippet = 'snippet'
part_get_statistics = 'statistics'
part_get = part_get_snippet+","+part_get_statistics
youtube_query = youtube.videos().list(part = part_get,id = YOUTUBE_MOVIE_ID)
youtube_responce = youtube_query.execute()
info_mv = youtube_responce['items'][0][part_get_snippet]
# 取得したmv基本情報の抽出
# PageInfoにある情報
# "totalResults" ●検索などの結果の件数
# itemsにある情報
# "id" ●動画ID
# snippetにある情報
# "channelid" ●チャンネルID
# "publishedAt" ●動画公開日
# "title" ●動画タイトル
# "description" ●動画説明
# "duration" ●再生時間
title_mv = info_mv['title']
publishedAt_mv = info_mv['publishedAt']
# mv再生統計の取得
# part_get = 'statistics'
# youtube_query = youtube.videos().list(part = part_get,id = YOUTUBE_MOVIE_ID)
# youtube_responce = youtube_query.execute()
mv_info = youtube_responce['items'][0][part_get_statistics]
# 取得したmv再生統計の抽出(ここでは再生数のみ)
# statisticsにある情報
# "viewCount" ●再生数
# "likeCount" ●高評価数
# "dislikeCount" ●低評価数
# "favoriteCount" ●お気に入り数
# "commentCount" ●コメント数
viewCount_mv = mv_info['viewCount']
likeCount_mv = mv_info['likeCount']
commentCount_mv = mv_info['commentCount']
datetime_now = datetime.datetime.now()
# 取得情報のCSV追記、画面表示
name_csvrec = "YTMVinfo_tubakiNEWSingle.csv"
row_output =[[title_mv,viewCount_mv,likeCount_mv,commentCount_mv,datetime_now,publishedAt_mv]]
outf = open(name_csvrec, 'a', newline='')
writer = csv.writer(outf)
writer.writerows(row_output)
outf.close()
print(title_mv,",",viewCount_mv,",",likeCount_mv,",",commentCount_mv,",",datetime_now,publishedAt_mv)
#02 スケジュール登録
# 設定例
# schedule.every(2).seconds.do(task) ●2秒毎
# schedule.every().hour.at(“:35”).do(task) ●毎時35分
# schedule.every().monday.at(“15:40”).do(task) ●毎月曜日15時40分
# schedule.every().day.at(“12:20”).do(task) ●毎日12時20分
# schedule.every().day.at(“12:20”).do(task).tag("daytime") ●毎日12時20分、タグ付き
# schedule.every().day.at(“23:20”).do(task).tag("nighttime") ●毎日23時20分、タグ付き
# schedule.clear() ●全スケジュール一斉キャンセル
# schedule.clear("nighttime") ●タグ付きスケジュールキャンセル
# 全スケジュールクリア
schedule.clear()
# 15秒ごと情報取得・記録
schedule.every().day.at("00:00").do(task)
# 毎日23時59分に情報取得・記録
# schedule.every().day.at(“23:59”).do(task)
#02 何時まで実行するか定義
year = 2022
month = 7
day = 1
hour = 0
minute = 2
second = 0
set_until_time = datetime(year,month,day,hour,minute,second)
print(" process start : ",datetime.now())
print(" running until : ",set_until_time)
#03-0 単純無限ループ
# while True:
# schedule.run_pending()
# sleep(1)
#03-1 イベント実行 (特定の時間が来るまで定期実行)
while datetime.now() < set_until_time:
schedule.run_pending()
sleep(1)
print("process end by time")