Je souhaite que LINE soit informé de mon classement lorsque mon site recherche sur Google "un certain mot clé".
Cette fois, nous allons le construire sur Windows 10 home. Créez un environnement virtuel et installez les bibliothèques requises.
Créez un environnement virtuel dédié afin que votre ordinateur ne se mêle pas de la bibliothèque. Veuillez vous référer à ce qui suit pour savoir comment le faire. Créer un environnement virtuel pour Python
Après avoir créé l'environnement virtuel, activez-le.
invite de commande
Scripts\activate
Installez la bibliothèque pour le scraping Web et la bibliothèque pour une exécution régulière avec heroku.
invite de commande
pip install requests
pip install BeautifulSoup4
pip install apscheduler
Connectez-vous à LINE ci-dessous et émettez un jeton d'accès. Sélectionnez le nom du jeton affiché au moment de la notification et la salle de conversation à laquelle envoyer. Puisque je vais m'envoyer cette fois-ci, j'ai sélectionné «Recevoir une notification de LINE Notify 1: 1» et je l'ai émis. Assurez-vous de noter les jetons émis. (Je ne peux plus le voir quand je le ferme)
Ceci complète la coopération.
Créez un fichier Python. Puisqu'il est créé à l'invite de commande, déplacez le chemin vers l'emplacement de l'environnement virtuel créé.
invite de commande
type nul > main_proc.py
type nul > clock.py
Après le déploiement sur heroku, il sera exécuté régulièrement, alors créez clock.py qui décrit les informations de planification.
Le codage proprement dit est le suivant. Ce message est le contenu de la notification LINE, je vais donc omettre l'explication du code.
main_proc.py
import requests
from bs4 import BeautifulSoup as bs
import os
line_notify_token = os.environ['LINE_NOTIFY_TOKEN']
def main_proc():
mes = 'Hors service ou non traité'
targeturl = 'https://sentreseau.com/'
targetur2 = 'http://sentreseau.com/'
#En-tête de la demande
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
list_keyword = 'plateforme d'alimentation Fukuoka'
url = 'https://www.google.co.jp/search?num=100&q={}'.format(list_keyword)
#Lien
response = requests.get(url, headers=headers)
try:
#Vérifier le code d'état HTTP
response.raise_for_status()
except:
mes = 'Je n'ai pas pu l'obtenir aujourd'hui, désolé.'
#Analyser le HTML récupéré
soup = bs(response.content, 'html.parser')
#Obtenez les titres et les liens des résultats de recherche
ret_link = soup.select('.r > a')
mes = url
for i in range(len(ret_link)):
#Obtenez uniquement le lien et supprimez la partie supplémentaire
url_txt = ret_link[i].get('href').replace('/url?q=','')
if (targeturl in url_txt) or (targetur2 in url_txt):
mes = '「{}Suite à une recherche avec ""{}Le classement est{}C'était un endroit.'.format(list_keyword, targeturl, i + 1)
break
#Notifier LINE
line_notify(mes)
#Fonction de notification à LINE
def line_notify(message):
line_notify_api = 'https://notify-api.line.me/api/notify'
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
requests.post(line_notify_api, data=payload, headers=headers)
if __name__ == "__main__":
main_proc()
clock.py
import os,main_proc
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
if __name__ == "__main__":
#07 tous les jours:Courir jusqu'à 30
sched.add_job(main_proc.main_proc, 'cron', hour=7, minute=30)
sched.start()
#Courir chaque minute
#sched.add_job(main_proc.main_proc, 'interval', minutes=1)
Le site suivant sera utile pour créer heroku. http://www.dcom-web.co.jp/technology/heroku1/
Lorsque vous exécutez la commande suivante, le navigateur de connexion démarre, alors connectez-vous.
heroku login
heroku créer le nom de l'application
Ajoutez un buildpack pour exécuter Python sur heroku.
heroku buildpacks:add heroku/python -un nom d'application
La valeur par défaut est UTC, alors réglez-la sur Asia / tokyo.
heroku config:add TZ=Asia/Tokyo -un nom d'application
Il n'est pas bon d'écrire le jeton d'accès directement dans le code, alors stockez-le dans la variable d'environnement.
heroku config:set LINE_NOTIFY_TOKEN=Jeton d'accès-un nom d'application
Vérifiez s'il est correctement défini avec la commande suivante.
heroku config -un nom d'application
invite de commande
pip freeze > requirements.txt
(Première fois uniquement) Créez un fichier git initial. Un dossier ".git" est créé dans le dossier de travail.
git init
(Première fois uniquement) Créez un référentiel distant.
heroku git:remote -un nom d'application
Ajoutez vos modifications à l'index.
git add .
git add nom de fichier
Commettre
git commit -m "Ecrivez si vous avez un commentaire"
Déployez-vous sur heroku.
git push heroku master
Vérifions le fonctionnement après le déploiement.
invite de commande
heroku run python clock.py
Cela fonctionne correctement. Apparemment, quand on recherche "power platform Fukuoka", il semble être 4e au moment de la publication.
Après le déploiement sur heroku, nous avons pu confirmer l'opération, alors démarrez clock afin que clock.py codé pour une exécution périodique soit exécuté périodiquement.
invite de commande
heroku ps:scale clock=1
S'il dit "Mise à l'échelle des dynos ... terminé, maintenant l'horloge à 1: gratuit", c'est OK.
Ca y est, tous les matins à 7h30, LINE sera notifié du classement. Félicitations, félicitations.
À propos, pour arrêter l'horloge sur heroku, procédez comme suit:
invite de commande
heroku ps:scale clock=0