[PYTHON] Ce que j'ai appris de "Mentionnez aux personnes qui n'ont pas pressé de réagir en utilisant l'API slack" [Principalement à propos de json]

Aperçu

Comme le dit le titre. Je vais résumer ce à quoi vous devez faire attention lorsque vous traitez avec json principalement en python.

Ce que je voulais faire (comme le montre l'image ci-dessous)

① Obtenez un membre de slack (member_list.py) (2) Envoyez un message avec l'API en fonction de la fréquentation au départ prévu. (postMessage.py) ③ Les membres réagissent. ④ Obtenez la personne qui a réagi à ② ci-dessus avec l'API. (Reac_result.py) ⑤ Créez une liste sans appuyer sur la réaction. ⑥ Mentionnez la liste créée en ⑤ ci-dessus avec l'API. (PostMessage_re.py)

01.jpg

Extraits de ce que j'ai trouvé (①, ②, ④, ⑤, ⑥)

Extrait de code en ①, ce que j'ai compris

■ La valeur du dictionnaire (objet de type dict) peut être sélectionnée et extraite avec la clé. Le code ci-dessous tente d'extraire le nom de la réponse reçue.

def_member_list.py


    r = requests.get(url, params=payload)
    result_mem = []  #Préparez une liste pour mettre les résultats
    json_data = r.json()
    members = json_data["members"] 
    for i in members:
        result_mem.append(i["real_name"])#Ajouter des résultats
    ppront.pprint(result_mem)#['Slackbot']

json_data.


#json_Les données suivantes sont stockées dans les données.
{"ok": true,
"members": [ {"id": "USLACKBOT","team_id": "T012YMJ67V1","real_name": "Slackbot"

d = {'key1': 'aaa', 'key2': 'bbb', 'key3': 'ccc'} value = d['key1'] print(value) #aaa Autrement dit, {"key": value,}

** Donc, si vous voulez obtenir la valeur ("Slackbot"), spécifiez la clé ("real_name"). ** **

Extrait de code en ②, ce que j'ai compris

■ Si vous souhaitez renvoyer une valeur arbitraire de la fonction à l'appelant de la fonction, vous pouvez utiliser return. Le code ci-dessous tente d'extraire l'horodatage de la réponse reçue.

def_postMessage.py


def postMessage():
    r = requests.post(url, params=payload)
    result_text = []  #Préparez une liste pour mettre les résultats
    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)

Le ts (horodatage) obtenu par def_postMessage.py est la valeur de retour et postMessage.py l'utilise. Puisque ts est unique dans slack, le message peut être identifié.

Extrait de code en ④, ce que j'ai compris

■ Si vous souhaitez obtenir la valeur lors de l'imbrication, vous devez comprendre la structure de JSON ■ La référence est site here ■ Une variable peut être spécifiée pour la valeur de retour de return. Le code ci-dessous tente d'extraire la personne qui a réagi de la réponse reçue.

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']}]

■ Ce que vous faites (quand reac_tmp1 = json_data ['messages'] [0] ['réactions'] [0] ['utilisateurs']) (1) Spécifiez le nom de la variable json_data (2) Spécifiez [" messages "] parce que vous voulez accéder à la propriété'messages '. (3) Un tableau d'objets est stocké dans les messages. Ici, nous allons accéder au premier objet du tableau, alors spécifiez [0]. (Accédez à tous les ['messages': [{'bot_id'] et ainsi de suite) ④ Spécifiez [" réactions "] pour accéder à la propriété "réactions" de l'objet. ⑤ Je veux le premier d'entre eux, alors écrivez «[0]». ([1] si vous en voulez une seconde, [2] si vous en voulez une troisième) ⑥ Spécifiez [" users "] pour accéder à la propriété "utilisateurs" de l'objet.

En d'autres termes ** Les membres (utilisateurs) qui ont réagi au message envoyé sont stockés dans reac_tmp. ** ** (Il y a 3 reac_tmp1-3, [Présence], [En retard] et [Absence], et je veux savoir qui a fait ces 3 réactions.)

Extrait de code en ⑤, ce que j'ai compris

Publié dans un autre article. https://qiita.com/nonono_kita/items/588ad61431e97724deab

Extrait de code en ⑥, ce que j'ai compris

Publié dans un autre article. https://qiita.com/nonono_kita/items/e83a3b918aa572b69adf

Ce que vous voulez faire à l'avenir, ce que vous pouvez faire

-Branchement conditionnel pour les erreurs. -Processus pour préparer un DB et le mettre à jour en fonction des informations du membre qui a appuyé sur la réaction. -Traitement pour mentionner la personne qui n'a pas appuyé sur la réaction après le processus de mise à jour.

Tâche

■ Aucune branche conditionnelle n'est préparée. pour cette raison ・ Erreur s'il n'y a pas de réaction dans le message ・ Erreur s'il y a peu de réactions dans le message -Erreur si le fichier de sortie n'existe pas -Erreur si le nom du fichier de sortie est différent

Ce que je pensais

-Lors de l'acquisition de données avec json, il semble préférable de les sortir une fois dans les données plutôt que de traiter les données dans la fonction ou le processus. Sortez et traitez les données nécessaires après cela. C'est plus susceptible d'utiliser la fonction. ・ Étant donné que l'article sera plus long, il peut être préférable d'écrire un article pour chaque élément.

Recommended Posts

Ce que j'ai appris de "Mentionnez aux personnes qui n'ont pas pressé de réagir en utilisant l'API slack" [Principalement à propos de json]
[Python] Mention à plusieurs personnes avec l'API de Slack
Apprentissage automatique Une histoire sur des personnes qui ne sont pas familiarisées avec GBDT utilisant GBDT en Python