LoginSignup
2
2

More than 3 years have passed since last update.

Herokuの定期実行でYouTube APIキーを温存する。

Last updated at Posted at 2019-10-21

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が環境にない場合は同時にインストールすること。

ローカルに開発用のディレクトリを作成

適当な場所に開発用のディレクトリを作成する。

test.cmd
$ mkdir heroku_test
$ cd heroku_test

以下の3つのファイルを先ほど作った開発用のディレクトリに保存する。
runtime.txt    :herokuにpython環境を作らせるために必要。
requirements.txt :依存関係のある外部モジュール(この例ではrequestsのみ)
preserve.py    :apiを叩くためのpythonアプリ

各ファイルの内容(例)は以下の通り。

runtime.txt
python-3.7.4
requirements.txt
requests==2.22.0

実行用のpythonファイル(preserve.py)には、環境変数名を設定しておく。
(下のコードではAPI_KEY1、API_KEY2としている。)
ソースにAPIキーそのものを書くのではない点に注意。

preserve.py
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リポジトリ設定.]
$ git init
$ git add .
$ git commit -m "first commit."

heroku loginでHerokuにログインし、heroku createでアプリを作成する。アプリ名は省略してもよい(自動的に付けられる)

[Herokuにログイン.]
$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の環境変数を設定].
$ 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
を実行する。

test.cmd
$ heroku addons:add scheduler:standard 

ブラウザでhttps://dashboard.heroku.com/apps にアクセス。
作成したアプリ名をクリックしてダッシュボードを開く。
tempsnip0.png

configure Add-onsをクリック
tempsnip2.png

Heroku Schedulerをクリック
tempsnip3.png

Create job をクリック
tempsnip4.png

Scheduleで実行間隔として"Every day at..."を選択し、Run commandに「python (実行ファイル.py)」を指定する。
(間隔の上限は1日であり、1週間単位等は指定できない)

Save Jobで設定完了。
tempsnip5[1].png

参考にした記事

Herokuでお天気Pythonの定期実行
https://qiita.com/seigo-pon/items/ca9951dac0b7fa29cce0

Herokuで定期的にrakeタスクを実行したい場合は、Heroku Schedulerを使おう
https://qiita.com/isotai/items/44735d9e7d9ceaef9c48

2
2
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
2
2