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)
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.
Dieses Mal verwenden wir die offizielle API, also kratzen wir nicht. </ B> Aber wenn Sie sich Sorgen machen, lesen Sie das Gesetz.
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>
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)
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).
Recommended Posts