Pythonで、名言をスクレイピングして、LINEにメッセージで送ってみました。
名言をスクレイピングしてくる部分は、以下、Rubyで実装されていた記事を参考にさせていただきました。
プッシュメッセージの種類
Messaging APIでメッセージ送信する方法は大きく分けて2種類(応答メッセージ、プッシュメッセージ)で、今回はプッシュメッセージを使います。
プッシュメッセージは、任意のタイミングでユーザーに送信できるメッセージで、送る方法には、以下の4種類があります。
送信方法 | 説明 | 備考 |
---|---|---|
プッシュメッセージ | ユーザー、グループ、トークルームを指定してメッセージを送信。 | 例えば、ショッピングサイトで商品を購入したユーザーに対して、商品の発送を通知する場合に使用。 |
マルチキャストメッセージ | 複数のユーザーIDに対して、同じメッセージを効率よく送信。 | 例えば、ショッピングサイトを利用したことがあるユーザーに対して、新機能を一斉に通知する場合に使用。 |
ナローキャストメッセージ | 複数のユーザーに対して、同じメッセージを送信。 | 送信対象は、属性情報(性別や年齢、OSの種類、地域など)やリターゲティング(オーディエンス)を利用して指定。 |
ブロードキャストメッセージ | LINE公式アカウントと友だちになっているすべてのユーザーに、同じメッセージを送信。 |
マルチキャストメッセージが複数のユーザーIDを指定するのに対して、ナローキャストメッセージは、ある条件に一致するユーザーのかたまり(オーディエンス)を利用して、オーディエンス同士をAND、ORなどの条件で指定できます。
ナローキャストメッセージは、さらに属性情報も使えるので、マーケティングオートメーションとして、プッシュメッセージを行うのに有用な送信方法です。
ただ、ナローキャストメッセージは送信対象が50人以上必要(送信できる例外もある)なので、個人レベルで使うのには、他の送信方法で十分なので、ナローキャストメッセージ以外について、試します。
Pythonでプッシュメッセージを送ってみた
まず、プッシュメッセージを送るのに、自分自身のユーザーIDを知る必要があります。LINE Developers > チャネル基本設定 > あなたのユーザーID で確認できます。ユーザーIDはUから はじまる文字列です。
以下、記事同様のPipenv環境で、.envファイルに環境変数を記載して実行します。

LINE_CHANNEL_ACCESS_TOKEN='YOUR_LINE_CHANNEL_ACCESS_TOKEN'
OWN_USER_ID='YOUR_OWN_USER_ID'
メッセージ送信するPythonコードです。
from linebot import LineBotApi
from linebot.models import TextSendMessage
import os
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)
own_user_id = os.getenv('OWN_USER_ID', None)
line_bot_api = LineBotApi(channel_access_token)
line_bot_api.push_message(own_user_id, TextSendMessage(text='プッシュメッセージ'))
line_bot_api.multicast([own_user_id], TextSendMessage(text='マルチキャストメッセージ'))
line_bot_api.broadcast(TextSendMessage(text='ブロードキャストメッセージ'))
コマンドを実行すると、LINEにメッセージが配信されます。
$ pipenv run python push_message.py

Pythonで名言を送ってみた
参考サイト同様、以下サイトから、ランダムに名言を表示させ、スクレイピングして取得します。Getでリクエストして、レスポンスのHTMLからBeautifulSoupで、必要な情報を取得します。
名言をスクレイピングして、LINEにプッシュメッセージを送るPythonコードです。
from linebot import LineBotApi
from linebot.models import TextSendMessage
import os
import requests
from bs4 import BeautifulSoup
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)
own_user_id = os.getenv('OWN_USER_ID', None)
line_bot_api = LineBotApi(channel_access_token)
def saying_text():
url = 'http://www.meigensyu.com/quotations/view/random'
res = requests.get(url)
html = res.text
soup = BeautifulSoup(html, 'html.parser')
saying = soup.find('div', class_='text')
book = soup.find('div', class_='link')
tags = soup.find('div', class_='tags').find_all('a')
tag_text = str()
for a in tags:
tag_text = tag_text + a.string + ' '
out = saying.text + '\n(' + book.text + '、' + tag_text + ')'
return out
line_bot_api.push_message(own_user_id, TextSendMessage(text=saying_text()))
コマンドを実行すると、LINEにランダムに名言が配信されます。
$ pipenv run python push_message_saying.py

まとめ
- Messaging APIのプッシュメッセージを利用
- プッシュメッセージには、送る方法によって4種類あり、今回は、1対1のプッシュメッセージを利用
- BeautifulSoupで名言をスクレイピング
作成したPythonファイルをXserverなどのサーバーにアップロードして、定期実行すると、毎日、自分自身を鼓舞するBotを作成できたりするかと思います。
また、Flexmessageを利用して、名言の見せ方を工夫するのも面白いかと思います。