[PYTHON] [LINE Notify API, AWS] Senden Sie regelmäßig summende Tweets an die Gruppe LINE

Was diesmal zu machen

Für die Gruppe LINE mit Freunden Wir werden einen Mechanismus erstellen, um summende Tweets zur geplanten Zeit zu senden.

LINE Notify API

Durch die Verknüpfung mit LINE Notify können LINE-Benutzer problemlos Benachrichtigungen über Dienste erhalten.

[Quelle]: LINE Notify

Es scheint.

Wenn Sie es tatsächlich verwenden, erhalten Sie eine Nachricht von einem Konto namens "LINE Notify" wie folgt.

image.png

Vorbereitung für LINE Notify

Befolgen Sie die Schritte unter dem folgenden Link, um LINE Notify einsatzbereit zu machen. [Super einfach] Versuchen Sie es mit LINE notify

Holen Sie sich summende Tweets

Ich habe mich gefragt, ob ich mit den summenden Tweets mit der "Twitter API" mein Bestes geben soll. Es schien schmerzhaft zu sein, also beschloss ich, von der bestehenden Ranking-Site zu kratzen.

Twitter-Beliebtheits-Ranking-Site → [TwTimez]

Code (Python)

import requests
from bs4 import BeautifulSoup

#Holen Sie sich die kräftigsten Tweets
def bazz_get():
    #URL für den Zugriff
    url = "http://www.twtimez.net/index.html"

    #Greifen Sie auf die URL zu
    html = requests.get(url)

    #Behandeln Sie HTML mit schöner Suppe
    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 "Eine Art Fehler"

#Senden Sie eine Nachricht an Line
def send_line(Bazz):

    notify_url = "https://notify-api.line.me/api/notify"
    token = "Zugangstoken"
    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())

Schaben

Was interessiert dich? Es ist mein erstes Mal. Es war ein bisschen, wenn ich "Schöne Suppe" benutzte.

An den folgenden Stellen ziehe ich Klassen und Tags mit den gewünschten Informationen aus HTML ab.

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

Suchen Sie die Klasse oder das Tag mit den gewünschten Informationen, indem Sie die mit GIF beschriebenen Schritte ausführen. Sie können das HTML der Seite anzeigen, indem Sie die Taste "F12" drücken.

F12.gif

Wenn bisher kein Problem vorliegt, wird nach der Ausführung eine Nachricht an LINE gesendet.

AWS Wir werden einen Mechanismus erstellen, um eine Nachricht automatisch zu senden, wenn sie mithilfe von AWS-Diensten geplant wird.

Vielleicht ist es kostenlos. Wenn Sie später eine Rechnung erhalten, zahlen Sie die Studiengebühr und hören Sie schnell auf.

AWS Lambda

AWS Lambda-Kommentarvideo

Sie können Ihren Code ausführen, ohne an den Server denken zu müssen. Sie zahlen nur für die tatsächliche Rechenzeit, die Sie verwenden.

Es scheint. Ich werde den Code, den ich dieses Mal geschrieben habe, hier einfügen.

Amazon CloudWatch

Kommentarvideo zu Amazon Cloud Watch

Beobachtbarkeit von AWS-Ressourcen und -Anwendungen in AWS und vor Ort

Es scheint. Ich weiß es nicht. Kurz gesagt, ich denke, Sie können leicht etwas überwachen, was Sie gemacht haben, und verschiedene Dinge tun. Auf Lambda erstellte Funktionen können regelmäßig zur eingestellten Zeit ausgeführt werden.

Tatsächliches Verfahren

Melden Sie sich bei der Lambda-Konsole an und wählen Sie Funktion erstellen Geben Sie ihm einen Namen und fahren Sie mit dem nächsten fort.

AWSAddTrigger.PNG

Es scheint, dass Sie jeden Ordner mit ~~ Zip hochladen können, Ich habe nicht so viel gemacht, also kopiere ich den obigen Code und füge ihn in die Funktion ein. ~~

Es hat nicht funktioniert, weil ich ein Modul verwendet habe. Darüber hinaus müssen Sie Ihren Code hinzufügen oder ändern.

Laden Sie den Code auch als ".zip-Datei" hoch, anstatt "den Code inline zu bearbeiten".

Code für AWS geändert


import requests
from bs4 import BeautifulSoup


