見出し画像

PythonによるLINE操作:LINE Messaging API/ LINE Notify

1.概要

 今回はLINE Messaging APIを紹介します。この機能を使用して自分のLINEアカウントに希望する情報を通知が可能となります。
 今回は2通りの手法を紹介します。

●Messaging API:LINE Developers経由で開発
●Line Notify:気軽に使用できるがいろいろはできない

2.Messaging APIの環境構築

 Messaging APIを使用していくための環境構築を実施します。

2-1.Messaging APIへの登録

 まず初めに「Messaging API | LINE Developers」のサイトからLINEアカウントでログインします。

2-2.Providerの作成

 次にProviderの「Create」を押してBot用アカウントProviderを作成します。

2-3.channelの設定

 次にchannelを選定します。今回は「Messaging API channel」です。

 次に各項目を入力します。

●channel type:使用するAPIを選択します。(デフォルト)
●Provider:使用するProviderを選択します。(デフォルト)
●Channel icon:BOTに表示される写真
●Channel name:BOTに表示される名前
●Channel description:チャネルの概要(適当に記載)
●Category:カテゴリーを選択(適当に選択)

2-4.Botの友達登録

 channel内の「Messaging API」からQRコード or IDで友達登録します。

2-5.user IDとChannel access tokenの取得

 APIを使用するためにuser IDとChannel access tokenを取得します。user IDは「Basic settings」タブの一番下の”Your user ID”です。
 Channel access tokenは「Messaging API」タブの一番下です。最初は未表示のため「Issue」ボタンを押すと下記の通り発行されます。

3.Messaing APIの実装:line-bot-sdk

 簡単にLINE Message APIを使用するために外部ライブラリを使用します。

3-1.ライブラリインストール

 APIを操作するためのライブラリ:line-bot-sdkをインストールします。

pip install line-bot-sdk

3-2.token用のsecretファイル作成

 user IDとChannel access tokenの値を取得できるようにPythonコードに直接書かなくてよいように別ファイルに書き込みます。

[secret.json] ※useridとaccess_tokenは自分が発行したものに書き換えてください。
{
    "userid": "U59bdd5e0d202ed9c85f9b5d947806ffb",
    "access_token": "jZk4DjnHUZ+TvpuoGrEO83ULr7dQWFNOhM9RTii4voHBTksDsn/B+ohtrJVaSFK7JV7laSV9kqK0olwzvmpBR4yxDrQggc2Z3muunTCm3YUKfnnuwWwFgf6W1NojvGAKriP2fJsi+DLhSVPDrPNmgAdB04t89/1O/w1cDnyilFU="
}

 このようにjsonファイルを作成すると下記コードを実行すれば辞書型で戻り値を取得できるため直接tokenなどを記載する必要がなくなります。個人で作成するだけなら直記でもOK

[In]
import json

with open('secret.json', 'r') as f:
    api = json.load(f)
    
print(api) #出力は辞書型(JSON形式)

3-3.テキストメッセージの送付

 linebotライブラリを使用すると下記でメッセージを送付できます。

[In]
import json
from linebot import LineBotApi
from linebot.models import TextSendMessage

with open('secret.json', 'r') as f:
    api = json.load(f) #secret.jsonからuser_IDとchannel_tokenを取得
    
bot_api = LineBotApi(api['access_token']) #インスタンス化

def main():
    user_id = api['userid'] #IDを取得
    messages = TextSendMessage(text='Hello, world!') #LINEに送付するメッセージ
    bot_api.push_message(user_id, messages=messages)
    
main() #メイン関数を実行

4.LINE Notify

 Messaging APIとは別で外部アプリケーションからLINEの任意の相手に対してメッセージを送付できるサービスとしてLINE Notifyがあります。

4-1.LINE Nofityの準備:Token発行

 「LINE Notify」サイトから「マイページ」->「1:1でNINE Notifyから通知を受け取る」->「トークンを発行する」->「(トークンを)コピー」します。

4-2.メッセージの送付

 APIを使用したメッセージの送付は下記の通りです。 

[In]※コード行数を減らすためにTokenはそのまま記載しましたが3-2.をご参照ください。
import requests
import json

token = 'oKB4UG3F94KcHhGuO09W19fE4NiJv01MwMj6y4lc63o' #APIのトークン
url = 'https://notify-api.line.me/api/notify' #APIのエンドポイント
headers = {'Authorization': 'Bearer ' + token}
payload = {'message': 'Hello, world!'} #LINEに送るメッセージ
requests.post(url, headers=headers, data=payload)

4-3.画像ファイルの送付

 APIを使用したメッセージ+画像ファイルの送付は下記の通りです。

[In]
import requests
import json

token = 'oKB4UG3F94KcHhGuO09W19fE4NiJv01MwMj6y4lc63o' #APIのトークン
imgfile = 'konan.JPG' #猫の画像

url = 'https://notify-api.line.me/api/notify' #APIのエンドポイント
headers = {'Authorization': 'Bearer ' + token}
payload = {'message': '猫の画像を送付します'} #LINEに送るメッセージ

with open(imgfile, 'rb') as f: #ファイルをバイナリモードで開く
    files = {'imageFile': f} #ファイルを送信するための辞書
    requests.post(url, headers=headers, data=payload, files=files)

参考資料

LINE Developer Console:LINE Developersのホーム画面
Messageing API Docs:Messaging APIのドキュメント

あとがき

 定期実行+スクレイピングで定期的に欲しい情報をLINE APIで連絡するBOTを紹介したいけど連休までにできなかったからとりあえず公開します。
 4章で追加するか別記事で作成するかは状況に応じて対応予定。※あと見出し画像も修正しないと・・・


この記事が気に入ったらサポートをしてみませんか?