#introduction
YouTubeのAPIキーは、90日間利用していないと失効し、再利用するには申請(英語)が必要となります。
申請すれば復活するとしても、申請の手間や申請が通るまでのリードタイムを考慮すると、失効させないに越したことはありません。
そこで、Herokuの無料サーバーを使って毎日最低1回定期的にYoutube Data APIにアクセスすることで、APIキーの失効を防ぐ手順を書いてみました。
※この記事を書くにあたっては、Windows10にインストールしたheloku-cli及びpyhton 3.7.4を使っています。
※後述のHeroku Scheduleアドオンのインストールにはクレジットカードの登録が必要です。
#heroku-cliのインストール
下記にてインストーラをダウンロードし、heroku-cliをインストールする。
https://devcenter.heroku.com/articles/heroku-cli#download-and-install
Herokuのデプロイにgitを利用するため、gitが環境にない場合は同時にインストールすること。
#ローカルに開発用のディレクトリを作成
適当な場所に開発用のディレクトリを作成する。
$ mkdir heroku_test
$ cd heroku_test
以下の3つのファイルを先ほど作った開発用のディレクトリに保存する。
runtime.txt
:herokuにpython環境を作らせるために必要。
requirements.txt
:依存関係のある外部モジュール(この例ではrequestsのみ)
preserve.py
:apiを叩くためのpythonアプリ
各ファイルの内容(例)は以下の通り。
python-3.7.4
requests==2.22.0
実行用のpythonファイル(preserve.py)には、環境変数名を設定しておく。
(下のコードではAPI_KEY1、API_KEY2としている。)
ソースにAPIキーそのものを書くのではない点に注意。
import os
import requests
'''任意のyoutube動画IDを指定。
存在しないidを指定してapiを叩くとエラーjsonが返ってくるが、
apiの実行自体は有効なのでapiキー温存目的としては問題ない。'''
video_id="video_id"
keys = [
"""!!注意!!
下記の「API_KEY1」の部分は環境変数名を記入する。
api_keyそのものではない。
"""
os.environ['API_KEY1'],
os.environ['API_KEY2']
]
for key in keys:
#part=playerが一番quotaの消費が少ない(1.6667)
url = f"https://www.googleapis.com/youtube/v3/videos?part=player&id={video_id}&key={key}"
resp = requests.get(url)
print(resp.text)
#gitリポジトリ設定・デプロイ
上の3つのファイルを保存した開発用ディレクトリに入り、下記の3つのgitコマンドを入力する。
$ git init
$ git add .
$ git commit -m "first commit."
heroku loginでHerokuにログインし、heroku createでアプリを作成する。アプリ名は省略してもよい(自動的に付けられる)
$heroku login
user:
pass:
$ heroku create myAppName
作成したアプリをHerokuにデプロイする。
git push heroku master
$ git push heroku master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
...
..
.
To https://git.heroku.com/myAppName
* [new branch] master -> master
##環境変数の設定
Herokuの環境変数にAPIキーを保存する。
heroku config:set (環境変数名)="youtube apiキー" --app "Herokuアプリ名"
$ heroku config:set API_KEY1="Alzos_......" --app "myAppName"
なお、一度設定した環境変数を削除するには
heroku config:unset (環境変数名)
とする。
環境設定が完了したら、一度テスト実行してみましょう。
プログラムが間違っておらず環境変数がきちんと設定されていれば、youtubeから返ってきたjsonが表示されるはずです。
heroku run python (本体アプリ名.py)
$ heroku run python preserve.py
Running python preserve.py on ⬢ myAppName, run.1002 (Free)
{
"items": [
{
"id": "video_id",
"player": {
"embedHtml": "<iframe width=\"480\" height=\"270\" src=\"//www.youtube.com/embed/video_id\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"
}
}
]
}
#Heroku Schedulerを設定し定期的に実行させる。
Heroku Schedulerアドオンを設定してpreserve.pyを定期的に実行させる。
(Heroku Schedulerの利用にはクレジットカードの登録が必要)
heroku addons:add scheduler:standard
を実行する。
$ heroku addons:add scheduler:standard
ブラウザでhttps://dashboard.heroku.com/apps にアクセス。
作成したアプリ名をクリックしてダッシュボードを開く。
Scheduleで実行間隔として"Every day at..."を選択し、Run commandに「python (実行ファイル.py)」を指定する。
(間隔の上限は1日であり、1週間単位等は指定できない)
##参考にした記事
Herokuでお天気Pythonの定期実行
https://qiita.com/seigo-pon/items/ca9951dac0b7fa29cce0
Herokuで定期的にrakeタスクを実行したい場合は、Heroku Schedulerを使おう
https://qiita.com/isotai/items/44735d9e7d9ceaef9c48