自動でVtuberの配信予定を更新するカレンダーを作ってみた (Google Calendar編)

(この記事はQiitaに投稿した記事と同一の記事になります。)

はじめに

この記事は、下記記事の続きになります。

自動でVtuberの配信予定を更新するカレンダーを作ってみた

前回はYouTubeから動画情報を取得したので、今回は取得した動画情報を元に、Googleカレンダーに予定を登録していきます。

環境

  • Azure VM (Windows Server 2016)
  • Python 3.7

用意するデータ

  • YouTube 動画情報
  • Google カレンダー カレンダーID

方法

今回はGoogleカレンダーに予定を登録していくので、当然登録先のカレンダーが必要になります。
なので、カレンダーの設定からカレンダーIDを予め確認しておきます。

あとは公式のサンプルに従って進めていくだけで簡単にカレンダーへの登録ができました。

1. Google カレンダーAPIの有効化

サンプルページにあるボタンを押すだけです。
合わせて、credentials.jsonを作業中のディレクトリに保存しておきます。

2. 必要なライブラリのインストール

書いてある通りにコマンドを実行します。

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

3. カレンダーへ予定を登録

サンプルコードを元にカレンダーへ予定を登録します。

from __future__ import print_function
import pickle 
import os.path 
from googleapiclient.discovery import build 
from google_auth_oauthlib.flow import InstalledAppFlow 
from google.auth.transport.requests import Request 

SCOPES = ['https://www.googleapis.com/auth/calendar'] 

def insert_event(event, calendar_id): 
    creds = None 
    if os.path.exists('token.pickle'): 
        with open('token.pickle', 'rb') as token: 
            creds = pickle.load(token) 
    if not creds or not creds.valid: 
        if creds and creds.expired and creds.refresh_token: 
            creds.refresh(Request()) 
        else: 
            flow = InstalledAppFlow.from_client_secrets_file( 
                'credentials.json', SCOPES) 
            creds = flow.run_local_server(port=0) 
        with open('token.pickle', 'wb') as token: 
            pickle.dump(creds, token) 

    service = build('calendar', 'v3', credentials=creds) 
    
    event = { 
        'summary': event.summary, 
        'description': event.description, 
        'start': { 
            'dateTime': event.start_datetime, 
            'timeZone': 'Japan', 
        }, 
        'end': { 
            'dateTime': event.end_datetime, 
            'timeZone': 'Japan', 
        } 
    } 
    event = service.events().insert(calendarId=calendar_id, body=event).execute() 
    return event['id']

あとはこの関数に前回取得した動画情報からカレンダーへ登録する情報と、最初に確認したカレンダーIDを渡してあげれば完了です。
カレンダーに登録する情報はeventとして最低限のものだけを渡すことにしました。

  • summary: 動画タイトル
  • description: 動画URL
  • start_datetime: 配信開始時間
    • 基本はactualStartTimeを利用。配信開始前の動画はscheduledStartTimeで代替。
  • end_datetime: 配信終了時間
    • 基本はactualEndTimeを利用。配信開始前や配信中の場合はscheduledStartTimeの1時間後に設定。

戻り値のIDを控えておけば登録した予定の編集が可能なので、配信時間や動画タイトルの変更にも対応できます。