[PYTHON] Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.

Einführung

Ich bin verpflichtet, Schriftsteller zu werden, aber ich verschwende oft Zeit damit, auf Updates vor dem Bildschirm zu warten ... Selbst wenn ich wüsste, dass es nutzlos ist, erwartete ich, dass es neu geladen wird, und entschied mich daher, eine App zu erstellen, die nach Updates sucht. (Zusatz) Der Taskplaner hat die Automatisierung erreicht. Es funktioniert nur, wenn der Computer eingeschaltet ist, aber es ist praktisch! (9. August 2020)

Wie geht's?

Mit der Naro-API erhalten Sie Informationen zu den neuesten Geschichten des Romans. Danach sendet LINE Notify eine Benachrichtigung, wenn aktualisierte Informationen vorliegen, indem diese mit den zuvor lokal erfassten Informationen verglichen werden. narou.PNG

Umgebung

Vor der Vorbereitung ... Bestätigung und Vorsicht hinsichtlich des Unterschieds zwischen API und Scraping

Dieses Mal verwenden wir die offizielle API, also kratzen wir nicht. </ B> Aber wenn Sie sich Sorgen machen, lesen Sie das Gesetz.

Vorbereitung (Applet mit IFTTT erstellen)

Es ist ein Dienst, der andere Dienste als IFTTT verknüpft. Verbinden Sie diesmal Webhooks und LINE Notify und lassen Sie sie Benachrichtigungen an Ihre LINE senden. Vorgehensweise </ b>

  1. Registrieren Sie sich bei IFTTT
  2. Klicken Sie oben rechts auf dem Bildschirm auf Erstellen. Der Bildschirm wechselt zu dem Bildschirm "if + This Then That". Siehe die Abbildung unten. ifttt_intro.PNG
  3. Klicken Sie auf + Dies. Geben Sie Webhooks in die Suchleiste ein, um sie auszuwählen.
  4. Klicken Sie auf die Spalte "Webanforderung empfangen". Wenn Sie zum folgenden Bildschirm gelangen, geben Sie Ihren Lieblingsnamen unter "Ereignisname" ein. Ich werde es später verwenden. ifttt_2.PNG
  5. Klicken Sie auf + That. Wählen Sie LINE und klicken Sie auf das Feld "Nachricht senden".
  6. Melden Sie sich bei LINE an, setzen Sie den Inhalt der Nachricht auf "Wert1: Wert1 \
    " (es spielt keine Rolle, wenn Sie dies nicht tun) und klicken Sie auf "Aktion erstellen". ifttt_3.PNG
  7. Überprüfen Sie den Inhalt und klicken Sie auf Fertig stellen.
  8. Klicken Sie auf Durchsuchen, geben Sie Webhooks in das Suchfenster ein und wählen Sie die Registerkarte Dienste. Klicken Sie auf Webhooks. Vielleicht können Sie von diesem Link gehen ...?
  9. Klicken Sie auf Dokumentation und Sie sollten "Ihr Schlüssel ist: ~~~~~" sehen. Notieren Sie sich dies. Ich werde es später verwenden. Dies ist das Ende von IFTTT.

Beschreibung des Quellcodes

Ich habe es auf GitHub gepostet ( hier ). Eine kurze Beschreibung jeder Funktion wird gegeben. import

import requests
import yaml
import gzip
import json
import csv

