自己紹介
agent bank開発チームのhironekoです。 個人ブログは、こちらです。
腹筋ローラーを初めて以降、筋肉痛なのか、姿勢の悪さからのコリなのかわからない苦しみが起きています。
あとウォーキングデットやゴールデンカムイを見ていついかなる状況になっても生存しなくてはいけないと感じてキャンプに興味を持ちました。
さて今回の目的
GitHub ActionsのCronで何すっかって話なのですが
最近に限ったことではなくて、僕は、数字の4桁以上を覚えるのがなかなか苦手なレベルの脳内メモリ所有者なのですが
来期のアニメの見なくてはいけないタイトルが10タイトルくらいあり、放送日時を把握し切れる訳がないじゃないか!って危機的状況に陥っている訳です。
仮にリアタイで見れなくてもアマプラさんで解決する部分もあったり絶命するわけではないのですが、個人的にHPが2割以下くらいになって日々のモチベーションがダダ下がりするのだろうと想定されるのです。
なのでよしGitHub Actionsの学習がてら毎朝か業後くらいの時間に通知行くようにしようぜ!
なんならPythonでやってみようぜ!
って昨日の夜中に思い立ったのでやってみたいとおもいます。
補足
我が家は、録画機能を有した何かしらの文明機器を持ち合わせていません。
前提
ゴール
最終的に以下のようにslackへ放送日に通知が行くようにします。
実装:Python
コードを先に晒します。
import json import slackweb from os import getenv import datetime as dt import calendar today = dt.date.today() dayName = calendar.day_name[today.weekday()] if today.month < 10: month = f'0{today.month}' else: month = today.month data = json.load(open(f'./data/anime/{today.year}{month}.json', 'r')) slack = slackweb.Slack(url=getenv('SLACK_WEBHOOK_URL')) for v in data: if v['day_of_week'] == dayName: attachments = [ { "fallback": 'アニメの放送時間のご案内', "pretext": '本日放送のアニメ', "fields": [ { "title": 'タイトル', "value": v['title'], }, { "title": '放送時間', "value": v['publish_at'], "short": "true" }, { "title": 'チャンネル', "value": v['channel'], "short": "true" } ] } ] slack.notify(attachments=attachments)
解説
特別語ることは少ないです。
slackweb
こちらのライブラリが一番手っ取り早く簡単そうだったので使いました。
所感としては、ほんと単純なコードで通知することが可能なので誰でも迷わず実装が行えると思います。
- getenv
getenvを使用して環境変数を取得してslackのweb hook urlをコードにハードコードしないようにします。
- 全体
読めばわかるとは思うのですが、予めJSONのfileにデータを入れておきそのデータを元に今日放送をするアニメかどうかを判定して通知を行っています。
- ディレクトリ構造は、以下のようにしてます
. ├── attachments.json ├── data │ └── anime │ ├── 202001.json │ └── 202012.json ├── read.py └── requirements.txt
file名は、必ずyyyymm.json
とします。
[ { "title": "転生したらスライムだった件", "publish_at": "23:00", "channel": "TOKYO MX", "day_of_week": "Tuesday" }, .... ]
実装:GitHub Actions
- こちらも先にコードを晒します。
on: schedule: - cron: '55 0 * * *' jobs: slack: name: Run slack runs-on: ubuntu-latest env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} steps: - name: Checkout uses: actions/checkout@v2 - name: Set up Python 3.8 uses: actions/setup-python@v1 with: python-version: 3.8 - name: pip install run: pip install -r requirements.txt - name: post run: python read.py
- cron
注意点として5分以下は動かないっぽいのとdefault branch以外は、cronの対象にならないとのこと
またこのcronが結構いい加減なので5分くらいのズレは、デフォです。
なので今回実行時間を10時に実行されるといいなーって気持ちでUTC 00:55 = 日本時刻 09:55 に設定しました。
GitHub Actionsよろしく!
- secrets
今回slackのweb hook urlを使いますのでコードにハードコードしたくなく、外に晒すのもなーっていう気持ちなのでGitHubの機能を使用しました
Settings > Secrets
で設定ページへ遷移します。New repository secret
ボタンを押下し追加します。
使い方は${{ secrets.KEY_NAME }}
となります。
今後
漫画やアニメが好きなんですが既存の世に出ているサービスでは、僕のやってほしいことを満たすサービスが1mmもないのでこれを気に作ってやるんだから!って気持ちがふつふつと湧いてきました。
年末年始、時間があるようでないようなものですが積読している書籍読みつつ、開発していきたいなって気持ちです。
最後に独り言
グーカレでよくね?という意見は、受け付けますん。すみませんブログネタ考えたあとに振り返ったらグーカレの定期でよくねって考えに至りました。