Python > Obtenir le contenu du post s'il est mentionné

Merci d’avoir posté le lien vers fluent-discourse !

J’essaie actuellement de me familiariser avec Python, il est donc possible qu’il existe de meilleures façons d’aborder ce problème que celles que j’expose ici.

mention = client.notifications.json.get()

Cela renvoie un dictionnaire de mentions pour le username que vous avez défini lors de la création du client. Je suppose que vous avez défini le username sur UserA lors de la création du client.

Pour confirmer qu’un dictionnaire est renvoyé, vous pouvez exécuter :

print(type(mention))

Cela devrait renvoyer <class 'dict'>

Vous pouvez voir les clés du dictionnaire en exécutant :

print(list(mention))

Cela renverra ['notifications', 'total_rows_notifications', 'seen_notification_id', 'load_more_notifications']

Dans votre cas, vous voulez les valeurs qui se trouvent sous la clé notifications :

notifications = mention['notifications']

Si vous exécutez ensuite type(notifications), vous verrez qu’il s’agit d’une liste. Pour obtenir les notifications qui ont été déclenchées par des mentions de UserA, vous devez parcourir la liste pour trouver les entrées où notification_type est défini sur 1. La manière la plus simple de voir les valeurs des types de notification Discourse est d’exécuter Notification.types à partir de la console rails de votre site Discourse :

 pry(main)> Notification.types
=> {:mentioned=>1,
 :replied=>2,
 :quoted=>3,
 :edited=>4,
 :liked=>5,
 ...

Donc, pour obtenir les notifications de “mention” pour l’utilisateur dont le nom d’utilisateur que vous avez défini pour le client, essayez quelque chose comme ceci (je teste cela dans l’interpréteur Python pendant que je l’écris) :

data = client.notifications.json.get()
notifications = data['notifications']
# Créez une liste vide pour stocker les notifications de "mention"
mentions = []
# Parcourez la liste `notifications` pour trouver toutes les entrées où `notification_type` est défini sur `1`
for notification in notifications:
    if notification['notification_type'] == 1:
        mentions.append(notification)

Cela créera une liste de notifications qui ont été déclenchées par des mentions. Chaque élément de la liste sera un dictionnaire. Vous pouvez le vérifier avec quelque chose comme :

for mention in mentions:
    print(mention['topic_id'], mention['post_number'])