Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした