[PYTHON] Créez un programme qui saisit et envoie automatiquement la température corporelle tous les matins [Note]

introduction

Ceci est le premier message. Cette fois, je devais entrer ma température corporelle sur Google Forms tous les jours à l'école, ce qui était ennuyeux. Non, je n'ai pas le temps de le saisir, j'ai donc créé un programme qui l'envoie au hasard entre 6h00 et 8h30 tous les jours, et qui envoie également n'importe quelle température corporelle entre 36,4 et 36,6. C'était.

Environnement d'exécution

--Série Python3

Sujet principal

Je l'ai fait en me référant à l'article ici. De plus, j'omettrai cette fois l'acquisition du numéro d'identification de la question du formulaire Google.

Créer un fichier json

Dans form_url, entrez l'URL du formulaire soumis et dans ʻentry, entrez le numéro d'identification de la question obtenue. Veuillez l'augmenter comme ʻans_7 en fonction du nombre de questions. Dans ʻoutput, écrivez la réponse à la question. Les valeurs de ʻans_1 et ʻans_4` changent tous les jours, alors entrez les valeurs appropriées. Ici, «Aucun» est saisi comme il convient.

cfg.json



{
    "form_url": "https://docs.google.com/forms/d/e/1FAIpQLSc93lIQ3Aob93cwjx6HSRbuC8V7NT59UfUPhlw6AlkGtZ6CXQ/",
    "entry": {
        "ans_1": 964244932,
        "ans_2": 888214820,
        "ans_3": 23055831,
        "ans_4": 10832147,
        "ans_5": 1720496078,
        "ans_6": 2017707777

    },
    "output":{
        "ans_1": "None",
        "ans_2": "2A",
        "ans_3": "8",
        "ans_4": "None",
        "ans_5": "Je vais bien",
        "ans_6": "Pas dedans"
    }
}

La création d'un fichier json ressemble à ceci.

Création du programme principal

Cette fois, en coopération avec Discord, nous enverrons des journaux indiquant s'il a été envoyé correctement à un canal Discord spécifique. Le programme terminé ressemble à ceci.

bot.py


# -*- coding: utf-8 -*-
import discord
from discord import Embed
from discord.ext import tasks
from datetime import datetime
import os
import requests
import random
import json

TOKEN = os.environ["TOKEN"]
client = discord.Client(intents=discord.Intents.all())


#La prochaine heure de transmission programmée est 06:00-8:Configuré aléatoirement jusqu'à 30
def setting_time_set():
    setting_time_h = random.randint(6, 8)
    if setting_time_h == 8:
        setting_time_m = random.randint(0, 30)
    else:
        setting_time_m = random.randint(0, 59)

    setting_time = f"{setting_time_h:02}:{setting_time_m:02}"
    return setting_time


def set_tem():
    choice_list = ["36.4", "36.5", "36.6"]
    choice_ans = random.choice(choice_list)  # 36.4-36.Sélectionnez au hasard jusqu'à 6
    return choice_ans


time_set = setting_time_set()  #Définir la première heure de transmission suivante au démarrage
tem_set = set_tem()


#Fonction d'intégration
async def template_embed(message, title, name_1, name_2, value_1, color, description=None):
    ch = client.get_channel(message)
    embed_time = datetime.now().strftime("%Y année%m mois%jour j-%H:%M")
    embed = Embed(title=title, description=description, color=color)
    embed.add_field(name=name_1, value=f"{value_1}", inline=True)
    embed.add_field(name=name_2, value=f"{tem_set}", inline=True)
    embed.set_footer(text=f"{embed_time}")
    await ch.send("<@Identifiant d'utilisateur>")
    await ch.send(embed=embed)


@client.event
async def on_ready():
    await template_embed(message=768274673984208926, title="Journal de démarrage", name_1="Prochaine heure de transmission programmée", value_1=time_set,
                         name_2="Température corporelle à envoyer", color=discord.Color.orange())


@client.event
async def on_message(message):
    if message.content == "/reset":
        await reset(message)

    if message.content == "/now":
        await now(message)