get_new_data() ['ncode', 'title', 'general_lastup', 'general_all_no' des Romans, der mit Narurou API angegeben wurde '] Wird erworben. Informationen zur Verwendung der Naro-API finden Sie auf der offiziellen Website und im folgenden Artikel. Ich finde es interessant, weil es verschiedene Verwendungszwecke hat.

def get_new_data():
    """
    payload : json params
    e.g.) payload = {'out': 'json', 'ncode':Bitte geben Sie den ncode des Romans ein, den Sie gerade lesen, 'of':'t-gl', 'gzip':5}
    reference) https://dev.syosetu.com/man/api/
    """
    payload = {'out': 'json', 'ncode': """Bitte geben Sie ncode ein""", 'of':'t-gl-n-ga', 'gzip':5}
    url = "https://api.syosetu.com/novelapi/api/"
    r_gzip = requests.get(url, params=payload)
    r = r_gzip.content
    r_gzip.encoding = 'gzip'
    res_content = gzip.decompress(r).decode("utf-8")
    res = json.loads(res_content)[1:]
    
    new_data = [['ncode', 'title', 'general_lastup', 'general_all_no']]

    for r in res:
        new_data.append([r['ncode'], r['title'], r['general_lastup'], str(r['general_all_no'])])

    return new_data

read_data() Lesen Sie Informationen wie die Gesamtzahl der Geschichten und das Aktualisierungsdatum des zuvor erworbenen Romans aus einer Datei namens update.csv. Wenn Sie diesen Code zum ersten Mal ausführen, sollte update.csv leer sein. Wenn Sie also versuchen, ihn so zu verwenden, wie er ist, tritt natürlich ein Fehler auf. Erstellen Sie zuvor update.csv mit get_new_data () und store_data (), die später beschrieben werden.

def read_data():
    f_data = "update.csv"
    with open(f_data, encoding="utf-8") as f:
        reader = csv.reader(f)
        data = [row for row in reader]
    #data: list(['ncode', 'title', 'general_lastup', 'general_all_no'])
    return data

store_data(res) Schreiben Sie die Informationen des Romans, die in der Liste res gespeichert sind, in update.csv.

def store_data(res):
    # res: list(['ncode', 'title', 'general_lastup', 'general_all_no'])
    output = "update.csv"
    with open(output, mode='w', newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        for d in res:
            writer.writerow([d[0], d[1], d[2], d[3]])

post_ifttt(json) Verwenden Sie den Applet-Namen und den Webhooks-Schlüssel, die Sie zuvor hier notiert haben. Ersetzen Sie es an der auskommentierten Stelle. Wenn diese Funktion aufgerufen wird, wird LINE benachrichtigt.

def post_ifttt(json):
    # json: {value1: " content "}
    url = (
        "https://maker.ifttt.com/trigger/"
        + #Applet-Name
        + "/with/key/"
        + #Webhooks-Schlüssel
    )
    requests.post(url, json)

check(prev_data, new_data) Überprüfen Sie, ob es aktualisiert wurde. Rufen Sie für aktualisierte Romane post_ifttt () auf, um Sie zu benachrichtigen.

def check(prev_data, new_data):
    # prev_data: [[previous information of bookmark1], [previous information of bookmark2], ...]
    # new_data: [[new information of bookmark1], [new information of bookmark2], ...]
    isUpdated = 0
    for i in range(len(prev_data)):
        if(i==0):
            continue
        if(prev_data[i][0]==new_data[i][0] and prev_data[i][2]!=new_data[i][2]):
            message = '\"' + new_data[i][1] + '\"' +  'Wurde aktualisiert!\n' + 'https://ncode.syosetu.com/' + new_data[i][0] + '/' + new_data[i][3] + '/'
            print(message)
            json = {'value1': message)
            post_ifttt(json)
    store_data(new_data)

Variablen zum Speichern von Daten zur Laufzeit </ b>

prev_data = read_data()
new_data = get_new_data()
check(prev_data, new_data)

Eindrücke gemacht

Ich halte die API für praktisch. Bevor ich das Programm schrieb, fragte ich mich: "Muss ich kratzen ... Ich befürchte, dass die Geschichte um das Gesetz kompliziert erscheint. Wie mache ich also zuerst kratzen?" Es wurde durch die Implementierung von nur wenigen abgeschlossen. Ich war nicht glücklich Sie können eine einfache App erstellen, indem Sie das tun, was Sie in Schulklassen gelernt haben. Natürlich denke ich, dass es Raum für Verbesserungen gibt. Wenn Sie ohne API von "Meine Seite" kratzen, können Sie ohne ncode Informationen zu Ihrem Lieblingsroman erhalten. Selbst wenn Sie die API verwenden, scheint es eine Lernerfahrung zu sein, den Inhalt des Romans gemeinsam zu erwerben und als Smartphone-Anwendung zum Lesen zu verwenden (obwohl einige Leute dies bereits getan haben).

Verweise

Recommended Posts