![見出し画像](https://assets.st-note.com/production/uploads/images/16722447/rectangle_large_type_2_9ce8401a7546d1cbfe4d25fa4bd7e4f2.png?width=1200)
「ちよくる」の予約LINEBotを作った話
まえがき
この記事は勉強がてら個人で取り組んだ内容の備忘録です。細かい技術の話はしません。作るまでの課程と、身近な改善を行ったよ!というところで、何かの参考になれば幸いです。
ちよくるとは?
自転車シェアリングサービスです。都内に在住のかたは、写真の赤い自転車を一度は見たことがあるのではないでしょうか。
自転車置き場をポートと呼びます。ポートで自転車を借り、他のポートで返却できる!とても便利なサービスです。値段もお手頃で都内を中心に沢山、ポートがあります。
便利なサービス!でも困った事も
ポートに自転車があれば、SUICAなどのFeliCaで、すぐに自転車を使えますが、(利用者が多く、)いつも自転車がありません...。その為、事前予約する必要があります。予約すると20分間自転車を確保できます。通勤で「ちよくる」を使っている身からすると、毎朝自転車の状況を確認して予約するのは辛いです。
また、予約のWEBページがお世辞にも使いやすとは言えずストレスです...
1. 「ちよくる」のWEBページにアクセス
↓
2. ログイン
↓
3. 駐輪場から選ぶ
↓
4. 地域選ぶ
↓
5. 場所を選ぶ
↓
6. 目的のポートを選ぶ
↓
7. 空いている自転車を選択して予約
自転車を予約するには、 長い、長い道のりです。
ってことで作った! 自転車予約 LINE Bot!
「ちよくるコンシェルジュ」という名前のLINEbotとのトークを開きます。GPSのボタンがあるのでクリックして、場所を送信すると、その場所から一番近い自転車を瞬時に予約してくれます。\(^o^)/
また、自転車があるポートの位置情報も送られてきます!
どうやって作ったか?
Docker + php + Laravel を使って開発しました。
「ちよくる」には一般に公開されているAPIが無いので、プログラムからWEB画面を操作して予約を行います。 その為、まずはプログラムから操作できるように、通信解析を行います。
通信解析
まずは、「ちよくる」の自転車の空き情報の情報が必要です。
以下のURLのページで必要な情報が取得できるAPIがあったので、それを使って取得することにします。
https://mixway.ekispert.net/ports/
Chromeのデベロッパーツールの Network を見ると、どんなリクエストが発行され、どんなレスポンスが返却されたか、調べることができます。
URLで 「lat=35.70&lng=139.76」 のような緯度経度を渡しているのがわかりましたのでアタリが付きました。
次に、「ちよくる」のWEB画面をプログラムから操作して実際に予約する作業が必要です。緯度経度と同様に「ちよくる」のWEBページをデベロッパーツールで調べて行きました。
プログラムからのWEB操作
php の Goutte というライブラリを使って、比較的簡単にWEBページの操作を再現できることがわかりました。
Goutte使ってスクレイピングしたのでまとめてみる
こちらの記事や、Goutteの公式ドキュメントを参考に実装しました。
Goutte は、POST/GET どちらもいけますし、Cookieを持っての画面遷移や取得したデータからの文字列抽出などWEB操作に必要な機能が網羅されています。
LINE MessageAPIを使う
公式に丁寧な説明があります。
PHP用のSDKもありますので、比較的簡単に利用することが可能です。
LINE MessageAPI の料金は、 無料で提供されているプランがあり
Developer Trial, フリー の2パターンあります。
フリープランだと送られてきたメッセージへ返信はできますが、こちらから直接送信(push)ができないので、今回は念の為、Developer Trial を選択しました。ただし、Developer Trial は友達50人までの上限があるため、外部に公開するBotなど作る際には課金する必要があるかもしれません。
ユーザーから送られてくるメッセージを受け取るため、LINE側のサーバから、webhookで送られてくる情報をプログラムで受け取る必要があります。
受け取る為、webhookのエンドポイントを指定する必要があるため、公開サーバを用意する必要があります。エンドポイントは正規認証局のSSL証明書が必要なので、オレオレ証明書では駄目です。
今回は、無料でSSL証明書を 作成できるLet's Encrypt で証明書を発行しました。Let's Encrypt の証明書を発行するのも一手間掛かるため、今回は、証明書を取得してくれる、dockerコンテナを使って、自動化しました。
docker で全自動 Let's encrypt が参考になります。
まとめ
自分が作ったLINEBotを毎日使っています。自分の作ったもので、身の回りが改善されると、とてもハッピーな気持ちになれますね。\(^o^)/
プログラムを勉強する時は、目的があるとモチベーションが上がりサクサク学べると思います!
開発構築や、WEBページ解析のテクニック、プログラムからのWEB画面操作、LINE MessageAPI の使い方など、別記事で詳しく紹介できていければと思います。
\(^o^)/