def bazz_get():
    #URL für den Zugriff
    url = "http://www.twtimez.net/index.html"

    #Greifen Sie auf die URL zu
    html = requests.get(url)

    #Behandeln Sie HTML mit schöner Suppe
    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 "Eine Art Fehler"


def send_line(Bazz):

    notify_url = "https://notify-api.line.me/api/notify"
    token = "Zugangstoken"
    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())

Unten ist die Funktion, die tatsächlich von Lambda aufgerufen wird. Es wäre schön gewesen, ein separates Skript zu haben, das es nur ausführt. Es funktioniert gut und ich habe keine Pläne, es in Zukunft zu erweitern, also habe ich Folgendes getan. Argumente sind erforderlich, um es mit Lambda aufzurufen.


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

Schreiben Sie den Python-Skriptnamen und den Methodennamen, den Sie aufrufen möchten, in den Upload-Ziel-Handler, indem Sie sie mit . verbinden.

BuzzNotify.PNG

Laden Sie die modulierte Zip-Datei auf Lambda hoch

Speichern Sie das Modul zunächst in einem beliebigen Verzeichnis.

Wechseln Sie zunächst in das Verzeichnis, das Sie speichern möchten.

An der Eingabeaufforderung ausführen


CD jedes Verzeichnis

Speichern Sie danach das in Python Script verwendete Modul im aktuellen Verzeichnis.

An der Eingabeaufforderung ausführen


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

Als nächstes kommt die Zip-Komprimierung. Komprimieren Sie das Python-Skript und das Modul, das Sie hochladen möchten. Wenn Sie eine Zip-Komprimierung für den Ordner durchführen, in dem alles gespeichert ist, wird ein zusätzlicher Ordner für eine Ebene erstellt. Wählen Sie alle aus und komprimieren Sie sie wie ein GIF-Bild.

Zip.gif

CloudWatch Events

Wählen Sie als Nächstes "Trigger hinzufügen", um mit CloudWatch zu arbeiten. (Sie können sich auch bei der CloudWatch-Konsole anmelden und separate Einstellungen vornehmen.)

AWRTrigger.PNG

Planen Sie Einstellungen

Unter dem folgenden Link erfahren Sie, wie Sie den Zeitplan festlegen (wann der Code ausgeführt werden soll). Schedule Expressions for Rules

Melden Sie sich über die Konsole bei CloudWatch an Wenn Sie eine neue Regel erstellen, sieht diese wie im Bild unten aus. Es ist leicht zu verstehen, da es zeigt, wann es ausgeführt werden muss.

CloudWatch.PNG

UTC (GMT) und JST

Wie Sie aus dem obigen Bild sehen können, wird das Wort GMT nach der Ausführungszeit geschrieben.

Es scheint, dass es in Japan einen Unterschied von 9 Stunden zur Zeit gibt. Es scheint also nutzlos zu sein, wenn Sie die Zeit nicht unter Berücksichtigung des Zeitunterschieds einstellen.

[Referenzlink]: [AWS] Erläuterung des Formats des CloudWatch-Cron-Ausdrucks oder des Ratenausdrucks

Eindrücke von allen in Group LINE

Alle waren voll Shikato. Warum?


Postskriptum 2019/12/07

Tatsächlich sind Tweets mit einer großen Anzahl von RTs und Favoriten alle vom Kampagnentyp. .. .. Ich war wütend, weil Lawsons RT-Kampagne jeden Tag zur Gruppenlinie floss.

BazzLine.PNG

Referenzlink

Programm, das Ihnen am Morgen auf LINE (Python) beibringt, was Sie wissen möchten [Python] Verwendung der BeautifulSoup / Basic-Methodenliste | Scraping Ich habe versucht, AWS Lambda mit Python zu verwenden. Erläuterung des Ladens der Bibliothek und Vorsichtsmaßnahmen für Umgebungsvariablen.

Recommended Posts

[LINE Notify API, AWS] Senden Sie regelmäßig summende Tweets an die Gruppe LINE
Ich habe versucht, schlechte Tweets regelmäßig mit der AWS Lambda + Twitter API zu löschen
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Senden Sie mit ESP32-WROOM-32 aufgenommene Bilder an AWS (API Gateway → Lambda → S3).
[Python] API zum Senden von Google Mail erstellen
Poste regelmäßig mit AWS Lambda auf Twitter!
Senden Sie Daten mit Vue.js an die DRF-API
[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
Erstellen eines LINE BOT, um zusätzliche AtCoder-Wettbewerbe mit AWS zu benachrichtigen