async def reset(message):
    global time_set
    global tem_set

    time_set = setting_time_set()
    tem_set = set_tem()

    await template_embed(message=768274673984208926, title="Réinitialiser", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                         value_1=time_set, color=discord.Color.purple())
    await template_embed(message=message.channel.id, title="Réinitialiser",  name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                         value_1=time_set, color=discord.Color.purple())


async def now(message):
    await template_embed(message=message.channel.id, title="situation actuelle", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                         value_1=time_set, color=discord.Color.greyple())


@tasks.loop(seconds=60)
async def loop():
    global time_set
    global tem_set

    now_t = datetime.now().strftime('%H:%M')
    print(f"Heure actuelle:{now_t}/ Heure de transmission programmée:{time_set}/ Température corporelle de transmission programmée:{tem_set}")

    if now_t == time_set:  #Est-ce l'heure de transmission programmée?
        dt_now = datetime.now().strftime("%Y-%m-%d")  #Heure actuelle 2020-01-Obtenu sous la forme de 01, dt_Stocker maintenant

        file_name = "cfg.json"
        with open(file_name, "r", encoding="utf-8")as f:
            cfg = json.load(f)
            cfg["output"]["ans_1"] = f"{dt_now}"
            cfg["output"]["ans_4"] = f"{tem_set}"

            params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
            res = requests.get(cfg["form_url"] + "formResponse", params=params)

        if res.status_code == 200:
            await template_embed(message=768274673984208926, title="Informations du journal", description=f"[URL]({res.url})",
                                 name_1="L'état d'achèvement", name_2="Température corporelle transmise", value_1="Réussi", color=discord.Color.green())
        else:
            res.raise_for_status()
            await template_embed(message=768274673984208926, title="Informations du journal", name_1="L'état d'achèvement", name_2="Température corporelle à envoyer",
                                 value_1="Une erreur est survenue.", color=discord.Color.red())

    else:
        if now_t == "21:00":
            time_set = setting_time_set()
            tem_set = set_tem()
            await template_embed(message=768274673984208926, title="Notification de mise à jour de l'heure de transmission", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                                 value_1=time_set, color=discord.Color.blue())


loop.start()
client.run(TOKEN)

Je vais vous expliquer étape par étape. Tout d'abord, en ce qui concerne cette partie, l'heure de transmission est émise de manière aléatoire entre 6h00 et 8h30 et est retournée à setting_time, puis la température corporelle est choisie au hasard et renvoyée à choice_ans. Dans le processus ci-dessous, le temps de transmission et la température corporelle sont réglés au premier démarrage. De plus, le traitement en dessous est le traitement de génération de Embed.

#La prochaine heure de transmission programmée est 06:00-8:Configuré aléatoirement jusqu'à 30
def setting_time_set():
    setting_time_h = random.randint(6, 8)
    if setting_time_h == 8:
        setting_time_m = random.randint(0, 30)
    else:
        setting_time_m = random.randint(0, 59)

    setting_time = f"{setting_time_h:02}:{setting_time_m:02}"
    return setting_time


def set_tem():
    choice_list = ["36.4", "36.5", "36.6"]
    choice_ans = random.choice(choice_list)  # 36.4-36.Sélectionnez au hasard jusqu'à 6
    return choice_ans


time_set = setting_time_set()  #Définir la première heure de transmission suivante au démarrage
tem_set = set_tem()


#Fonction d'intégration
async def template_embed(message, title, name_1, name_2, value_1, color, description=None):
    ch = client.get_channel(message)
    embed_time = datetime.now().strftime("%Y année%m mois%jour j-%H:%M")
    embed = Embed(title=title, description=description, color=color)
    embed.add_field(name=name_1, value=f"{value_1}", inline=True)
    embed.add_field(name=name_2, value=f"{tem_set}", inline=True)
    embed.set_footer(text=f"{embed_time}")
    await ch.send("<@Identifiant d'utilisateur>")
    await ch.send(embed=embed)

prochain

Je vais expliquer le traitement principal.


@client.event
async def on_ready():
    await template_embed(message=768274673984208926, title="Journal de démarrage", name_1="Prochaine heure de transmission programmée", value_1=time_set,
                         name_2="Température corporelle à envoyer", color=discord.Color.orange())

