[PYTHON] LINE Bot qui vous informe des stocks d'intérêt

Nous avons créé un BOT qui vous informe sur LINE des problèmes qui présentent un croisement en or entre les moyennes mobiles de 75 jours et de 200 jours souvent utilisées dans les actions. La raison pour laquelle «75 jours» et «200 jours» sont décrits dans note, alors jetez un œil.

Ici, je vais écrire comment il a été mis en œuvre. Le code source est GitHub Est publié. La différence avec les autres est que le code source est très simple car il se concentre sur la fonction d'envoi de message du côté Bot.

Ce que je voulais faire

La marque Golden Crossed est publiée dans Stock Tech. Les jours ouvrables de la bourse sont mis à jour tous les jours, mais j'oublie juste d'aller le voir, alors j'ai pensé que ce serait pratique s'il y avait un Bot qui me préviendrait automatiquement.

Le flux est

  1. Obtenez [stock tech] en grattant (https://www.kabutec.jp/contents/compare/com.php?col1=8&scol1=0&col2=26&scol2=0&col3=27&scol3=0&market=0).
  2. Envoyez un message sur LINE. est. Je voulais le quitter et le faire fonctionner, alors j'ai décidé de le faire fonctionner sur Heroku.

Code source

Le code a été implémenté en Python. Il est grossièrement divisé en "scraping" et "envoi de messages avec LINE". Le raclage est jugé car la bourse est fermée les samedis, dimanches et jours fériés.

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():
    """
Acquérir la marque GC auprès de la technologie de stock.
    """
    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():
    """
Faites un jugement les jours de semaine.
    Returns
    -------
    ret : boolean
        True :Jours de la semaine
        False :vacances
    """
    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 = "La marque GC d'aujourd'hui{num}C'est une marque.\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("Je suis hors du devoir aujourd'hui.")

La partie LINE Bot était très simple à écrire à l'aide de l'API de messagerie de LINE. Obtenez "Channel Access Token (Long Term)" auprès de LINE Developers et définissez "LINE_CHANNEL_ACCESS_TOKEN" comme variable d'environnement.

D'autres utilisent Flask pour recevoir les messages envoyés par LINE, mais si vous envoyez simplement du côté Bot, vous n'avez pas besoin non plus de Flask. J'utilise line_bot_api.broadcast pour diffuser à tous les utilisateurs qui sont amis avec Bot.

        line_bot_api = LineBotApi(os.environ["LINE_CHANNEL_ACCESS_TOKEN"])
        msg = "La marque GC d'aujourd'hui{num}C'est une marque.\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

Lorsque vous utilisez la diffusion, vous devez faire attention au nombre de messages envoyés. L'API LINE elle-même peut être utilisée gratuitement, mais le nombre de messages pouvant être envoyés gratuitement peut atteindre 1000 messages / mois. Etant donné que la bourse est ouverte le 20 du mois, si vous avez plus de 50 amis Bot, vous ne pourrez pas envoyer à la fin du mois.

Opération

Il est exploité à Heroku. Si vous avez un Bot qui fonctionne à une heure fixe tous les jours comme cette heure, vous n'avez besoin que de deux paramètres dans Heroku.

Définition des variables d'environnement

Réglez LINE_CHANNEL_ACCESS_TOKEN sur Config Vars dans les paramètres d'Heroku. Les jetons d'accès aux canaux peuvent être obtenus à partir de «Jetons d'accès aux canaux (à long terme)» dans LINE Developers.

image.png

Paramètres du planificateur

Ajoutez Heroku Scheduler à partir des modules complémentaires installés. Heroku Scheduler lui-même est gratuit, mais vous devrez enregistrer une carte de crédit. Par exemple, dans le cas de ce programme, si vous enregistrez la commande python main.py comme planning, elle se déplacera à l'heure souhaitée et un message sera envoyé depuis le Bot. L'horaire lui-même semble avoir une erreur de plusieurs minutes, alors soyez prudent avec les programmes qui nécessitent une définition de l'heure stricte.

image.png

Recommended Posts

LINE Bot qui vous informe des stocks d'intérêt
Créez une application qui informe LINE de la météo tous les matins
J'ai fait un bot mou qui m'informe de la température
L'histoire de la création d'un Line Bot qui nous raconte le calendrier de la programmation du concours
Créez un BOT qui raccourcit l'URL Discord
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
Créez une application qui informe LINE de la météo tous les matins
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
Expliquer le mécanisme de Linux que vous ne connaissez pas de manière inattendue
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Ceci et celui de la notation d'inclusion.
Vous recherchez commandlinefu sur la ligne de commande
Création d'un bot Slack qui confirme et notifie à AWS Lambda la date d'expiration d'un certificat SSL
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
Création d'un LINE BOT pour notifier d'autres concours AtCoder à l'aide d'AWS
Créez un BOT qui affiche le nombre de personnes infectées dans le nouveau Corona
LINE Bot m'a envoyé le résultat du scraping des informations de tendance informatique [LINE Messaging API]
[Discode Bot] J'ai essayé de créer un Bot qui me dit la valeur de race de Pokemon
Vérifiez le type de variable que vous utilisez
paramètres zsh qui facilitent l'utilisation de virtualenv
Une doublure qui répertorie les couleurs de matplotlib
L'histoire de la mauvaise lecture de la ligne d'échange de la commande supérieure
Un programme qui notifie l'état de fonctionnement des équipements de photographie d'usine entièrement automatiques
[Ansible] Exemple de playbook qui ajoute une chaîne de caractères à la première ligne du fichier
Programme qui résume les données csv de l’historique des transactions de l’action SBI Securities [Python3]
L'explication la plus simple au monde sur la création de LINE BOT (1) [Account preparation]
Article qui vous aidera à comprendre un peu l'algorithme de collision de sphères rigides