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?