はじめに
LINEのMessaging APIを使ってポモドーロ・テクニック タイマーbotを作ったときに Uptime Robot API が便利だったので備忘録も兼ねて書いていきたいと思います。
使ったもの
- ・Python
- ・Flask
- フレームワークはFlaskを使用しました。
- ・Render.com
- Render.comにデプロイしました。
- ・Messaging API
- 今回はpushメッセージと応答メッセージを使用しています。
- ・Uptime Robot API
- 今回最も役に立ったAPIです。render.comでは15分間リクエストがないとスリープしてしまうことへの対策として使用しました。
botのイメージ
Uptime Robot API
コード
import requests
class uptime_robot_monitor():
### 初期化 ###
def __init__(self, key):
self.url = "https://api.uptimerobot.com/v2/newMonitor"
self.key = key
self.payload = "api_key=" + self.key + "&format=json&type=1&url='''URL'''&friendly_name=My%20Monitor&interval=300&timeout=10"
self.headers = {
'cache-control': "no-cache",
'content-type': "application/x-www-form-urlencoded"
}
def new_monitor(self):
response = requests.request("POST", self.url, data = self.payload, headers = self.headers)
print(response.text)
self.monitor_id = response.json()["monitor"]["id"]
def delete_monitor(self):
self.delete_url = "https://api.uptimerobot.com/v2/deleteMonitor"
self.delete_payload = "api_key=" + self.key + "&format=json&id="+str(self.monitor_id)
self.delete_headers = {
'cache-control': "no-cache",
'content-type': "application/x-www-form-urlencoded"
}
delete_response = requests.request("POST", self.delete_url, data = self.delete_payload, headers = self.delete_headers)
print(delete_response.text)
self.keyはアカウント作成後に発行できるAPIキーを入れます。
self.payloadについては以下の表のようになります。
パラメータ | 補足 |
---|---|
type | 1:HTTP(S) |
friendly_name | モニター名 |
interval | 監視間隔(秒) |
timeout | 監視時間(秒) |
self.monitor_idはモニターのIDで削除する際に必要になります。
Uptime Robot APIの利用に至った経緯
" ポモドーロテクニック "では一般的に25分タスクをこなし3~5分の休憩をはさみ再び25分タスクをこなす……ということを反復するようです。今回のケースではユーザーからの "start" メッセージ以降webhookへのリクエストが無い状態が続くのですが、これが少々厄介な点で、render.com の freeプランでは15分間リクエスト無しでスリープ状態になってしまうため、そのままでは15分後に停止してしまいます。
タイマースタート後も何かしらのリクエストを送り続けられれば…という中で調べていると Uptime Robotというのを知りました。これを使えば定期的(5分おきなど)にデプロイ先のwebhookURLに対してモニターを立て監視し続けることができる=リクエストを送り続けられる点が良いなと感じました。ところが、アカ作成後にモニターを立てると監視は連続して行われるようで、これがまたちょっとした懸念点でした。というのも、render.com の freeプランでは任意の1つのアカウントで運用している全てのwebサービスで月750時間までという制限があります。一月あたり31日として24時間なので24×31=744になるため、残り6時間となります。他のwebサービスをそこまで運用しているわけではないので、モニターを連続して立てておいても良いのですが、なんとなくタイマーを使わない時間がもったいない気がして、タイマーをスタートした段階でモニターを立て、タイマーが終了した段階でモニターを削除する ことで時間の面は改善できるかと思いAPIを利用することにしました。というのが今回の経緯です笑
おわりに
今回は Uptime Robot APIについて備忘録を兼ねて書いてきました。
参考