تفاوت بين بيانات API وبيانات WebUI

أرغب في الحصول على بيانات مستخدم معين عبر واجهة برمجة التطبيقات (API). بشكل أساسي، أرغب في معرفة عدد الردود التي قدمها المستخدم منذ انضمامه إلى المنتدى. لقد استخدمت الكود التالي (بشكل أساسي قمت بجلب جميع user_actions حيث action_type=5 ثم طبعت عدد هذه السجلات). الناتج النهائي لم يتطابق مع ما أراه في واجهة المستخدم الرسومية (webUI). هل يمكن لأحد أن يشرح سبب حدوث ذلك؟

import requests, time

defaultHost = #your_default_host

# Headers for authentication
headers = {
    'Api-Key': #YOUR_API_KEY,
    'Api-Username':#YOUR_API_USERNAME
}


# increment the offset by 30 each time. The loop should break when the number of elements in the response is less than 30
offset = 0
data_dict ={"user_actions":[]}
username = #username_for_which_we_want_to_fetch_the_data

# filter=5 # For the "user_replied_to_a_topic"

while True:
    time.sleep(0.2)
    endpoint = f'https://{defaultHost}/user_actions.json?username={username}&offset={offset}&filter=5'
    # Make the request
    response = requests.get(endpoint, 
                            headers=headers)

    # Check the response
    if response.status_code == 200:
        data = response.json()
        num_elements = len(data["user_actions"])
        data_dict["user_actions"].extend(data["user_actions"])
        offset+=30
        if num_elements<30: 
            break    
    else:
        print(f'Error: {response.status_code}')
        break

print(len(data_dict["user_actions"]))

مجرد تخمين (لم ألق نظرة على الملفات الأساسية وقاعدة البيانات). ربما تأخذ قيمة ما في الاعتبار المنشورات الأولى (التي ليست ردودًا)، بينما تُرجع الأخرى الردود فقط.

أيضًا، لماذا لا تستخدم استعلام مستكشف البيانات لإرجاع هذه البيانات؟ أعتقد أنها ستكون أكثر ملاءمة بكثير ما لم أفوت شيئًا. :thinking:

إعجابَين (2)

[quote=“Coconut Flavored Quark, post:2, topic:347920, username:Canapin”]لا تأخذ القيمة none في الاعتبار المنشورات الأولى (التي ليست ردودًا)، بينما تعيد الأخرى الردود فقط.
[/quote]

هل يمكنك توضيح أي القيم تتحدث عنها؟

نعم، إذا لم يوفر واجهة برمجة التطبيقات (API) المخرجات الصحيحة، فإن مستكشف البيانات هو الحل النهائي. ولكن السؤال الأكبر هو: لماذا لا تعيد واجهة برمجة التطبيقات (API) وواجهة المستخدم الرسومية (webUI) نفس البيانات بالضبط؟

نعم، لقد فعلت ذلك كما ترى في الكود الذي نشرته:

    endpoint = f'https://{defaultHost}/user_actions.json?username={username}&offset={offset}&filter=5'
إعجابَين (2)
  1. القيمة التي تم إرجاعها بواسطة واجهة Discourse

  2. القيمة التي تم إرجاعها بواسطة البرنامج النصي الخاص بك

في أي صفحة؟