[PYTHON] Erstellen Sie ein Programm, das jeden Morgen automatisch die Körpertemperatur eingibt und sendet [Hinweis]

Einführung

Dies ist der erste Beitrag. Dieses Mal musste ich jeden Tag in der Schule meine Körpertemperatur in Google Forms eingeben, was ärgerlich war ... Nein, ich habe keine Zeit, es einzugeben, also habe ich ein Programm erstellt, das es jeden Tag zufällig zwischen 6:00 und 8:30 Uhr sendet und auch die Körpertemperatur zwischen 36,4 und 36,6 sendet. Es war.

Ausführungsumgebung

Hauptthema

Ich habe es unter Bezugnahme auf den Artikel hier gemacht. Außerdem werde ich diesmal auf die Erfassung der Identifikationsnummer der Google Form-Frage verzichten.

Erstellen einer JSON-Datei

Geben Sie in "form_url" die URL des übermittelten Formulars und in "entry" die Identifikationsnummer der erhaltenen Frage ein. Erhöhen Sie es wie "ans_7" entsprechend der Anzahl der Fragen. Schreiben Sie in "Ausgabe" die Antwort auf die Frage. Die Werte von "ans_1" und "ans_4" ändern sich jeden Tag. Geben Sie daher die entsprechenden Werte ein. Hier wird "Keine" entsprechend eingegeben.

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": "es geht mir gut",
        "ans_6": "Nicht in"
    }
}

Das Erstellen einer JSON-Datei sieht folgendermaßen aus.

Hauptprogramm erstellen

Dieses Mal senden wir in Zusammenarbeit mit Discord Protokolle, z. B. ob sie ordnungsgemäß an einen bestimmten Discord-Kanal gesendet wurden. Das abgeschlossene Programm sieht so aus.

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())


#Die nächste geplante Übertragungszeit ist 06:00-8:Nach dem Zufallsprinzip auf 30 einstellen
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.Wählen Sie nach dem Zufallsprinzip bis zu 6 aus
    return choice_ans


time_set = setting_time_set()  #Stellen Sie die erste nächste Übertragungszeit beim Start ein
tem_set = set_tem()


#Funktion einbetten
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 Jahr%m Monat%d Tag-%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("<@Benutzeridentifikation>")
    await ch.send(embed=embed)


@client.event
async def on_ready():
    await template_embed(message=768274673984208926, title="Startprotokoll", name_1="Nächste geplante Übertragungszeit", value_1=time_set,
                         name_2="Körpertemperatur gesendet werden", 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="Zurücksetzen", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                         value_1=time_set, color=discord.Color.purple())
    await template_embed(message=message.channel.id, title="Zurücksetzen",  name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                         value_1=time_set, color=discord.Color.purple())


async def now(message):
    await template_embed(message=message.channel.id, title="momentane Situation", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                         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"Aktuelle Uhrzeit:{now_t}/ Geplante Übertragungszeit:{time_set}/ Geplante Getriebekörpertemperatur:{tem_set}")

    if now_t == time_set:  #Ist es die geplante Übertragungszeit?
        dt_now = datetime.now().strftime("%Y-%m-%d")  #Aktuelle Zeit 2020-01-Erhalten in Form von 01, dt_Jetzt speichern

        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="Protokollinformationen", description=f"[URL]({res.url})",
                                 name_1="Abschlussstatus", name_2="Übertragene Körpertemperatur", value_1="Erfolgreich", color=discord.Color.green())
        else:
            res.raise_for_status()
            await template_embed(message=768274673984208926, title="Protokollinformationen", name_1="Abschlussstatus", name_2="Körpertemperatur gesendet werden",
                                 value_1="Ein Fehler ist aufgetreten.", 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="Benachrichtigung über die Aktualisierung der Übertragungszeit", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                                 value_1=time_set, color=discord.Color.blue())


loop.start()
client.run(TOKEN)

Ich werde Schritt für Schritt erklären. Zunächst wird in Bezug auf diesen Teil die Übertragungszeit zufällig zwischen 6:00 und 8:30 ausgegeben und auf "Einstellungszeit" zurückgesetzt, und dann wird die Körpertemperatur zufällig ausgewählt und auf "Auswahl_ans" zurückgesetzt. Im folgenden Prozess werden die Übertragungszeit und die Körpertemperatur beim ersten Start eingestellt. Darüber hinaus ist die Verarbeitung darunter die Generierungsverarbeitung von Embed.

