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を試してみました。
近いうちに、やりたいことの成果を記事に書きたいと思いますので、そちらもよろしくお願いします。
スポンサーリンク
関連記事