[PYTHON] J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"

introduction

Je suis redevable de devenir romancier, mais je perds souvent du temps à attendre les mises à jour devant l'écran ... Même si je savais que c'était inutile, je m'attendais à ce qu'il se recharge, alors j'ai décidé de créer une application qui vérifierait les mises à jour. (Une addition) Le planificateur de tâches a réalisé l'automatisation. Cela ne fonctionne que lorsque l'ordinateur est allumé, mais c'est pratique! (9 août 2020)

Que faire?

Obtenez des informations sur les dernières histoires du roman à l'aide de l'API Naro. Après cela, LINE Notify enverra une notification s'il y a des informations mises à jour en les comparant avec les informations précédemment acquises localement. narou.PNG

environnement

Avant la préparation ... Confirmation et mise en garde concernant la différence entre API et scraping

Cette fois, nous utilisons l'API officielle, donc nous ne grattons pas. </ B> Mais si vous êtes inquiet, consultez la loi.

Préparation (Créer une applet avec IFTTT )

C'est un service qui relie des services différents de IFTTT. Cette fois, connectez les Webhooks et LINE Notify et demandez-leur d'envoyer des notifications à votre LINE. Procédure </ b>

  1. Inscrivez-vous à IFTTT
  2. Cliquez sur Créer en haut à droite de l'écran. L'écran passera à l'écran qui dit "si + ceci alors cela". Voir la figure ci-dessous. ifttt_intro.PNG
  3. Cliquez sur + Ceci. Tapez Webhooks dans la barre de recherche pour les sélectionner.
  4. Cliquez sur la colonne «Recevoir une demande Web». Lorsque vous arrivez à l'écran ci-dessous, entrez votre nom préféré dans "Nom de l'événement". Je l'utiliserai plus tard. ifttt_2.PNG
  5. Cliquez sur + Cela. Sélectionnez LINE et cliquez sur le champ "Envoyer un message".
  6. Connectez-vous à LINE, définissez le contenu du message sur "Value1: Value1 \
    " (peu importe si vous ne le faites pas) et cliquez sur "Create Action". ifttt_3.PNG
  7. Vérifiez le contenu et cliquez sur Terminer.
  8. Cliquez sur Explorer, saisissez Webhooks dans la fenêtre de recherche et sélectionnez l'onglet Services. Cliquez sur Webhooks. Peut-être pouvez-vous aller à partir de ce lien ...?
  9. Cliquez sur Documentation et vous devriez voir "Votre clé est: ~~~~~", alors prenez-en note. Je l'utiliserai plus tard. C'est la fin de IFTTT.

Description du code source

Je l'ai publié sur GitHub ( ici ). Une brève description de chaque fonction est donnée. import

import requests
import yaml
import gzip
import json
import csv

get_new_data() ['ncode', 'title', 'general_lastup', 'general_all_no' du roman spécifié à l'aide de l ' API Narurou '] Est acquis. Veuillez vous référer au site officiel et à l'article ci-dessous pour savoir comment utiliser l'API Naro. Je pense que c'est intéressant car il a diverses utilisations.

def get_new_data():
    """
    payload : json params
    e.g.) payload = {'out': 'json', 'ncode':Veuillez entrer le ncode du roman que vous lisez, 'of':'t-gl', 'gzip':5}
    reference) https://dev.syosetu.com/man/api/
    """
    payload = {'out': 'json', 'ncode': """Veuillez entrer ncode""", '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() Lisez des informations telles que le nombre total d'histoires et la date de mise à jour du roman précédemment acquis à partir d'un fichier appelé update.csv. Lorsque vous exécutez ce code pour la première fois, update.csv doit être vide, donc si vous essayez de l'utiliser tel quel, une erreur se produira naturellement. Avant cela, créez update.csv en utilisant get_new_data () et store_data () décrits plus loin.

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) Écrivez les informations du roman stockées dans la liste res dans 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) Utilisez le nom de l'applet et la clé Webhooks que vous avez notés précédemment ici. Remplacez-le dans l'emplacement commenté. Lorsque cette fonction est appelée, LINE sera notifié.

def post_ifttt(json):
    # json: {value1: " content "}
    url = (
        "https://maker.ifttt.com/trigger/"
        + #Nom de l'applet
        + "/with/key/"
        + #Clé Webhooks
    )
    requests.post(url, json)

check(prev_data, new_data) Vérifiez s'il a été mis à jour. Pour les romans mis à jour, appelez post_ifttt () pour vous en informer.

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] + '\"' +  'A été mis à jour!\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)

Variables de stockage des données lors de l'exécution </ b>

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

Impressions réalisées

Je pense que l'API est pratique. Avant d'écrire le programme, je me demandais: "Dois-je faire du grattage ... L'histoire autour de la loi semble être déroutante, et j'ai peur, comment faire du grattage en premier?" Il a été complété par la mise en œuvre de quelques-uns seulement. Je n'étais pas content. Vous pouvez créer une application simple simplement en faisant ce que vous avez appris en classe. Bien sûr, je pense qu'il y a place à amélioration. Si vous grattez de Ma page sans utiliser l'API, vous pouvez obtenir des informations sur votre roman préféré sans ncode. Même si vous utilisez l'API, cela semble être une expérience d'apprentissage d'acquérir le contenu du roman ensemble et de le lire comme une application pour smartphone (bien que certaines personnes l'aient déjà fait).

Les références

Recommended Posts