meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

LINEのMessaging APIを使ってみた

      2018/10/25

やりたいことがあって、LINEのMessaging APIを使ってみました。

LINE

備忘録も兼ねて簡単に記事に書きたいと思います( ̄▽ ̄)

やること

とりあえず、Pythonを使って誰かにラインのメッセージを送ってみたいと思います。

そのために、以下の作業を行います。

  1. SSL対応のウェブサーバを立ち上げる。
  2. Webhook用のプログラムを書く。
  3. メッセージ送信用のプログラムを書く。

詳細については以下に書きます。

実際にやってみた

では早速、作業に入りたいと思います。

あ、そうそう。LINE DevelopersやMessaging APIとかの登録は一切説明しません。
他の人のブログにたくさん載っているので、私があえて説明する必要はないかと思いまして…。

わからないときはグーグル先生に聞いてくださいw

SSL対応のウェブサーバを立ち上げる

送信先のuserIdやgroupIdを取得するためにSSL対応のウェブサーバを立ち上げる必要があります。

おそらく、この作業が一番めんどうだと思います。
何が面倒ってウェブサーバがSSL対応じゃないといけない点ですね。

セキュリティのことを考えたら当然だと思うのですが、遊び程度でちょっとだけMessaging APIを使ってみたい人には敷居が高すぎます。
別に普通のhttpでいいじゃん、なんて思ったりしますw

そんなことはさておき、ウェブサーバを立ち上げましょう。

今回はDocker + Nginx + Let’s EncryptでSSL対応のウェブサーバを構築したいと思います。

やり方は以下の私の記事に書いてあります。

久しぶりにウェブ開発の話です。最近、新しいウェブサービスを立ち上げるために、Docker + Nginx + PHP + Let's Encrypt で環境を構築しました。色々とわからないことが多くて調べまくりましたw今日は備忘録も兼ねて記事を書き思ました。想定している環境 Ubun...

こちらを参考にすれば、簡単に構築することができます。

Webhook用のプログラムを書く

WebhookについてはQiitaのページにわかりやすい説明がありました。

Webhookを利用した記事はよく見かけますがそもそもWebhook自体が何なのか、何を指しているのかよくわからなかったため、それに関しての備忘録です。# Webhookとは?- アプリケーションの更新情報を他のアプリケーシ...

 

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を試してみました。

近いうちに、やりたいことの成果を記事に書きたいと思いますので、そちらもよろしくお願いします。

 - 技術系