[PYTHON] LINE Bot, der Sie über die interessierenden Aktien informiert

Wir haben einen BOT erstellt, der Sie über Probleme informiert, die eine goldene Kreuzung zwischen den gleitenden 75-Tage- und 200-Tage-Durchschnittswerten aufweisen, die häufig in Aktien verwendet werden. Der Grund, warum "75 Tage" und "200 Tage" in Anmerkung beschrieben sind, schauen Sie bitte nach.

Hier werde ich schreiben, wie es implementiert wurde. Der Quellcode lautet GitHub Ist veröffentlicht. Der Unterschied zu anderen Personen besteht darin, dass der Quellcode sehr einfach ist, da er sich auf die Nachrichtensendefunktion von der Bot-Seite konzentriert.

Was ich machen wollte

Die golden gekreuzten Aktien werden in Stock Tech veröffentlicht. Die Geschäftstage der Börse werden jeden Tag aktualisiert, aber ich vergesse nur, sie mir anzusehen, und dachte, es wäre praktisch, wenn es einen Bot gäbe, der mich automatisch benachrichtigt.

Der Fluss ist

  1. Erhalten Sie [stock tech] durch Scraping (https://www.kabutec.jp/contents/compare/com.php?col1=8&scol1=0&col2=26&scol2=0&col3=27&scol3=0&market=0).
  2. Senden Sie eine Nachricht auf LINE. ist. Ich wollte es verlassen und bedienen, also beschloss ich, es auf Heroku laufen zu lassen.

Quellcode

Der Code wurde in Python implementiert. Es ist grob unterteilt in "Scraping" und "Senden von Nachrichten über LINE". Scraping wird beurteilt, weil die Börse samstags, sonntags und an Feiertagen geschlossen ist.

import os
import datetime
import re

from bs4 import BeautifulSoup
import jpholiday
from linebot import LineBotApi
from linebot.exceptions import LineBotApiError
from linebot.models import TextSendMessage
import requests

KABUTEC_GC_URL = "https://www.kabutec.jp/contents/compare/com.php?col1=8&scol1=0&col2=26&scol2=0&col3=27&scol3=0&market=0"


def get_today_list():
    """
Erwerben Sie die Marke GC von Stock Tech.
    """
    res = requests.get(KABUTEC_GC_URL)
    soup = BeautifulSoup(res.text, "html.parser")
    li = soup.find_all(href=re.compile("kabutec.jp/company/fs_"))
    company_list = list(map(lambda item: item.contents[0], li))
    return company_list


def get_weekday():
    """
Machen Sie an Wochentagen ein Urteil.
    Returns
    -------
    ret : boolean
        True :Wochentags
        False :Urlaub
    """
    dt_jst = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9)))
    if dt_jst.weekday() == 5 or dt_jst.weekday() == 6:
        ret = False
    else:
        if jpholiday.is_holiday(dt_jst.date()):
            ret = False
        else:
            ret = True
    return ret


if __name__ == "__main__":
    if get_weekday():
        li = get_today_list()
        line_bot_api = LineBotApi(os.environ["LINE_CHANNEL_ACCESS_TOKEN"])
        msg = "Die heutige Marke GC{num}Es ist eine Marke.\n{li}".format(num=len(li), li="\n".join(li))
        print(msg)
        messages = TextSendMessage(text=msg)
        try:
            line_bot_api.broadcast(messages=messages)
        except LineBotApiError:
            pass
    else:
        print("Ich bin heute dienstfrei.")

Der LINE Bot-Teil war mit der Messaging-API von LINE sehr einfach zu schreiben. Beziehen Sie "Channel Access Token (Long Term)" von LINE Developers und legen Sie "LINE_CHANNEL_ACCESS_TOKEN" als Umgebungsvariable fest.

Andere verwenden Flask, um von LINE gesendete Nachrichten zu empfangen, aber wenn Sie nur von der Bot-Seite senden, benötigen Sie Flask auch nicht. Ich verwende line_bot_api.broadcast, um an alle Benutzer zu senden, die mit Bot befreundet sind.

        line_bot_api = LineBotApi(os.environ["LINE_CHANNEL_ACCESS_TOKEN"])
        msg = "Die heutige Marke GC{num}Es ist eine Marke.\n{li}".format(num=len(li), li="\n".join(li))
        print(msg)
        messages = TextSendMessage(text=msg)
        try:
            line_bot_api.broadcast(messages=messages)
        except LineBotApiError:
            pass

Bei der Verwendung von Broadcast müssen Sie auf die Anzahl der gesendeten Nachrichten achten. Die LINE-API selbst kann kostenlos verwendet werden, aber die Anzahl der Nachrichten, die kostenlos gesendet werden können, beträgt bis zu 1000 Nachrichten pro Monat. Da die Börse am 20. des Monats geöffnet ist und Sie mehr als 50 Bot-Freunde haben, können Sie am Monatsende nicht senden.

Operation

Es wird in Heroku betrieben. Wenn Ihr Bot jeden Tag wie zu dieser Zeit zu einer festen Zeit arbeitet, benötigen Sie in Heroku nur zwei Einstellungen.

Umgebungsvariablen einstellen

Setzen Sie LINE_CHANNEL_ACCESS_TOKEN in Herokus Einstellungen auf Config Vars. Kanalzugriffstoken können unter "Kanalzugriffstoken (langfristig)" in LINE Developers abgerufen werden.

image.png

Scheduler-Einstellungen

Fügen Sie Heroku Scheduler aus installierten Add-Ons hinzu. Heroku Scheduler selbst kann kostenlos verwendet werden, Sie müssen jedoch eine Kreditkarte registrieren. Wenn Sie beispielsweise bei diesem Programm den Befehl "python main.py" als Zeitplan registrieren, wird er zum gewünschten Zeitpunkt verschoben und eine Nachricht vom Bot gesendet. Der Zeitplan selbst scheint einen Fehler von mehreren Minuten zu haben. Seien Sie also vorsichtig mit Programmen, die eine strenge Zeitdefinition erfordern.

image.png

Recommended Posts

LINE Bot, der Sie über die interessierenden Aktien informiert
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Erklären Sie den Mechanismus von Linux, den Sie nicht unerwartet kennen
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Dies und das der Einschlussnotation.
Sie suchen in der Befehlszeile nach commandlinefu
Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Erstellen eines LINE BOT, um zusätzliche AtCoder-Wettbewerbe mit AWS zu benachrichtigen
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
LINE Bot hat mir das Scraping-Ergebnis der IT-Trendinformationen gesendet [LINE Messaging API]
[Bot dekodieren] Ich habe versucht, einen Bot zu erstellen, der mir den Rassenwert von Pokemon angibt
Überprüfen Sie den Typ der von Ihnen verwendeten Variablen
zsh-Einstellungen, die die Verwendung von virtualenv erleichtern
Ein Liner, der die Farben von Matplotlib auflistet
Die Geschichte des Fehlinterpretierens der Swap-Zeile des obersten Befehls
Ein Programm, das den Betriebszustand von vollautomatischen Anlagenfotografieanlagen mitteilt
[Ansible] Beispiel für ein Playbook, das der ersten Zeile der Datei eine Zeichenkette hinzufügt
Programm, das die CSV-Daten der Transaktionshistorie der SBI Securities-Aktie zusammenfasst [Python3]
Die weltweit am einfachsten zu verstehende Erklärung zur Herstellung von LINE BOT (1) [Kontoerstellung]
Artikel, der Ihnen hilft, den Kollisionsalgorithmus für starre Kugeln ein wenig zu verstehen