[PYTHON] Was ich aus "Erwähnung von Personen, die keine Reaktion mit Slack API gedrückt haben" gelernt habe [Hauptsächlich über json]

Überblick

Wie der Titel schon sagt. Ich werde zusammenfassen, worauf Sie beim Umgang mit json hauptsächlich in Python achten sollten.

Was ich tun wollte (wie im Bild unten gezeigt)

① Holen Sie sich ein Mitglied von slack (member_list.py) (2) Senden Sie eine Nachricht mit der API entsprechend der Zeit, zu der Sie zur Arbeit gehen, indem Sie pünktlich beginnen. (postMessage.py) ③ Mitglieder reagieren. ④ Holen Sie sich die Person, die auf ② oben reagiert hat, mit der API. (Reac_result.py) ⑤ Erstellen Sie eine Liste, ohne auf Reaktion zu drücken. ⑥ Erwähnen Sie die oben mit API erstellte Liste. (PostMessage_re.py)

01.jpg

Auszüge aus dem, was ich gefunden habe (①, ②, ④, ⑤, ⑥)

Code-Auszug in ①, was ich verstanden habe

■ Der Wert des Wörterbuchs (Objekt vom Typ Diktat) kann ausgewählt und mit dem Schlüssel extrahiert werden. Der folgende Code versucht, den Namen aus der empfangenen Antwort zu extrahieren.

def_member_list.py


    r = requests.get(url, params=payload)
    result_mem = []  #Bereiten Sie eine Liste vor, um die Ergebnisse zu platzieren
    json_data = r.json()
    members = json_data["members"] 
    for i in members:
        result_mem.append(i["real_name"])#Ergebnisse hinzufügen
    ppront.pprint(result_mem)#['Slackbot']

json_data.


