[PYTHON] Surveillez les mises à jour des pages Web avec LINE BOT
tl;dr
- Si c'était complètement personnel, je pourrais facilement créer un Bot LINE.
- La diffusion (envoyer à tous les amis enregistrés) ne nécessite pas de serveur et peut être utilisée.
- De plus, en utilisant ngrok, etc., il était possible de publier sur un petit nombre de groupes spécifiques sans avoir besoin d'un serveur.
introduction
- Il peut arriver que vous souhaitiez consulter régulièrement la page Web, comme la page de vente en édition limitée.
- Ici, j'ai écrit le code pour surveiller les mises à jour régulières et notifier par LINE BOT en Python.
couler
- Inscrivez-vous auprès des développeurs LINE
- Obtenez le jeton d'accès à la chaîne
- Faites-vous des amis avec bot sur LINE
- Écrivez un LINE BOT en utilisant line / line-bot-sdk-python
- Rédigez le code de surveillance des mises à jour en utilisant psf / requests-html
- Si vous souhaitez publier pour un utilisateur spécifique ou un groupe spécifique, vous devez obtenir un identifiant qui indique la destination de publication.
- Vous avez besoin d'un serveur Web car vous devez recevoir des événements pour BOT sur le webhook
- Si la préparation est difficile, utilisez ngrok etc. pour le moment.
- Recevez simplement un webhook avec ngrok et Python
La description
Inscrivez-vous auprès des développeurs LINE
- LINE Developers-To use Messaging API
- Il est préférable de voir la formule. Veuillez noter que l'interface utilisateur peut changer un peu
- Vous avez besoin d'un identifiant de ligne pour vous connecter. Veuillez aller à la création de la chaîne.
- Le canal à créer est le canal de l'API de messagerie.
Selection de CHAINE |
|
Obtenez un jeton d'accès à la chaîne
- Après avoir créé le canal, émettez un problème à partir de l'onglet API de messagerie pour obtenir le `` Jeton d'accès au canal (longue durée) ''.
channel access token |
|
Inscrivez-vous comme ami
- Obtention d'un jeton d'accès à la chaîne Lisez le code QR en haut de cet écran et faites-vous des amis sur LINE.
- LINE publie officiellement un SDK pour python, alors utilisez ceci.
Installer le SDK
$ pip install line-bot-sdk
Je posterai à tous mes amis et au groupe que j'ai eu plus tôt
- la diffusion sera envoyée à tous les amis enregistrés.
from linebot import LineBotApi
from linebot.models import TextSendMessage
access_token = 'XXXXXXXXXXXXXXX'
line_bot_api = LineBotApi(access_token)
line_bot_api.broadcast(TextSendMessage(text='Diffuser à tous les amis'))
Contrôle de fonctionnement
- BOT devrait avoir envoyé le message "Diffuser à tous vos amis" comme indiqué ci-dessous.
- Si cela ne fonctionne pas, veuillez consulter access_token, l'enregistrement d'amis, etc.
Exemple de message |
|
4. Rédigez le code de surveillance des mises à jour en utilisant psf / requests-html
- Afin de surveiller la page Web, il est nécessaire d'interpréter le contenu affiché.
- Ici, j'utiliserai psf / requests-html.
Installation
$ pip install requests-html
Comment utiliser
La description
- A titre d'exemple, voyons si vous pouvez commander des produits sur la page suivante.
- Sur cette page Web, si vous pouvez ou non passer une commande est exprimé comme suit.
- L'emplacement des "Articles qui ne peuvent pas être commandés" deviendra "En stock", etc., il semble donc bon de garder un œil sur cela.
<div class="status-text">
<div class="status-heading">
<span class="status">Articles qui ne peuvent pas être commandés*</span>
</div>
<div class="status-note">
<p>
</p>
</div><!-- /div#status-note -->
</div>
Essayez de gratter
- Après avoir accédé à la page Web comme ci-dessous
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://XXXXXXXXXXXXX/') # <----Saisissez l'URL à laquelle vous souhaitez accéder ici
- Vous pouvez utiliser r.html.find () pour affiner les éléments.
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('hxxps://XXXXXXXXXXXXX/') # <----Saisissez l'URL à laquelle vous souhaitez accéder ici
r.html.find('div.status-heading span.status')[0].text # <-----Articles qui ne peuvent pas être commandés*
- Depuis que j'ai bien la chaîne de caractères, il semble que je devrais juger la condition avec cela.
Essayez de combiner avec la partie notification de LINE
- Essayez d'envoyer une notification lorsque la chaîne de rupture de stock disparaît.
# -*- 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 = 'Articles qui ne peuvent pas être commandés'
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("Vous pouvez acheter le produit:" + TARGET_URL)
- Lorsque je l'ai exécuté, le message suivant a été envoyé.
|Exemple de message|
|:-:|:
||
Lorsque vous souhaitez publier pour un utilisateur spécifique ou un groupe spécifique
- Ce sera un message push au lieu d'une diffusion.
- https://developers.line.biz/en/reference/messaging-api/#send-push-message
- Pour envoyer ceci, vous avez besoin d'un identifiant qui identifie le groupe, etc.
- L'ID sera envoyé depuis LINE via un webhook lorsqu'une opération est effectuée sur le BOT, alors préparez-vous.
Recevoir le webhook
- Veuillez vous reporter à Recevoir simplement des webhooks avec ngrok et Python pour préparer un environnement pour recevoir des webhooks.
- Lorsque vous êtes prêt, entrez cette URL dans l'URL du Webhook dans l'onglet API de messagerie
- Appuyez sur Vérifier et en cas de succès, cochez Utiliser Webhook.
Exemple de réglage |
|
Mettez BOT dans un groupe et obtenez group_id
- Ensuite, définissez `` Autoriser le bot à rejoindre les discussions de groupe '' sur l'onglet API de messagerie sur Activé.
Exemple de réglage |
|
- Dans cet état, si vous placez ce LINE BOT dans un groupe approprié, le webhook volera.
- ngrok a un écran où vous pouvez confirmer la demande, vous pouvez donc la confirmer comme suit.
- Tout ce dont vous avez besoin, ce sont des événements [0] .source.groupId.
Exemple de vérification sur l'écran d'inspection de ngrok |
|
Pour push_message au lieu de diffuser
- Une fois que vous avez le groupId, utilisez
push_message au lieu de `` `` broadcast
.
- https://github.com/line/line-bot-sdk-python#push_messageself-to-messages-notification_disabledfalse-timeoutnone
- À ce stade, donnez id comme premier argument.
-line_bot_api.broadcast(TextSendMessage(text='Diffuser à tous les amis'))
+line_bot_api.push_message(group_id, TextSendMessage(text='Envoyer un message à un individu'))
finalement
- Après cela, vous pouvez le compléter en l'exécutant régulièrement avec le planificateur de tâches ou cron.
- De plus, accéder mécaniquement à la page Web de cette manière peut mettre une charge sur le serveur de destination d'accès, il est donc recommandé de lire la page suivante lors de son utilisation.
- http://librahack.jp/
- https://vaaaaaanquish.hatenablog.com/entry/2017/12/01/064227