[Python] Laissez LINE vous informer quotidiennement du classement des résultats de recherche sur votre site.

Chose que tu veux faire

Je souhaite que LINE soit informé de mon classement lorsque mon site recherche sur Google "un certain mot clé".

Créer un environnement

Cette fois, nous allons le construire sur Windows 10 home. Créez un environnement virtuel et installez les bibliothèques requises.

Créer un environnement virtuel

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

Installation de la bibliothèque

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

Émettre des jetons pour la coopération LINE

Connectez-vous à LINE ci-dessous et émettez un jeton d'accès. LINE Notify - Google Chrome 2020_06_16 14_02_59.png 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) LINE Notify - Google Chrome 2020_06_16 14_06_59.png

Ceci complète la coopération. LINE Notify - Google Chrome 2020_06_16 14_10_55.png

Création de programme

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)

Déployer sur heroku

Le site suivant sera utile pour créer heroku. http://www.dcom-web.co.jp/technology/heroku1/

Connectez-vous à heroku

Lorsque vous exécutez la commande suivante, le navigateur de connexion démarre, alors connectez-vous.

heroku login

Heroku _ Login - Google Chrome 2020_06_16 15_31_28.png

Créer une application

heroku créer le nom de l'application

Ajouter un buildpack

Ajoutez un buildpack pour exécuter Python sur heroku.

heroku buildpacks:add heroku/python -un nom d'application

Changez le fuseau horaire.

La valeur par défaut est UTC, alors réglez-la sur Asia / tokyo.

heroku config:add TZ=Asia/Tokyo -un nom d'application

Stocker le jeton d'accès LINE dans une variable d'environnement

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

Créez un fichier pour travailler avec heroku

invite de commande


pip freeze > requirements.txt

Déployer sur heroku

(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.

Lancer l'exécution périodique

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.

PS

À propos, pour arrêter l'horloge sur heroku, procédez comme suit:

invite de commande


heroku ps:scale clock=0

Recommended Posts

[Python] Laissez LINE vous informer quotidiennement du classement des résultats de recherche sur votre site.
Utilisez AWS lambda pour récupérer les actualités et notifier régulièrement LINE des mises à jour [python]
Vous recherchez commandlinefu sur la ligne de commande
[Exemple d'amélioration de Python] Apprentissage des bases de Python sur un site gratuit en 2 semaines
Script Python qui peut vérifier l'état du serveur à partir du navigateur
Diffuser les résultats de recherche Twitter comme un certain site vidéo [python]
Google recherche la chaîne sur la dernière ligne du fichier en Python
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
[Python] Créez un script qui utilise FeedParser et LINE Notify pour informer LINE des dernières informations sur le nouveau virus corona du ministère de la Santé, du Travail et des Affaires sociales.
[Python] Explorez les caractéristiques des titres des meilleurs sites dans les résultats de recherche Google
Si vous voulez un singleton en python, considérez le module comme un singleton
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Créez un environnement python sur votre Mac
Rechercher le labyrinthe avec l'algorithme python A *
[python] [meta] Le type de python est-il un type?
À la recherche du FizzBuzz le plus rapide en Python
L'histoire du traitement A du blackjack (python)
[Python] Une barre de progression sur le terminal
Différentes façons de lire la dernière ligne d'un fichier csv en Python
Laisser Python mesurer le score moyen d'une page à l'aide de l'API PageSpeed Insights
Création d'un LINE BOT pour notifier d'autres concours AtCoder à l'aide d'AWS
Informer périodiquement l'état de traitement de Raspberry Pi avec python → Google Spreadsheet → LINE
Combien de types de Python avez-vous dans votre macOS? J'avais 401 types.
Installez séparément une version de Python qui n'est pas préinstallée sur votre Mac
[Python] Un programme qui calcule la différence entre les valeurs totales diagonales
Dessinez une ligne de pliage / diagramme de dispersion avec python matplotlib pour fichier CSV (2 colonnes)