#json_Die folgenden Daten werden in Daten gespeichert.
{"ok": true,
"members": [ {"id": "USLACKBOT","team_id": "T012YMJ67V1","real_name": "Slackbot"

d = {'key1': 'aaa', 'key2': 'bbb', 'key3': 'ccc'} value = d['key1'] print(value) #aaa Das heißt, {"Schlüssel": Wert,}

** Wenn Sie also den Wert ("Slackbot") erhalten möchten, geben Sie den Schlüssel ("real_name") an. ** ** **

Code-Auszug in ②, was ich verstanden habe

■ Wenn Sie einen beliebigen Wert von der Funktion an den Aufrufer der Funktion zurückgeben möchten, können Sie return verwenden. Der folgende Code versucht, den Zeitstempel aus der empfangenen Antwort zu extrahieren.

def_postMessage.py


def postMessage():
    r = requests.post(url, params=payload)
    result_text = []  #Bereiten Sie eine Liste vor, um die Ergebnisse zu platzieren
    json_data = r.json()
    ts = json_data['ts']
    return (ts)

postMessage.py


import datetime
import def_postMessage
a = def_postMessage.postMessage()
with open(str(datetime.date.today())+'_ts.txt', mode='a') as f:
    print(a,file=f)

Der von def_postMessage.py erhaltene ts (Zeitstempel) ist der Rückgabewert, und postMessage.py verwendet ihn. Da ts im Durchhang eindeutig ist, kann die Nachricht identifiziert werden.

Code-Auszug in ④, was ich verstanden habe

■ Wenn Sie den Wert beim Verschachteln erhalten möchten, müssen Sie die Struktur von JSON verstehen ■ Referenz ist Website hier ■ Für den Rückgabewert der Rückgabe kann eine Variable angegeben werden. Der folgende Code versucht, die Person zu extrahieren, die auf die empfangene Antwort reagiert hat.

def_reaction.py


def reaction():
    r = requests.get(url, params=payload)
    json_data = r.json()
    reac_tmp1 = json_data['messages'][0]['reactions'][0]['users']
    reac_tmp2 = json_data['messages'][0]['reactions'][1]['users']
    reac_tmp3 = json_data['messages'][0]['reactions'][2]['users']
return(reac_tmp1,reac_tmp2,reac_tmp3)

json_data.


{'channel_actions_count': 0,
 'channel_actions_ts': None,
 'messages': [{'bot_id': 'B012YMHEVJN',
               'bot_profile': {'app_id': 'A0134SP1ZA8',
                               'id': 'B012YMHEVJN',
                               'name': 'test',
                               'team_id': 'T012YMJ67V1',
               'reactions': [{'count': 3,
                              'name': 'syukkin',
                              'users': ['U012JDYRD2T',
                                        'U013BQDLK6V',
                                        'U012ZC8AQ8K']},
                             {'count': 2,
                              'name': 'tikoku',
                              'users': ['U012XQBE63X', 'U012JDYSN07']},
                             {'count': 1,
                              'name': 'kekkin',
                              'users': ['U012JDYSN07']}]

■ Was Sie tun (wenn reac_tmp1 = json_data ['messages'] [0] ['Reaktionen'] [0] ['Benutzer']) (1) Geben Sie den Variablennamen json_data an (2) Da Sie auf die darin enthaltene Eigenschaft 'messages' zugreifen möchten, geben Sie [" messages "] an. (3) Ein Array von Objekten wird in Nachrichten gespeichert. Hier greifen wir auf das erste Objekt im Array zu, geben Sie also "[0]" an. (Greifen Sie auf alle ['Nachrichten' zu: [{'bot_id'] und so weiter) ④ Geben Sie "[" Reaktionen "]" an, um auf die Eigenschaft "Reaktionen" im Objekt zuzugreifen. ⑤ Ich möchte den ersten von ihnen, also schreibe [0]. ([1] wenn du eine Sekunde willst, [2] wenn du eine dritte willst) ⑥ Geben Sie "[" Benutzer "]" an, um auf die Eigenschaft "Benutzer" im Objekt zuzugreifen.

Mit anderen Worten ** Die Mitglieder (Benutzer), die auf die gesendete Nachricht reagiert haben, werden in reac_tmp gespeichert. ** ** ** (Es gibt 3 reac_tmp1-3, [Anwesenheit], [Spät] und [Abwesenheit], und ich möchte wissen, wer diese 3 Reaktionen ausgelöst hat.)

Code-Auszug in ⑤, was ich verstanden habe

Gepostet in einem anderen Artikel. https://qiita.com/nonono_kita/items/588ad61431e97724deab

Code-Auszug in ⑥, was ich verstanden habe

Gepostet in einem anderen Artikel. https://qiita.com/nonono_kita/items/e83a3b918aa572b69adf

Was Sie in Zukunft tun möchten, was Sie tun können

-Bedingte Verzweigung für Fehler. -Verfahren Sie, um eine Datenbank vorzubereiten und zu aktualisieren, basierend auf den Informationen des Mitglieds, das die Reaktion gedrückt hat. -Verarbeitung, um die Person zu erwähnen, die die Reaktion nach dem Aktualisierungsprozess nicht gedrückt hat.

Aufgabe

■ Es ist keine bedingte Verzweigung vorbereitet. aus diesem Grund ・ Fehler, wenn die Nachricht keine Reaktion enthält ・ Fehler, wenn die Nachricht nur wenige Reaktionen enthält -Fehler, wenn die Ausgabedatei nicht existiert -Fehler, wenn der Name der Ausgabedatei unterschiedlich ist

Was ich dachte

-Wenn Sie Daten mit json erfassen, ist es besser, sie einmal an die Daten auszugeben, als die Daten innerhalb der Funktion oder des Prozesses zu verarbeiten. Geben Sie danach die erforderlichen Daten aus und verarbeiten Sie sie. Das ist wahrscheinlicher, die Funktion zu verwenden. ・ Da der Artikel länger ist, ist es möglicherweise besser, für jeden Artikel einen Artikel zu schreiben.

Recommended Posts

Was ich aus "Erwähnung von Personen, die keine Reaktion mit Slack API gedrückt haben" gelernt habe [Hauptsächlich über json]
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Maschinelles Lernen Eine Geschichte über Menschen, die mit GBDT in GBDT in Python nicht vertraut sind