Haben Sie Benachrichtigungen für andere Apps als LINE deaktiviert? Ich schneide. Ich wollte, dass Sie auf LINE benachrichtigt werden, wenn der Zeitplan für den AtCoder-Wettbewerb hinzugefügt wurde, und habe daher mit Mr JJ einen LINE BOT erstellt.
Wir suchen stündlich um 00:00 Uhr nach Wettbewerben und BOT benachrichtigt Sie, wenn neue Wettbewerbe hinzugefügt werden.
Es gibt auch eine Funktion, die beim Senden einer Nachricht zurückgegeben wird. (Bonus)
Sie können dem erstellten LINE BOT über die Schaltfläche unten Freunde hinzufügen.
Die gesamte Backend-Verarbeitung erfolgt in AWS (Amazon Web Services). Die Operation unter AWS kann in die folgenden zwei unterteilt werden.
Beschreibt die für jeden Abschnitt implementierten Funktionen.
Python3
def get_contests():
#Daten von URL abrufen
url = "https://atcoder.jp/home?lang=ja"
html_data = requests.get(url)
#HTML-Perspektive
soup = BeautifulSoup(html_data.text, "html.parser")
tags = ["upcoming", "recent"]
ret_dic = {}
for tag in tags:
div = soup.find("div", id="contest-table-"+tag)
table = div.find("table")
times = table.find_all("time")
titles = table.find_all("a")
ret_list = []
for i in range(len(times)):
dic = {}
dic["start"] = times[i].text
dic["title"] = titles[i*2+1].text
dic["url"] = "https://atcoder.jp" + titles[i*2+1].get("href")
ret_list.append(dic)
ret_dic[tag] = ret_list
return ret_dic
Dateninhalt | |
---|---|
Streit | null |
Rückgabewert | Daten für jeden Wettbewerb(Startzeit / Titel / URL)Liste der Wörterbücher mit |
In diesem BOT wird nur * ret_dic ["bevorstehende"] * verwendet.
Python3
def get_data_s3():
#Benachrichtigte Contest-JSON-Datei auf S3"contests.json"Wird geladen
client = boto3.client("s3")
try:
response = client.get_object(Bucket = "bucket_name", Key = "json_file_name")
except Exception as e:
print(e)
return json.loads(response["Body"].read().decode())
Dateninhalt | |
---|---|
Streit | null |
Rückgabewert | Wörterbuchdaten lesen JSON-Datei auf S3 |
Der Rückgabewert der Methode * get_object * ist ein Wörterbuch, und der Schlüssel "Body" enthält den Inhalt der Datei.
Python3
def put_data_s3(save_dic):
#S3-Uploader für neue notifizierte Contest-JSON-Dateien
text = json.dumps(save_dic, ensure_ascii = False)
s3 = boto3.resource("s3")
s3.Object("bucket_name", "json_file_name").put(Body = text)
Dateninhalt | |
---|---|
Streit | Zu speichernde Wörterbuchdaten |
Rückgabewert | null |
Wenn beim Konvertieren des Wörterbuchs in JSON-formatierten Text der Wert von * sure_ascii * auf False gesetzt ist, Die Japaner in der JSON-Datei sind leichter zu lesen und die Dateigröße kann reduziert werden.
Python3
def DatetimeToString(date):
if not isinstance(date, datetime.datetime):
date = datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S%z")
week_list = "Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag und Sonntag"
return f"{date.strftime('%m/%d')}({week_list[date.weekday()]}){date.strftime('%H:%M')}"
def MakeMessageText(event):
text = DatetimeToString(event["start"]) + "\n" + event["title"] + "wird gehalten!\n" + event["url"]
return text
def main(event, context):
line_bot_api = LineBotApi("channel_access_token")
message = MakeMessageText(event)
line_bot_api.broadcast(TextSendMessage(text=message))
# ***Verarbeitung zum Beenden der Hauptfunktion***
Erstellen Sie mit der Funktion * DatetimeToString * ein Nachrichtenformat für die Startzeit des Wettbewerbs Erstellt ein Format für Nachrichten, die von der Funktion * MakeMessageText * benachrichtigt werden sollen.
Sie können alle Ihre BOT-Freunde benachrichtigen, indem Sie einfach die * LineBotApi * -Klasse * Broadcast * -Methode von line-bot-sdk aufrufen. ..
Python3
def main(event, context):
handler = WebhookHandler("channel_secret")
line_bot_api = LineBotApi("channel_access_token")
body = event["body"]
#Antwortfunktion zum Handler hinzugefügt
@handler.add(MessageEvent)
def SendReply(line_event):
message = MakeReplyMessage(line_event.message.text)
line_bot_api.reply_message(line_event.reply_token, TextSendMessage(text=message))
try:
handler.handle(body, event["headers"]["X-Line-Signature"])
except #Fehlerbehandlung
# ***Verarbeitung zum Beenden der Hauptfunktion***
Die Funktion * MakeReplyMessage * gibt eine Antwortnachricht als Zeichenfolge entsprechend dem von BOT empfangenen Nachrichteninhalt zurück. Wir empfehlen insbesondere, die line-bot-sdk-Dokumentation für diesen Teil zu lesen.
Wir haben die Hauptfunktionen vorgestellt, die wir erstellt haben. Line-bot-sdk, das die Bedienung von BOT vereinfacht, ist sehr praktisch. Ich habe wenig Wissen über AWS und das Design ist ziemlich rau, aber wenn ich Lust dazu habe, werde ich in Zukunft Funktionen hinzufügen und verbessern. (vielleicht)
Recommended Posts