[PYTHON] Überwachen Sie Webseitenaktualisierungen mit LINE BOT
tl;dr
- Wenn es ganz persönlich wäre, könnte ich leicht einen LINE Bot erstellen.
- Broadcast (an alle registrierten Freunde senden) erfordert keinen Server und kann betrieben werden.
- Durch die Verwendung von ngrok usw. war es auch möglich, auf eine bestimmte kleine Anzahl von Gruppen zu posten, ohne dass ein Server erforderlich war.
Einführung
- Es kann vorkommen, dass Sie die Webseite regelmäßig überprüfen möchten, z. B. die Verkaufsseite in limitierter Auflage.
- Hier habe ich den Code geschrieben, um regelmäßige Updates zu überwachen und per LINE BOT in Python zu benachrichtigen.
fließen
- Registrieren Sie sich bei LINE Developers
- Holen Sie sich das Channel-Zugriffstoken
- Freunde dich mit bot on LINE an
- Schreiben Sie einen LINE BOT mit line / line-bot-sdk-python.
- Schreiben Sie den Update-Überwachungscode mit psf / request-html.
- Wenn Sie an einen bestimmten Benutzer oder eine bestimmte Gruppe senden möchten, benötigen Sie eine ID, die das Buchungsziel angibt.
- Ein Webserver ist erforderlich, da der Webhook Ereignisse für BOT empfangen muss
- Wenn die Vorbereitung schwierig ist, verwenden Sie vorerst ngrok usw.
- Erhalten Sie einfach einen Webhook mit ngrok und Python
Erläuterung
Registrieren Sie sich bei LINE Developers
- LINE-Entwickler - Verwenden der Messaging-API
- Es ist am besten, die Formel zu sehen. Bitte beachten Sie, dass sich die Benutzeroberfläche geringfügig ändern kann
- Sie benötigen eine LINE ID, um sich anzumelden. Bitte gehen Sie zur Kanalerstellung.
- Der zu erstellende Kanal ist der Messaging-API-Kanal.
Kanalauswahl |
|
Holen Sie sich ein Channel-Zugriffstoken
- Geben Sie nach dem Erstellen des Kanals ein Problem auf der Registerkarte Messaging-API aus, um das
`Kanalzugriffstoken (langlebig)`
zu erhalten.
channel access token |
|
Registriere dich als Freund
- Ein Kanalzugriffstoken erhalten Lesen Sie den QR-Code oben auf diesem Bildschirm und finden Sie Freunde auf LINE.
- LINE veröffentlicht offiziell ein SDK für Python. Verwenden Sie dieses.
Installieren Sie das SDK
$ pip install line-bot-sdk
Ich werde an alle meine Freunde und die Gruppe, die ich früher bekommen habe, posten
- Die Sendung wird an alle registrierten Freunde gesendet.
from linebot import LineBotApi
from linebot.models import TextSendMessage
access_token = 'XXXXXXXXXXXXXXX'
line_bot_api = LineBotApi(access_token)
line_bot_api.broadcast(TextSendMessage(text='Sendung an alle Freunde'))
Funktionsprüfung
- BOT sollte die Nachricht "Broadcast an alle Ihre Freunde" gesendet haben, wie unten gezeigt.
- Wenn es nicht funktioniert, überprüfen Sie bitte access_token, die Registrierung von Freunden usw.
Nachrichtenbeispiel |
|
4. Schreiben Sie den Update-Überwachungscode mit psf / request-html.
- Um die Webseite zu überwachen, ist es notwendig, den angezeigten Inhalt zu interpretieren.
- Hier verwende ich psf / request-html.
Installation
$ pip install requests-html
Wie benutzt man
Erläuterung
- Als Beispiel sehen wir auf der folgenden Seite, ob Sie Produkte bestellen können.
- Auf dieser Webseite wird wie folgt ausgedrückt, ob Sie eine Bestellung aufgeben können oder nicht.
- Der Speicherort von "Artikel, die nicht bestellt werden können" ändert sich in "Auf Lager" usw., daher scheint es gut, dies im Auge zu behalten.
<div class="status-text">
<div class="status-heading">
<span class="status">Artikel, die nicht bestellt werden können*</span>
</div>
<div class="status-note">
<p>
</p>
</div><!-- /div#status-note -->
</div>
Versuchen Sie es mit Schaben
- Nach dem Zugriff auf die Webseite wie unten
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://XXXXXXXXXXXXX/') # <----Geben Sie hier die URL ein, auf die Sie zugreifen möchten
- Sie können r.html.find () verwenden, um die Elemente einzugrenzen.
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('hxxps://XXXXXXXXXXXXX/') # <----Geben Sie hier die URL ein, auf die Sie zugreifen möchten
r.html.find('div.status-heading span.status')[0].text # <-----Artikel, die nicht bestellt werden können*
- Da ich die Zeichenkette gut verstanden habe, sollte ich den Zustand damit beurteilen.
Versuchen Sie, mit dem Benachrichtigungsteil von LINE zu kombinieren
- Versuchen Sie, eine Benachrichtigung zu senden, wenn die nicht vorrätige Zeichenfolge verschwindet.
# -*- coding:utf-8 -*-
from linebot import LineBotApi
from linebot.models import TextSendMessage
from requests_html import HTMLSession
ACCESS_TOKEN = 'XXXXXXXXXXX'
TARGET_URL = 'hxxps://XXXXXXXXXXXXX/rb/16057071/'
STATUS_CSS_SELECTOR = 'div.status-heading span.status'
NG_STATUS = 'Artikel, die nicht bestellt werden können'
def get_status():
session = HTMLSession()
r = session.get(TARGET_URL)
return r.html.find(STATUS_CSS_SELECTOR)[0].text
def broadcast_to_friends(message):
line_bot_api = LineBotApi(ACCESS_TOKEN)
line_bot_api.broadcast(TextSendMessage(text=message))
if not NG_STATUS in get_status():
broadcast_to_friends("Sie können das Produkt kaufen:" + TARGET_URL)
- Als ich es ausführte, wurde die folgende Nachricht gesendet.
|Nachrichtenbeispiel|
|:-:|:
||
Wenn Sie an einen bestimmten Benutzer oder eine bestimmte Gruppe senden möchten
- Es wird eine Push-Nachricht anstelle einer Sendung sein.
- https://developers.line.biz/en/reference/messaging-api/#send-push-message
- Um dies zu senden, benötigen Sie eine ID, die die Gruppe usw. identifiziert.
- Die ID wird von LINE über einen Webhook gesendet, wenn eine Operation am BOT ausgeführt wird. Bereiten Sie sich also darauf vor.
Webhook erhalten
- Bitte bereiten Sie die Umgebung für den Empfang von Webhooks vor, indem Sie auf Einfach Webhooks mit ngrok und Python empfangen verweisen.
- Wenn Sie bereit sind, geben Sie diese URL in die Webhook-URL auf der Registerkarte Messaging-API ein
- Drücken Sie auf Überprüfen und aktivieren Sie bei Erfolg die Option Webhook verwenden.
Einstellungsbeispiel |
|
Fügen Sie BOT in eine Gruppe ein und erhalten Sie group_id
- Setzen Sie als Nächstes auf der Registerkarte "Messaging-API" die Option "Bot darf Gruppenchats beitreten" auf "Aktiviert".
Einstellungsbeispiel |
|
- In diesem Zustand fliegt der Webhook, wenn Sie diesen LINE BOT in eine geeignete Gruppe einordnen.
- ngrok verfügt über einen Bildschirm, auf dem Sie die Anforderung bestätigen können, sodass Sie sie wie folgt bestätigen können.
- Sie benötigen lediglich events [0] .source.groupId.
Beispiel für die Überprüfung auf dem Inspektionsbildschirm von ngrok |
|
Push_message statt Broadcast
- Sobald Sie die groupId haben, verwenden Sie
`push_message``` anstelle von`
Broadcast```.
- https://github.com/line/line-bot-sdk-python#push_messageself-to-messages-notification_disabledfalse-timeoutnone
- Geben Sie zu diesem Zeitpunkt id als erstes Argument an.
-line_bot_api.broadcast(TextSendMessage(text='Sendung an alle Freunde'))
+line_bot_api.push_message(group_id, TextSendMessage(text='Nachricht an eine Person senden'))
Schließlich
- Danach können Sie es abschließen, indem Sie es regelmäßig mit dem Taskplaner oder Cron ausführen.
- Darüber hinaus kann der mechanische Zugriff auf die Webseite auf diese Weise den Zugriffszielserver belasten. Es wird daher empfohlen, die folgende Seite zu lesen, wenn Sie sie tatsächlich betreiben.
- http://librahack.jp/
- https://vaaaaaanquish.hatenablog.com/entry/2017/12/01/064227