#Die nächste geplante Übertragungszeit ist 06:00-8:Nach dem Zufallsprinzip auf 30 einstellen
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.Wählen Sie nach dem Zufallsprinzip bis zu 6 aus
    return choice_ans


time_set = setting_time_set()  #Stellen Sie die erste nächste Übertragungszeit beim Start ein
tem_set = set_tem()


#Funktion einbetten
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 Jahr%m Monat%d Tag-%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("<@Benutzeridentifikation>")
    await ch.send(embed=embed)

Nächster

Ich werde die Hauptverarbeitung erklären.


@client.event
async def on_ready():
    await template_embed(message=768274673984208926, title="Startprotokoll", name_1="Nächste geplante Übertragungszeit", value_1=time_set,
                         name_2="Körpertemperatur gesendet werden", color=discord.Color.orange())

Beim Start wird das Startprotokoll an einen bestimmten Kanal gesendet.

@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="Zurücksetzen", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                         value_1=time_set, color=discord.Color.purple())
    await template_embed(message=message.channel.id, title="Zurücksetzen",  name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                         value_1=time_set, color=discord.Color.purple())


async def now(message):
    await template_embed(message=message.channel.id, title="momentane Situation", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                         value_1=time_set, color=discord.Color.greyple())

Hier die Verarbeitung des Rücksetzbefehls, mit dem die Übertragungszeit und die Körpertemperatur zurückgesetzt werden können, und der Befehl, mit dem der aktuelle Status überprüft werden kann.

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

    now_t = datetime.now().strftime('%H:%M')  #Holen Sie sich die aktuelle Zeit
    print(f"Aktuelle Uhrzeit:{now_t}/ Geplante Übertragungszeit:{time_set}/ Geplante Getriebekörpertemperatur:{tem_set}")

    if now_t == time_set:  #Ist es die geplante Übertragungszeit?
        dt_now = datetime.now().strftime("%Y-%m-%d")  #Aktuelle Zeit 2020-01-Erhalten in Form von 01, dt_Jetzt speichern

        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 heutiges Jahr, Monat, Tag_Überschreiben 1
            cfg["output"]["ans_4"] = f"{tem_set}"  #Körpertemperatur ans_Überschreiben 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:  #Bei normalem Versand
            await template_embed(message=768274673984208926, title="Protokollinformationen", description=f"[URL]({res.url})",
                                 name_1="Abschlussstatus", name_2="Übertragene Körpertemperatur", value_1="Erfolgreich", color=discord.Color.green())
        else:  #Wenn Sie nicht senden könnten
            res.raise_for_status()
            await template_embed(message=768274673984208926, title="Protokollinformationen", name_1="Abschlussstatus", name_2="Körpertemperatur gesendet werden",
                                 value_1="Ein Fehler ist aufgetreten.", 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="Benachrichtigung über die Aktualisierung der Übertragungszeit", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                                 value_1=time_set, color=discord.Color.blue())

Hier wird "task.loop ()" verwendet, um die aktuelle Zeit und die geplante Übertragungszeit in Intervallen von 60 Sekunden zu überprüfen, und wenn sie übereinstimmen, wird die Übertragungsverarbeitung durchgeführt. Wenn sie nicht übereinstimmen, werden die aktuelle Zeit und die Rücksetzzeit überprüft, um festzustellen, ob sie übereinstimmen. Wenn es sich um die Rücksetzzeit handelt, wird die Rücksetzverarbeitung durchgeführt.

Schließlich

Bitte beachten Sie, dass es ein ziemliches Durcheinander ist, da es der erste Beitrag ist. Der vollständige Code wird auf Github veröffentlicht. Sie können ihn also gerne verwenden. Gegen Ende habe ich die Erklärung erheblich weggelassen, aber ich hoffe, dass sie hilfreich sein wird.

Referenz

Gewinnen Sie einen verdammten Fragebogen mit Google Form Auto-Answer Bot (Python3)

Recommended Posts

Erstellen Sie ein Programm, das jeden Morgen automatisch die Körpertemperatur eingibt und sendet [Hinweis]
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Veröffentlichen und Verwenden eines Programms, das automatisch Gesichtsbilder bestimmter Personen sammelt
Nogizaka46 Ein Programm, das Blog-Bilder automatisch speichert
Ein einfaches System, das automatisch mit Objekterkennung aufnimmt und an LINE sendet
So starten Sie den PC jeden Morgen zu einer festgelegten Zeit und führen das Python-Programm aus
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Ein Programm, das nur die Esc-Taste drückt und loslässt