Au démarrage, le journal de démarrage sera envoyé à un canal spécifique.

@client.event
async def on_message(message):
    if message.content == "/reset":
        await reset(message)

    if message.content == "/now":
        await now(message)


async def reset(message):
    global time_set
    global tem_set

    time_set = setting_time_set()
    tem_set = set_tem()

    await template_embed(message=768274673984208926, title="Réinitialiser", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                         value_1=time_set, color=discord.Color.purple())
    await template_embed(message=message.channel.id, title="Réinitialiser",  name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                         value_1=time_set, color=discord.Color.purple())


async def now(message):
    await template_embed(message=message.channel.id, title="situation actuelle", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                         value_1=time_set, color=discord.Color.greyple())

Ici, le traitement de la commande de réinitialisation qui peut réinitialiser le temps de transmission et la température corporelle et la commande qui permet de vérifier l'état actuel.

@tasks.loop(seconds=60)
async def loop():
    global time_set
    global tem_set

    now_t = datetime.now().strftime('%H:%M')  #Obtenez l'heure actuelle
    print(f"Heure actuelle:{now_t}/ Heure de transmission programmée:{time_set}/ Température corporelle de transmission programmée:{tem_set}")

    if now_t == time_set:  #Est-ce l'heure de transmission programmée?
        dt_now = datetime.now().strftime("%Y-%m-%d")  #Heure actuelle 2020-01-Obtenu sous la forme de 01, dt_Stocker maintenant

        file_name = "cfg.json"
        with open(file_name, "r", encoding="utf-8")as f:
            cfg = json.load(f)
            cfg["output"]["ans_1"] = f"{dt_now}"  #Ans aujourd'hui, année, mois, jour_Écraser 1
            cfg["output"]["ans_4"] = f"{tem_set}"  #Température corporelle et_Écraser 4

            params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
            res = requests.get(cfg["form_url"] + "formResponse", params=params)

        if res.status_code == 200:  #Lorsqu'il est envoyé normalement
            await template_embed(message=768274673984208926, title="Informations du journal", description=f"[URL]({res.url})",
                                 name_1="L'état d'achèvement", name_2="Température corporelle transmise", value_1="Réussi", color=discord.Color.green())
        else:  #Si vous ne pouviez pas envoyer
            res.raise_for_status()
            await template_embed(message=768274673984208926, title="Informations du journal", name_1="L'état d'achèvement", name_2="Température corporelle à envoyer",
                                 value_1="Une erreur est survenue.", color=discord.Color.red())

    else:
        if now_t == "21:00":
            time_set = setting_time_set()
            tem_set = set_tem()
            await template_embed(message=768274673984208926, title="Notification de mise à jour de l'heure de transmission", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
                                 value_1=time_set, color=discord.Color.blue())

Ici, tasks.loop () est utilisé pour vérifier l'heure actuelle et l'heure de transmission programmée à intervalles de 60 secondes, et si elles correspondent, le traitement de la transmission est effectué. S'ils ne correspondent pas, l'heure actuelle et l'heure de réinitialisation sont vérifiées pour voir si elles correspondent, et s'il s'agit de l'heure de réinitialisation, un traitement de réinitialisation est effectué.

finalement

Veuillez noter que c'est un sacré bordel car c'est le premier post. Le code complété est posté sur Github, alors n'hésitez pas à l'utiliser .... Vers la fin, j'ai considérablement omis l'explication, mais j'espère qu'elle sera utile.

référence

Gagnez un putain de questionnaire avec le robot de réponse automatique Google Form (Python3)

Recommended Posts

Créez un programme qui saisit et envoie automatiquement la température corporelle tous les matins [Note]
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Publier et utiliser un programme qui collecte automatiquement les images du visage de personnes spécifiées
Nogizaka46 Un programme qui enregistre automatiquement les images de blog
Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
Comment démarrer le PC à une heure fixe chaque matin et exécuter le programme python
Créez le code qui renvoie "A et prétendant B" en python
Un programme qui appuie et relâche simplement la touche Échap