Python > 投稿内容が言及された場合に取得する

fluent-discourseへのリンクを投稿してくれてありがとう!

現在、Pythonを習得しようとしているところなので、ここで概説していることよりも良いアプローチがある可能性があります。

mention = client.notifications.json.get()

これは、clientを作成したときに設定したusernameのメンションの辞書を返します。clientを作成したときにusernameをUserAに設定したと仮定します。

辞書が返されていることを確認するには、次を実行できます。

print(type(mention))

これは<class 'dict'>を返すはずです。

実行することで辞書のキーを確認できます。

print(list(mention))

これは['notifications', 'total_rows_notifications', 'seen_notification_id', 'load_more_notifications']を返します。

あなたのケースでは、notificationsキーの下にある値が必要になります。

notifications = mention['notifications']

次にtype(notifications)を実行すると、リストであることがわかります。UserAへのメンションによってトリガーされた通知を取得するには、リストを反復処理して、notification_typeが1に設定されているエントリを見つける必要があります。DiscourseサイトのrailsコンソールからNotification.typesを実行すると、Discourse通知タイプの値を確認する最も簡単な方法です。

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

したがって、clientに設定したユーザー名の「メンション」通知を取得するには、次のようなことを試してください(入力しながらPythonインタープリターでテストしています)。

data = client.notifications.json.get()
notifications = data['notifications']
# 「メンション」通知を格納するため、空のリストオブジェクトを作成します
mentions = []
# `notifications`リストを反復処理して、`notification_type`が`1`に設定されているすべてのエントリを見つけます
for notification in notifications:
    if notification['notification_type'] == 1:
        mentions.append(notification)

これにより、メンションによってトリガーされた通知のリストが作成されます。リストの各項目は辞書になります。次のようなもので確認できます。

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