[PYTHON] [LINE Notify API, AWS] Envoyez régulièrement des tweets bourdonnants au groupe LINE

Que faire cette fois

Pour le groupe LINE avec des amis Nous allons créer un mécanisme pour envoyer des tweets bourdonnants à l'heure prévue.

LINE Notify API

En se connectant à LINE Notify, les utilisateurs de LINE pourront facilement recevoir des notifications de services.

[Source]: LINE Notify

Il semble.

Lorsque vous l'utilisez réellement, vous recevrez un message d'un compte appelé «LINE Notify» comme celui-ci.

image.png

Préparation pour LINE Notify

Suivez les étapes du lien ci-dessous pour que «LINE Notify» soit prêt à être utilisé. [Super facile] Essayez d'utiliser LINE notify

Recevez des tweets bourdonnants

Je me demandais si je devais faire de mon mieux avec les tweets bourdonnants en utilisant Twitter API, Cela semblait douloureux, alors j'ai décidé de gratter le site de classement existant.

Site de classement de popularité Twitter → [TwTimez]

Code (Python)

import requests
from bs4 import BeautifulSoup

#Recevez les tweets les plus vigoureux
def bazz_get():
    #URL d'accès
    url = "http://www.twtimez.net/index.html"

    #Accéder à l'URL
    html = requests.get(url)

    #Manipulez le HTML avec une belle soupe
    soup = BeautifulSoup(html.text, "html.parser")

    try:
        for detalis in soup.find(class_="details details2"):
            print(detalis.get("href"))
            return str(detalis.get("href"))
    except:
        return "Une sorte d'erreur"

#Envoyer un message à Line
def send_line(Bazz):

    notify_url = "https://notify-api.line.me/api/notify"
    token = "Jeton d'accès"
    headers = {"Authorization": "Bearer " + token}

    message = "\r\n" + Bazz
    payload = {"message":  message}

    requests.post(notify_url, headers=headers, params=payload)


if __name__ == "__main__":
    send_line(bazz_get())

Grattage

De quoi vous souciez-vous? C'est ma première fois. C'était un peu si j'utilisais "Beautiful Soup".

Dans les endroits suivants, je tire des classes et des balises qui contiennent les informations que je veux du HTML.

    for detalis in soup.find(class_="details details2"):
        print(detalis.get("href"))
        return str(detalis.get("href"))

Recherchez la classe ou la balise contenant les informations souhaitées en suivant la procédure que vous effectuez avec GIF. Vous pouvez voir le html de la page en appuyant sur «F12 Key».

F12.gif

S'il n'y a pas de problème jusqu'à présent, un message sera envoyé à LINE après l'exécution.

AWS Nous allons créer un mécanisme pour envoyer automatiquement un message lorsqu'il est planifié à l'aide des services AWS.

C'est peut-être gratuit. Si vous recevez une facture plus tard, payez les frais d'étude et arrêtez rapidement.

AWS Lambda

Vidéo de commentaire AWS Lambda

Vous pouvez exécuter votre code sans avoir à penser au serveur. Vous ne payez que pour le temps de calcul réel que vous utilisez.

Il semble. J'insérerai ici le code que j'ai écrit cette fois.

Amazon CloudWatch

Vidéo de commentaire Amazon Cloud Watch

Observabilité des ressources et des applications AWS sur AWS et sur site

Il semble. Je ne sais pas. En bref, je pense que vous pouvez facilement surveiller quelque chose que vous avez fait et faire diverses choses. Les fonctions créées sur Lambda peuvent être exécutées périodiquement à l'heure définie.

Procédure réelle

Connectez-vous à la console Lambda et sélectionnez Créer une fonction Donnez-lui un nom et passez au suivant.

AWSAddTrigger.PNG

Il semble que vous pouvez télécharger chaque dossier avec ~~ Zip, Je n'ai pas fait grand chose, alors je vais copier et coller le code ci-dessus dans la fonction. ~~

Cela n'a pas fonctionné parce que j'utilisais un module. De plus, vous devez ajouter ou modifier votre code.

De plus, téléchargez le code sous forme de «fichier .zip» au lieu de «modifier le code en ligne».

Code modifié pour AWS


import requests
from bs4 import BeautifulSoup


