4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINEのMessaging APIを使ってニュース・お天気Botを作ってみた(The Daily Informant)

Posted at

開発の経緯

以前から挑戦しようと思っていたのですが、公式のドキュメンテーションが初学者である自分にとってすこし理解しづらく、なかなかやる気になれませんでした。しかしちょっとしたインターンの課題で簡単なLINE Botを作ったのをきっかけにやる気が再燃し、前にDiscordのHack Week向けに作ったBotをLINEでも作ることにしました。

環境

  • Python 3.7.4
  • Flask 1.1.1
  • line-bot-sdk-python 1.14.0
  • requests 2.22.0
  • 最終的に外部でホストできるようにHeroku
  • ローカルでBotのテストができるようにngrok

その他必要なもの

  • ローカルでBotのテストができるようにngrok
  • LINE Developers Consoleで取得できる個別のトークンとシークレットコード。
  • NewsAPIを使用しているため、NewsAPIのAPIキー
  • OpenWeatherMapのAPIキー

構造

  • main.py:入力内容に反応し、メッセージを返信する。
  • newsFetcher.py:NewsAPIからヘッドラインのJSONを取得し、LINEのカルーセルに表示できるようヘッドラインの個数を10個までに減らす。
  • weatherFetcher.py:OpenWeatherMapから3時間ごとの天気をJSONで取得し、LINEのカルーセルに表示できるよう天気情報を10個に絞る。

コード

GitHubに載せてあるのでご自由にどうぞ。(ほとんど英語表記になっています、ご了承ください)

引っかかった点など

  • カルーセルの個数・文字数制限:LINEのカルーセルはボックスを最大で10個までしか表示することができません。その上、各ボックスに含まれるタイトルや説明欄の文字数が今回の記載予定の内容にとっては厳しく、表示させる内容をどうするかかなり悩みました。
  • replyTokenが発行されるタイミング:Invalid reply tokenのエラーに何度出くわしたことか。ドキュメンテーションをしっかりと読むべし。
  • newsFetcher.pyweatherFetcher.pyで取得するJSONのトリミング:上記で説明したカルーセルの制限に対応すべく、あらかじめJSONデータの要素を減らす必要がありました。これは最早ループがちゃんと使えるかの問題だったのですが、条件などを正しく設定するのにかなり時間を費やしました。

リザルト

"Informant"と入力し送信すると、Bot側から「ニュース」か「天気」の選択肢がQuickMenu形式で与えられます。ニュースを選ぶと日本の主なヘッドラインを10個、天気を選ぶと位置情報を送るよう促され3時間毎の天気を10個表示してくれます。(2枚目のサムネイルが表示されていませんが、ちゃんとお天気のアイコンが表示されます。)
IMG_0041.PNG
LINE_capture_591422249.534186.JPG

改善したい点

はっきり言ってたくさんありますが主にこれらを優先したいです(笑)。

  • ニュースのバリエーションを増やしたい:NewsAPIは単にヘッドラインをJSONで返してくれるだけでなく、ソース別やトピック別などにニュース情報を提供してくれる本来はなかなか情報豊富なAPIです。今回は表示の簡素化を優先し、日本の主要トピックに限定しましたが、今後はさらにQuickMenuなどを活用してニュースの対象地域やトピックを選択してニュースを表示させることができるようにしたいと思います。(JSON取得は難しくないがカルーセル以外の表示方法でないとエラーに対処できない)
  • 天気情報の時間が世界標準時になっている:文字通りです。理想は位置情報などから時間帯を判別し、それを天気に表示させたいと思います。
  • 時間を指定してニュースや天気情報をプッシュ送信できるようにしたい:これは自分にとってハードルが一気に高くなりますが、できるようになれば利用価値がかなり上がるんじゃないかと思っています。

## テストしたい方
よろしければ以下のQRコードから友達登録して使ってみてください(英語表記です、ご了承ください)。Herokuの無料Tierでホスティングしているためスリープ状態になっている場合があります。その場合は応答に少し時間がかかるのでお待ちください。
qrcode.png

参考になった記事など

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?