sironekotoroの日記

Perl で楽をしたい

Perl入学式 in 東京 第5回 ピザ会でのお題「WebアプリからLINEに定型メッセージ送信」

Perl入学式 in 東京では各回の講義終了後にピザ会(ピザ&ジュース代は参加者負担)を開催しており、そこで受講者さんと雑談などをしております。

その中で、id:xtetsuji さんが課題が出し、志願者がコードを書いてその場で発表、という試みを行っています。

今回のお題:WebアプリからLINEに定型メッセージ送信

  • Mojolicious::Lite でボタンが並んでいるページを作る
  • そのボタンには「帰宅」「横になる」「寝る」などの状態が書かれている
  • そのボタンを押すと、IFTTT の WebHookを経由してLINEに「帰宅」「横になる」「寝る」などのメッセージが投稿される
  • ボタンを押した後は「送信しました」というページが表示される
  • LINEの家族チャットなどに送信できると便利なのではないか?

というものでした。

しかし

当方、LINE使っていないでござる・・・

ということで、当日は作りかけだったTwitterのアプリからAPIKeyを流用してでっち上げ。

ボタンを押すと、メッセージがtwitter APIを利用してtwitterに投稿される、というものです。

Perl入学式 第5回の講義資料の最後に掲載した「落ち穂拾い」にあるGETとPOSTを分けたコードになっています。

ボタンを押すと、TwitterAPI経由で定型メッセージをtweetする君

クリックするとコードが出てきます

ぶぶー!レギュレーション違反です!!

LINEじゃなくてtwitterだし、IFTTTじゃなくてtwitterAPIだけど、ボタンを押すとメッセージが飛ぶという結果自体は同じだし・・・

しかし、やっぱりレギュレーション満たしたコード書いてみたいですよね!

というわけで、LINEに登録。

IFTTT

ifttt.com

まずはIFTTTについて情報あつめ。

www.atmarkit.co.jp

うんうん、大体わかった(フラグ

Continue with Google or Facebook からGoogleでログイン。

  1. ログイン後、右上のユーザーのアイコンをクリックして Create を選択

  2. IF + THEN THIS THAT の + をクリック

  3. たくさんのアイコンが出てくるので、検索窓に web と入力。出てきた Web Hook をクリック

    f:id:sironekotoro:20190901160306p:plain

  4. Connect Webhooks 画面のConnect ボタンをクリック

  5. Receive a web request をクリック

    f:id:sironekotoro:20190901160311p:plain

  6. Event Name は適当に・・・send_message とかにしとこう。ほんで、 Create trigger ボタンをクリック

    f:id:sironekotoro:20190901160315p:plain

  7. おぉ、+ のところが Web Hook のマークになった。では次の + のマークのところをクリック。

    f:id:sironekotoro:20190901160317p:plain

  8. 検索窓に今度は LINE と入力して、出てきた LINEの緑のアイコンをクリック

    f:id:sironekotoro:20190901160321p:plain

  9. Connectボタンを押すと、LINEのメアドとパスワード入力画面が出るのでそれを入力

  10. 同意して連携する、をクリック

    f:id:sironekotoro:20190901160324p:plain

  11. Send message という緑のボタンが出てくるのでそれをクリック

    f:id:sironekotoro:20190901160328p:plain

  12. Recipient という画面が出てくる・・・とりあえず、何も変更せずに Create action をクリック

    f:id:sironekotoro:20190901160333p:plain

  13. 確認画面が出てくるので Finish をクリック

    f:id:sironekotoro:20190901160339p:plain

  14. 次に出てきた画面で、Web Hook のアイコンをクリック

    f:id:sironekotoro:20190901160324p:plain

  15. 画面右上にある Documentationをクリック

    f:id:sironekotoro:20190901160343p:plainf:id:sironekotoro:20190901160348p:plain

  16. 画面下部にある curl -X POST https://maker.ifttt.com/trigger//with/key/YOUR_KEY をターミナルから実行

  17. LINE Notify にメッセージが届く

届いたメッセージは

[IFTTT] Value 1:
Value 2:
Value 3:

ふむ。とりあえず、URLにアクセスすると、LINEに何か通知が届く、というところまではできた。

IFTTTのAPI調整

このDocumentationのページ、薄い四角のところは実は文字が入力可能だったりする。

{event} に 6. で決めたEvebt Name である send_message を入力、Value1 , 2, 3 にそれぞれ対応する何か適当な文字を入れて、画面下部にあるTest it!を使うと・・・おぉ、ちゃんと文字が入ったメッセージが届いた!

f:id:sironekotoro:20190901160511p:plain

あ、画像からはKEYは消してます。

ということで、このURLをPerlで組み立て、そしてMojolicious::Liteのボタンを押した時にURLに送信するようにすれば、レギュレーションは満たせそう。

ちなみに、このDocumentationページから入力が可能ってのがわからなくて、2時間くらい試行錯誤したよ!

というわけで、出来上がったコードがこれです。第5回はサブルーチンもやったので、IFTTTにリクエスト投げるところはサブルーチンにしてみました。

ボタンを押すと、IFTTT API経由で定型メッセージをLINEに流す君

クリックするとコードが出てきます gist.github.com

注意

このコードをインターネットに置いた場合、誰彼構わずボタンが押しまくられるだろうことは想像に難くないです。

ただ、自分の手元のパソコンで利用するだけであれば十分でしょう。

IFTTTと連携したレシピをPerlから制御することができる、というのは日々の暮らしがちょっと楽になる素晴らしい技術だと思います。

また、IFTTT経由ではなく、直接LINEのAPIを使ってみるのも良いかもしれません。

developers.line.biz

ぜひ、試行錯誤して日々の煩わしい業務や暮らしを楽にしてください!

試行錯誤の後