30
42

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.

python+Dialogflowで東京メトロの運行情報を返すLINE botを作る。

Last updated at Posted at 2018-02-17

何をやったか

python+Webスクレイピング+Dialogflowの勉強かねて
yahoo運行状況からスクレイピングして東京メトロの運行状況を返すLINE botを作ってみたよ
路線をEntity登録したので一応conversation系のフレームワーク使ったってことで(適当)

botの構成

全体図はこんな感じ
heroku上にpython+Flaskでスクレイピングした情報をJSONで返すAPIを構築
DialogflowでLINEからの質問を分類しつつWebhookでAPIを叩いて返す仕組み
BeautifulSoupでYahoo運行情報からスクレイピング
全くまとまってないので箇条書きにする

  • LINE:ユーザーへのテキストの表示と質問の受付
  • DialogFlow:質問の分類(とは言っても今回はあんまり使ってない)
  • python
    • BeautifulSoup:Yahoo運行情報からスクレイピング
    • Flask:API要員、Dialogflowからのリクエストを受けてJSONを返す
  • heroku:APIの展開先、Dialogflowのwebhook先として使用

スクリーンショット 2018-02-18 4.53.28.png

Dialogflowについて

IBMのWatson Conversationライクなフレームワーク(だったはず)
いろんなアプリと簡単に連携できるので便利

今回はIntentとEntityの作りとして以下のように作ってみた。
ここら辺は作り次第で精度がだいぶ変わりそうな印象。
あとIntentに登録する質問データ作成がクッソめんどくさい

  • Intent:ユーザーからの質問「〇〇線の状況は?」
  • Entity:各路線の同義語リストとして活用、今回は路線名をsynonymとしてEntityに全部突っ込む
    • 例)JR東日本(総武線、山手線)、東京メトロ(新宿線、日比谷線)

実装その他諸々は以下の記事を参考にさせてもらいました。
全体が網羅されてるので非常に分かりやすかったです。ありがとうございました。
Dialogflow入門 @kenz_firespeed
https://qiita.com/kenz_firespeed/items/0979ceb05e4e3299f313

ハマりポイントとしては

  • dialogflowに返すJSONは必ず"speech"と"displayText"の2つのキーに値をセットする。
    • これのせいで1時間くらい詰まった。。。
  • 連携に必要なパラメータはしっかり確認する。
  • webhookはPOSTでリクエストを送るので受け側のAPIもメソッドを合わせる、
    • お気楽にcurlでGETするためにGETで受ける仕組みのままherokuに展開するミス。。。

あたりかなぁと

Flaskについて

python用のWebアプリケーションフレームワークだよ。
jsonifyを使ってレスポンスのJSONを自動生成する仕組みを使ってAPIを構築したよ

BeautifulSoupについて

XML解析ライブラリだったっけ?
今回はYahoo運行情報から情報を抜いてくるだけに使ってる。
urllibでurlopenしたものをreadしてBeautifulSoupにかけて
find_all、findでタグを指定して引っ張るだけ
python3なら特に日本語を考慮しなくていいので便利

こちらの方の投稿が非常に参考になりました。感謝
PythonとBeautiful Soupでスクレイピング @itkr
https://qiita.com/itkr/items/513318a9b5b92bd56185

動作中の画面

最後でヘソを曲げてますが答えてくれてます。
平常運転なせいでいまひとつ返しが物足りないですよね。
S__13688882.jpg

今後の展望

スクレイピングでデータを取ってこれることはできたので
今度は対応路線を増やしたいところ。
python側でJSONを受け取れてない問題があるのでそれを解決してからかなぁ

参考

python+Flaskの環境構築周り

Flaskの簡単な使い方 @zaburo
https://qiita.com/zaburo/items/5091041a5afb2a7dffc8
ウェブアプリケーションフレームワーク Flask を使ってみる @ynakayama
https://qiita.com/ynakayama/items/2cc0b1d3cf1a2da612e4
Flask + Hamlish で Hello World @elm200
https://qiita.com/elm200/items/2d0fd1f734dd439b56f8
Jinja2の使い方がわかるとFlaskを用いた開発がよりスマートになる @ryo2851
https://qiita.com/ryo2851/items/7ae5de21307d101b4759

python+FlaskでAPI開発にあたっての参考

CUBE SUGAR STORAGE「Python の Flask で REST API を作ってみる」
http://momijiame.tumblr.com/post/39378516046/python-%E3%81%AE-flask-%E3%81%A7-rest-api-%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B
datalove’s diary「FlaskでRestful APIを作る-jsonifyで日本語が文字化けする時の解決方法」
http://datalove.hatenadiary.jp/entry/flask-jsonify-how-to-encode-japanese

Beautiful soup周り(すごく助かった)

PythonとBeautiful Soupでスクレイピング @itkr
https://qiita.com/itkr/items/513318a9b5b92bd56185

Dialogflow周り

Dialogflow入門 @kenz_firespeed
https://qiita.com/kenz_firespeed/items/0979ceb05e4e3299f313

herokuへのデプロイ

heroku で python 動かすチュートリアルをやったメモ @cfiken
https://qiita.com/cfiken/items/0715bb945389bc9ca682
暗号通貨.py「初心者がHerokuでハマったポイント」
http://kasoutuuka.org/heroku-hello

pythonのその他諸々

pythonの正規表現をエミュレートしてくれる。超便利
https://regex101.com/
UXMILK「Pythonの正規表現の基本的な使い方」
http://uxmilk.jp/41416
LIFE WITH PYTHON「Python Tips:リストから重複した要素を削除したい」
https://www.lifewithpython.com/2013/11/python-remove-duplicates-from-lists.html

botとの連携

dorapon2000’s diary「Microsoft Bot Frameworkを使ってSkypeボットを作る」
http://dorapon2000.hatenablog.com/entry/2016/09/04/031821

30
42
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
30
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?