LINE messaging APIを使用してpythonでメッセージを送信する

# はじめに
LINE Messaging APIを使用してメッセージを送信してみました。
初めて触る人の参考になれば幸いです。

## 対象読者
- LINE messaging APIを使用してみたい人

# 作るもの
- 友達登録をしてくれているユーザに対して、４日1回くらいの頻度で「[memento mori](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A1%E3%83%B3%E3%83%88%E3%83%BB%E3%83%A2%E3%83%AA)」というメッセージを送信するbot

# 事前準備
[LINE Developers](https://developers.line.biz/ja/)で、Developersアカウントを作成してください。

# 1. チャネルを作成する
![スクリーンショット 2021-03-02 23.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/d8cee8c0-5e8b-cd9e-2cf9-8861246b3508.png)
プロダクト > 詳細はこちら より、詳細画面に遷移します。
![スクリーンショット 2021-03-02 23.24.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/b07799de-9b16-8027-2566-92e685644856.png)
Messaging APIの「今すぐ始めよう」を選択します。
![スクリーンショット 2021-03-02 23.30.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/c39c1ab4-8c61-e178-6bcb-fe0901f5d9d0.png)
画像やチャネルの概要等を記載しましょう
必要事項を入力していくと上記のような画面になります。
# 2. token情報を取得する
![スクリーンショット 2021-03-03 0.48.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/56386c28-11ce-14a9-0998-b57daa9ca8e6.png)
Messaging API設定より、「チャネルアクセストークン（長期） 」をコピーします
# 3. メッセージの送信テストをする
![スクリーンショット 2021-03-03 3.54.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/0080d1f0-33e9-8924-dc45-8b36aa083e2c.png)
動作確認のため同ページで友達登録をしておきましょう
手持ちの端末でQRコードを読み込めば、友達登録が行われます。

```bash
curl --location --request POST 'https://api.line.me/v2/bot/message/broadcast' \
--header 'Authorization: Bearer Your token' \
--header 'Content-Type: application/json' \
--data-raw '{
    "messages":[
        {
            "type":"text",
            "text":"memento mori"
        }
    ]
}'
```
curl文で動作確認をしましょう。上記コマンドを実行すればメッセージが送信されるはずです。
※ tokenは書き換えてください
※ 他言語で動作確認を行いたい場合は、[Postman](https://www.postman.com/)で[ドキュメント](https://documenter.getpostman.com/view/9371007/TWDfDYSn)を作成したので参考にしてください。
[ドキュメント](https://documenter.getpostman.com/view/9371007/TWDfDYSn)
# 4. pythonのコードを作成する

git cloneでファイルをcloneする
※ const.py.exampleをconst.pyにリネーム後、設定値を書き換えてください

```bash
git clone https://github.com/nekonisi/memento-mori.git
```

または、下記のファイルを手動で作成します。

```python:const.py
#!/usr/bin/env python
TOKEN = 'YOUR ACCESS TOKEN'
```

```python:post.py
#!/usr/bin/env python
#coding: UTF-8
import requests
import json
import const

url = 'https://api.line.me/v2/bot/message/broadcast'

# headerを定義
headers = {
        'Authorization': 'Bearer ' + const.TOKEN,
        'Content-Type' : 'application/json'
        }

# json形式でメッセージを定義
message_list = {
        'messages' : [
            {
                'type':'text',
                'text':'memento mori'
                }
            ]
        }

# jsonにエンコード
data = json.dumps(message_list)
response = requests.post(url, headers=headers, data=data)
```

```bash
python post.py
```
で動作確認できます。
# 5. cronに登録する
cronに登録していきます

```bash
crontab -e
```

```bash
*/1 10-15 * * * [ $((RANDOM \% 1200)) -eq 1 ] && python post.py
```
上記のように登録をすれば、10-15時の1分毎に1/1200の確率でメッセージを送信します。
大体、4日 * 60分 * 5時間 = 1200なので大体4日に1回くらいメッセージが送信されるはずです。
※ ここが一番苦労した

# おわりに
開発を始めようとする方の足がかりになれば幸いです。
他にも色々な機能があるみたいなので、少しずつ記事を更新できればと思います。

# 参考サイト
[ドキュメント | LINE Developers](https://developers.line.biz/ja/docs/)

# 2021/03/10追記
一定確率でpostするように修正を加えた