def bazz_get():
    #URL d'accès
    url = "http://www.twtimez.net/index.html"

    #Accéder à l'URL
    html = requests.get(url)

    #Manipulez le HTML avec une belle soupe
    soup = BeautifulSoup(html.text, "html.parser")

    try:
        for detalis in soup.find(class_="details details2"):
            print(detalis.get("href"))
            return str(detalis.get("href"))
    except:
        return "Une sorte d'erreur"


def send_line(Bazz):

    notify_url = "https://notify-api.line.me/api/notify"
    token = "Jeton d'accès"
    headers = {"Authorization": "Bearer " + token}

    message = "\r\n" + Bazz
    payload = {"message":  message}

    requests.post(notify_url, headers=headers, params=payload)


def bot(event, lambda_context):
    send_line(bazz_get())

Vous trouverez ci-dessous la fonction réellement appelée par Lambda. Cela aurait été bien d'avoir un script séparé qui ne l'exécute, Cela fonctionne bien et je n'ai pas l'intention de l'étendre à l'avenir, alors j'ai fait ce qui suit. Des arguments sont nécessaires pour l'appeler avec Lambda.


def bot(event, lambda_context):
    send_line(bazz_get())

Écrivez le nom du script Python et le nom de la méthode que vous souhaitez appeler dans le gestionnaire de destination de téléchargement en les connectant avec ..

BuzzNotify.PNG

Téléchargez le fichier Zip moduleé sur Lambda

Tout d'abord, enregistrez le module dans n'importe quel répertoire.

Tout d'abord, accédez au répertoire que vous souhaitez enregistrer.

Exécuter à l'invite de commande


cd n'importe quel répertoire

Après cela, enregistrez le module utilisé dans Python Script dans le répertoire actuel.

Exécuter à l'invite de commande


pip install beautifulsoup4 -t .
pip install requests -t .

Vient ensuite la compression Zip. Compressez le script et le module Python que vous souhaitez télécharger. Si vous effectuez une compression Zip sur le dossier qui stocke tout, un dossier supplémentaire pour une couche sera créé. Sélectionnez tout et compressez comme une image GIF.

Zip.gif

CloudWatch Events

Ensuite, sélectionnez «Ajouter un déclencheur» pour travailler avec CloudWatch. (Vous pouvez également utiliser l'approche consistant à vous connecter à la console CloudWatch et à définir des paramètres distincts.)

AWRTrigger.PNG

Paramètres de planification

Veuillez vous référer au lien ci-dessous pour savoir comment définir le calendrier (quand exécuter le code). Schedule Expressions for Rules

Connectez-vous à CloudWatch depuis la console Si vous créez une nouvelle règle, elle ressemblera à l'image ci-dessous. Il est facile à comprendre car il montre quand exécuter.

CloudWatch.PNG

UTC (GMT) et JST

Comme vous pouvez le voir sur l'image ci-dessus, le mot GMT est écrit après l'heure d'exécution.

Il semble qu'il y ait un décalage de 9 heures par rapport à l'heure au Japon, il semble donc que ce soit inutile si vous ne réglez pas l'heure compte tenu du décalage horaire.

[Lien de référence]: [AWS] Explication du format de l'expression cron CloudWatch ou de l'expression de taux

Impressions de tous les membres du groupe LINE

Tous étaient des shikato complets. Pourquoi?


07/12/2019 postscript

En fait, les tweets avec un grand nombre de RT et de favos sont tous de type campagne. .. .. J'étais en colère parce que la campagne RT de Lawson coulait tous les jours sur la ligne du groupe.

BazzLine.PNG

Lien de référence

Programme qui vous apprend ce que vous voulez savoir le matin sur LINE (Python) [Python] Comment utiliser la liste des méthodes BeautifulSoup / Basic | Scraping J'ai essayé d'utiliser AWS Lambda avec Python. Explication du chargement de la bibliothèque et précautions pour les variables d'environnement.

Recommended Posts

[LINE Notify API, AWS] Envoyez régulièrement des tweets bourdonnants au groupe LINE
J'ai essayé de supprimer régulièrement les mauvais tweets avec l'API AWS Lambda + Twitter
Envoyer un message à LINE avec Python (LINE Notify)
Envoyer les images prises avec ESP32-WROOM-32 vers AWS (API Gateway → Lambda → S3)
[Python] Créer une API pour envoyer Gmail
Publiez régulièrement sur Twitter en utilisant AWS lambda!
Envoyer des données à l'API DRF avec Vue.js
[LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE
Création d'un LINE BOT pour notifier d'autres concours AtCoder à l'aide d'AWS