56
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonでLINE Bot APIを使ってプッシュ通知を実装する

Last updated at Posted at 2018-12-08

Renttleのあれこれ ~はじめて0からサービスを開発~ Advent Calendar 2018でLINE Bot APIについて、何回か書きましたが、今回もLINE Bot APIについて、書きました。

LINEは、日本でもっとも日常的に使われるアプリの一つであることは間違いないでしょう。このLINEのプラットフォームをうまく使いこなせれば、自分が作りたいサービスや発信したい情報を広めることができるでしょう。

今回は、「LINE Bot API」を使って、「プッシュ通知機能」を実装します。

LINE Developerの登録などの基本設定は、「LINEの「Messaging API」でテンプレートメッセージを実装してみた」の記事を参考にしてください。

実装中のLINE Botです。ぜひ、使って遊んでみてください٩(•౪• ٩)
友だち追加
(記事なキャプチャと違い「メジロ」というサービス名になっています。)

目次

  • プッシュ通知を実装
  • push_messageメソッドを観察
  • 気をつけること
  • おまけ

対象

  • LINEのMessaging APIを使ってみたい人
  • LINEでプッシュ通知を送りたい人

プッシュ通知を実装

では、早速、実装していきましょう。
(冒頭にも書きましたが、LINE Developerの初期設定などは、こちらを参照ください。)

ライブラリの準備

$ pip install flask
$ pip install line-bot-sdk

push_message()を使ってプッシュ通知機能を実装

とても短く書けます。

push_message_sender.py
from linebot import LineBotApi
from linebot.models import TextSendMessage

# リモートリポジトリに"ご自身のチャネルのアクセストークン"をpushするのは、避けてください。
# 理由は、そのアクセストークンがあれば、あなたになりすまして、プッシュ通知を送れてしまうからです。
LINE_CHANNEL_ACCESS_TOKEN = "ご自身のチャネルのアクセストークン"

line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)


def main():
    user_id = "プッシュ通知を送りたLINEユーザーのuser_id"

    messages = TextSendMessage(text=f"こんにちは😁\n\n"
                                    f"最近はいかがお過ごしでしょうか?")
    line_bot_api.push_message(user_id, messages=messages)


if __name__ == "__main__":
    main()

このファイルを実行すれば、指定したidのLINEにメッセージが送られます。

$ python push_message_sender.py

LINEのuser_idはどうやって取得するのか

「ちょっと!!LINEのuser_idなんて知らないよ!!」って思った人がいるかも知れません。

でも、大丈夫です。
LINE Bot APIを使ってLINEユーザー情報を取得するを読めば、user_idの取得方法が書いてあります。
これで取得したuser_idをDBなどに保存しておいて、そのuser_idたちを使えば、プッシュ通知を送ることができます。

push_messageメソッドを観察

Renttleのあれこれ ~はじめて0からサービスを開発~ Advent Calendar 2018 の7日目の記事と同様に、今回使うメソッドの中を観察してみましょう。(観察力も上がってきた( ͡° ͜ʖ ͡°))

linebot/api.py
    def push_message(self, to, messages, timeout=None):
        if not isinstance(messages, (list, tuple)):
            messages = [messages]

        data = {
            'to': to,
            'messages': [message.as_json_dict() for message in messages]
        }

        self._post(
            '/v2/bot/message/push', data=json.dumps(data), timeout=timeout
        )

ふむふむ。
第一引数にLINEのuser_idを渡して、第二引数にTemplateSendMessageクラスなどで定義したmessagesを渡さえば、正常に動いてくれそうですね。
それを加工して、LINEのWeb APIに投げているだけですね。超シンプル!

気をつけること

プッシュ通知を実装」内のコードのコメントアウトでも書きましたが、ご自身のチャネルのアクセストークンをリモートリポジトリにpushするのは避けてください。

理由は、そのアクセストークンさえあれば、プッシュ通知を送れてしまうからです。

誰があなたのリポジトリを見ているかわかりません。世の中はいい人ばかりではありませんよ。

おまけ

最後までお付き合いいただき、ありがとうございました。
少しでもお役に立てたのであれば、嬉しいです。

実装中のLINE Botです。ぜひ、使って遊んでみてくださいヾ(・ω・ ) ナデナテ
友だち追加
(記事なキャプチャと違い「メジロ」というサービス名になっています。)

56
71
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?