Python > الحصول على محتوى المنشور عند ذكره

شكراً لنشر الرابط إلى fluent-discourse!

أنا حاليًا أحاول مواكبة Python، لذلك من الممكن أن تكون هناك طرق أفضل لمعالجة هذا الأمر مما أقوم بتحديده هنا.

mention = client.notifications.json.get()

هذا يعيد قاموس للإشارات لـ username الذي قمت بتعيينه عند إنشاء client. أفترض أنك قمت بتعيين username إلى UserA عند إنشاء client.

للتأكد من أنه يتم إرجاع قاموس، يمكنك تشغيل:

print(type(mention))

يجب أن يعيد \u003cclass 'dict'\u003e

يمكنك رؤية مفاتيح القاموس عن طريق تشغيل:

print(list(mention))

سيعيد هذا ['notifications', 'total_rows_notifications', 'seen_notification_id', 'load_more_notifications']

بالنسبة لحالتك، تريد القيم الموجودة تحت مفتاح notifications:

notifications = mention['notifications']

إذا قمت بتشغيل type(notifications)، سترى أنها قائمة. للحصول على الإشعارات التي تم تشغيلها بواسطة الإشارات إلى UserA، تحتاج إلى التكرار عبر القائمة للعثور على الإدخالات التي تم تعيين notification_type لها إلى 1. أسهل طريقة لرؤية القيم لأنواع إشعارات Discourse هي تشغيل Notification.types من وحدة تحكم rails الخاصة بموقع Discourse الخاص بك:

 pry(main)> Notification.types
=> {: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'])