これは GMOペパボディレクター Advent Calendar 2023 15日の記事です。
HNK 番組表API を利用して、登録したキーワードに合致する番組をチェックし、Slackに通知する仕組みを作ってみた。

この記事では 1. 作成物の概要 と 2. 今回ChatGPTの力を借りて作成を行ったのでその感想 を記載する。
作成のきっかけ
普段、テレビは録画しておいた番組をみる機会が多く、週に1回程度番組表をざっと眺めて録画の予約をしている。この方法だと、関心のある番組なのに録り忘れることがしばしばあった(特に数ヶ月に1回など不定期放送の番組は見逃しがちだった)。
条件に合致する番組があったら通知してくれるアプリとかありそうだな、と思って探したが、放送直前の通知が多く、数日手前の段階での通知機能を持つアプリは見つけることができなかった。
この調査の中で、HNK 番組表API の存在を知り、今回の作成を行った。※1
仕組みの概要
- HNK 番組表API を通じて1週間分の番組情報を取得する
- あらかじめ設定しておいた番組名かキーワードに合致する番組をピックアップする
- ピックアップした番組の情報をSlackに通知する
コードはこちら:https://github.com/yrarchi/nhk_programs_checker
ChatGPTとの共同作業
今回の作成はChatGPTに助けてもらいながら行ってみた。条件を与えて最初のベースになるコードを書いてもらい、条件を付加してコードを修正してもらってみたり、リファクタリングをしてもらってみたりした。
意図通り示してもらえる部分も、意図を汲んでもらえない場合もあったが、自分で一から作るのに比べ3分の1程度の時間で完成したように思う。
以下に質問の具体例をいくつか示す。
- 最初のベースになるコードを書いてもらう
(前略 意図した仕組みと作り方を伝え、懸念点等を聞いていた) NHK APIキーの取得はできたので、大きく以下のブロックに分けて進めたいと考えています。 1. NHK APIキーをたたいて、番組名一覧を取得し、登録した番組名と一致する番組名があるかをチェックするPythonスクリプトを作成する 2. Slackに通知する仕組みを追加する まずは1.について、コードを示してください。なお、1つのスクリプトにまとめてしまわず複数のファイルに適切に分割してくださるとありがたいです。
→ requestsライブラリを使用してHTTPリクエストを送信し、返された番組情報を処理する20行程度のコードを書いてくれた。それを修正していけば良いので、動き出しのはずみになった
- 条件を付加してコードを修正してもらう
現在のコードは以下です。 このコードだと、同じ番組が再放送等で複数存在する場合に、それぞれtitleやcontentを出力してしまいます。 同じ番組の場合はそれらの出力は1回になるよう、コードを修正してください。
→ 意図を汲んでコードを修正してくれたものの、意図通りには処理されないものになっていなかったため、その要因と思われる点を伝え、再修正してもらった
以下のような、Pythonの辞書があります。 dict = { 'title_a': {'subtitle': 'subtitle', 'content': 'content', 'start_time': '2023-11-28T04:10:00+09:00'}, 'title_b': {'subtitle': 'subtitle', 'content': 'content', 'start_time': '2023-11-29T04:10:00+09:00'} } これを以下のjsonに当てはめて、dictの長さ分だけ生成するコードを書いてください。 なお、jsonは外部ファイルから読み込み、また当てはめた結果をjsonとして出力するようなコードとしてください。
→ これはおそらくこちらの伝え方がうまくなく、一応コードを生成してくれたものの再度
示していただいたコードはjinja templateを使ったら簡潔に書けるのではないでしょうか
と方法をこちらから指定して再度書き直してもらった
- リファクタリングをしてもらう
以下のコードについて、可読性を上げられることはないか・変数名としてより適切なものはあるか・セキュリティの観点から修正すべき点がないか指摘してください。
→具体的なコードの箇所を示しての指示を期待したが、一般的な注意点の提示だった
今後の発展
以下のような改善を今後してみたい。
- 今回はコードの自動実行の設定までいかなかったので、週に1回定期実行されるようにしたい
- 今回は指定したキーワードに合致した番組を通知する形だが、「この番組に興味を持つならこれも好きかも」と推薦を行えるようにしてみたい
※1 今回のAPIはNHKの番組のみが対象だが、不定期放送で見逃しがちな番組の多くがNHKだったため、用途上大きな問題がなかった