LINEのMessaging APIを使ってみた
やりたいことがあって、LINEのMessaging APIを使ってみました。
備忘録も兼ねて簡単に記事に書きたいと思います( ̄▽ ̄)
目次
スポンサーリンク
やること
とりあえず、Pythonを使って誰かにラインのメッセージを送ってみたいと思います。
そのために、以下の作業を行います。
- SSL対応のウェブサーバを立ち上げる。
- Webhook用のプログラムを書く。
- メッセージ送信用のプログラムを書く。
詳細については以下に書きます。
実際にやってみた
では早速、作業に入りたいと思います。
あ、そうそう。LINE DevelopersやMessaging APIとかの登録は一切説明しません。
他の人のブログにたくさん載っているので、私があえて説明する必要はないかと思いまして…。
わからないときはグーグル先生に聞いてくださいw
SSL対応のウェブサーバを立ち上げる
送信先のuserIdやgroupIdを取得するためにSSL対応のウェブサーバを立ち上げる必要があります。
おそらく、この作業が一番めんどうだと思います。
何が面倒ってウェブサーバがSSL対応じゃないといけない点ですね。
セキュリティのことを考えたら当然だと思うのですが、遊び程度でちょっとだけMessaging APIを使ってみたい人には敷居が高すぎます。
別に普通のhttpでいいじゃん、なんて思ったりしますw
そんなことはさておき、ウェブサーバを立ち上げましょう。
今回はDocker + Nginx + Let’s EncryptでSSL対応のウェブサーバを構築したいと思います。
やり方は以下の私の記事に書いてあります。
こちらを参考にすれば、簡単に構築することができます。
Webhook用のプログラムを書く
WebhookについてはQiitaのページにわかりやすい説明がありました。
botがLINEのメッセージを受け取ったときに、その情報が書かれているJSONファイルを受け取るPHPのプログラムを書きます。
いわゆるREST APIというやつですね。
プログラムは以下の通りです。
<?php const logDir = "保存先パス"; $reqBody = file_get_contents('php://input'); $reqJsonArr = json_decode($reqBody, true); $encodedBody = json_encode($reqJsonArr ,JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); // JSONが送られてきたとき if (!is_null($reqJsonArr)) { // ファイル名作成 date_default_timezone_set('Asia/Tokyo'); $date = date("Y_m_d_H_i_s"); $fileName = logDir . $date . ".json"; // ファイル作成 $fp = fopen($fileName, "wb"); fwrite($fp, $encodedBody); fclose($fp); // JSONが送られてこなったとき } else { header("HTTP/1.1 403 Forbidden"); } ?>
logDirは受け取ったJSONファイルを保存するディレクトリです。
任意のパスに書き換えてください。
このプログラムを先ほど立ち上げたウェブサーバ上に置いてください。
最後に、LINE DevelopersのページのWebhookのURLの欄に「自分のドメイン + line_callback.php」のURLを設定してください。(例: https://example.com/line_callback.php)
これで作成したbotにメッセージを送ると、指定したディレクトリにJSONファイルが作成され、userIdやgroupIdが取得できるはずです。
メッセージ送信用のプログラムを書く
送信部はみんなが大好きなPythonで書きます。
CHANNEL_ACCESS_TOKEN = LINE Developersから取得 to = userIdまたはgroupId msg = ここにメッセージを書く data = { "to":to, "messages":[ { "type":"text", "text":msg } ] } jsonData = json.dumps(data).encode(encoding='utf-8') request = urllib.request.Request("https://api.line.me/v2/bot/message/push", jsonData) request.add_header("Content-Type", "application/json") request.add_header("Authorization", "Bearer " + CHANNEL_ACCESS_TOKEN) request.get_method = lambda: 'POST' response = urllib.request.urlopen(request) print(response)
書き換える部分は全部で3つです。
CHANNEL_ACCESS_TOKENとtoとmsgです。
CHANNEL_ACCESS_TOKENは、LINE Developersから得られる文字列です。
作成したbotを特定するためのもので、他人には教えてはいけません。
toはJSONから取得したuserIdかgroupIdです。
msgは送りたいメッセージです。
以上のプログラムを実行して、レスポンスコードが200になれば指定したuserIdかgroupIdにメッセージが送れているはずです。
簡単ですね!
まとめ
SSL対応のウェブサーバを立てるのがめんどうなだけで、他はとても簡単だと思います。
私は、やりたいことがあるので、Messaging APIを試してみました。
近いうちに、やりたいことの成果を記事に書きたいと思いますので、そちらもよろしくお願いします。
スポンサーリンク
関連記事