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