كيف يمكنني تحقيق ذلك؟ لا يبدو أنني أستطيع حقًا معرفة ما يجب فعله…
لقد اطلعت على:
لكنني لا أفهم. الشيء الرئيسي الذي لا أفهمه أيضًا هو كيفية الحصول على كل معرف عشوائي وإرساله للحذف نظرًا لأن كل معرف مختلف…
كيف يمكنني تحقيق ذلك؟ لا يبدو أنني أستطيع حقًا معرفة ما يجب فعله…
لقد اطلعت على:
لكنني لا أفهم. الشيء الرئيسي الذي لا أفهمه أيضًا هو كيفية الحصول على كل معرف عشوائي وإرساله للحذف نظرًا لأن كل معرف مختلف…
لولا، كيف يمكن حذف جميع منشورات Discourse لمستخدم باستخدام واجهة برمجة التطبيقات (API)؟
بالمناسبة، لا أعتقد أن هناك طريقة للحذف المجمع عبر واجهة برمجة التطبيقات (API). أعتقد أنك بحاجة إلى كتابة برنامج نصي للتنقل عبر كل منشور للحذف. اعتمادًا على عدد المنشورات، قد تكون حدود المعدل مشكلة.
لولا، كيف أكتب برنامجًا نصيًا لحذف منشورات Discourse بشكل مجمع؟
بالمناسبة، لماذا تستخدم واجهة برمجة التطبيقات (API) للقيام بذلك؟
أعتقد أنه يمكن القيام بذلك أيضًا كمهمة rake من سطر الأوامر.
شكرًا لك، سأجرب هذا اليوم! إذن، هل يمكن القيام بأمور الـ rake هذه كمستخدم عادي؟ أود أن يتم كل هذا كمستخدم عادي ليس موظفًا.
هذا.
عندما قمت بتشغيل النص البرمجي بايثون أدناه:
import requests
# Configuration
discourse_base_url = 'https://forums.mysite.me/'
api_key = 'eb4065d1dergrgh45h45h54h45reg4g70cbeb274bf7f87'
api_username = 'username'
target_username = 'targetusername'
# Headers for API requests
headers = {
'eb4065d1dergrgh45h45h54h45reg4g70cbeb274bf7f87': api_key,
'B': api_username
}
def get_user_posts(username):
"""Fetch posts by a specific user."""
posts = []
url = f'{discourse_base_url}/posts.json?username={username}'
response = requests.get(url, headers=headers)
if response.status_code == 200:
posts_data = response.json()
posts = posts_data.get('latest_posts', [])
return posts
def delete_post(post_id):
"""Delete a specific post."""
url = f'{discourse_base_url}/posts/{post_id}.json'
response = requests.delete(url, headers=headers)
return response.status_code == 200
def main():
# Fetch user posts
posts = get_user_posts(target_username)
# Delete each post
for post in posts:
post_id = post.get('id')
if delete_post(post_id):
print(f'Successfully deleted post {post_id}')
else:
print(f'Failed to delete post {post_id}')
if __name__ == '__main__':
main()
في الطرفية/وحدة التحكم الخاصة بي، أحصل على:
Failed to delete post 73
Failed to delete post 71
Failed to delete post 69
Failed to delete post 60
Failed to delete post 47
لقد جربت مفتاحي API. أحدهما يمكنني استخدامه فقط، والآخر لجميع المستخدمين. في كلتا الحالتين، استخدمت الخيار العام. نفس النتيجة.
هذا لن ينجح. حتى بالنسبة لطلبات واجهة برمجة التطبيقات (API). بعد نقطة معينة، لا يمكن للمستخدمين حذف مشاركاتهم الخاصة.
عادةً ما يكون الخيار الأفضل هو إخفاء هوية جميع المشاركات بواسطة مستخدم إذا لم يعد يرغب في أن يكون جزءًا من المنتدى. سيؤدي هذا ببساطة إلى تغيير اسم المستخدم الخاص بهم إلى شيء عشوائي بحيث لا تعود مشاركاتهم مرتبطة بهم.
@Lilly رأيت الرد الذي حذفته. إذن، ماذا عن جعله يعمل بنفسي أو لمسؤول آخر؟ لست متأكدًا مما إذا كنت قد رأيت، لكنني قمت بتحرير مشاركتي أعلاه لتضمين النتيجة التي أحصل عليها عند استخدام هذا البرنامج النصي.
أعتقد أن نفس الشيء يمكن طرحه عليك أيضًا، @blake، هاها.
هذا فقط للاختبار في الوقت الحالي.
حذفت لأن بليك أجاب بالفعل.
يمكنك تجربة طلب curl هذا لمعرف المنشور الخاص بك
curl -i -sS -X DELETE "http://localhost:4200/posts/<post-id>.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: key" \
-H "Api-Username: username"
لمعرفة ما إذا كان يُرجع خطأً مختلفًا ولكنه على الأرجح سيقول فقط “حدث خطأ”![]()
يبدو أن هناك بعض إعدادات الموقع المتعلقة بحذف المستخدمين للمنشورات التي يمكنك تعديلها. يبدو أيضًا أنه قد يكون هناك زر “حذف جميع المنشورات” في مكان ما.
تجربة أمر curl أعلاه:
curl -X GET "https://forums.mysite.me/posts.json?username=targetusername" \
-H "Api-Key: eb4065d56u7u6u65u54y54uy566575w4yer343434ac8a770cbeb274bf7f87" \
-H "Api-Username: AdminUsername"
إذًا، لقد تم تشغيله وجلب لي المشاركات… ولكن بعد ذلك حصلت على هذا:
C:\Users\User>-H "Api-Key: eb4065d56u7u6u65u54y54uy566575w4yer343434ac8a770cbeb274bf7f87"
'-H' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\User>-H "Api-Username: AdminUsername"
'-H' is not recognized as an internal or external command,
operable program or batch file.
هل هذا طبيعي أم لماذا يحدث ذلك؟
الأمر curl الذي أدخلته ليس هو نفس الأمر الموجود في أعلاه.
يبدو أنك تستخدم طرفية Windows cmd، ربما لا تعجبها الشرطة المائلة المزدوجة \\ التي تفصل الأسطر. يمكنك إزالتها بحيث تكون كلها في سطر واحد.
جربتها بالفعل بدون الشرطات المائلة. جعلها كلها في سطر واحد أصلحها، شكرًا!
آسف، كنت أقصد الأمر الذي شاركته ليلي.
يبدو أن هناك نقطة نهاية لحذف جميع منشورات المستخدم دفعة واحدة.
يتم تشغيل هذا بواسطة هذا الزر في صفحة المستخدمين من لوحة تحكم المسؤول
إذًا، بدلًا من الاضطرار إلى إدخال معرف منشور يدويًا (لأنه في تلك المرحلة، يمكنني بنفس القدر الانتقال إلى الموقع الفعلي والضغط على أزرار الحذف، أليس كذلك؟)، كيف يمكن ملء ذلك تلقائيًا لكل منشور؟
أوه، رائع! إذًا سأقوم بإنشاء عنوان URL:
http://mysite.com/admin/users/79/delete_posts_batch؟
أم، ما هو الرقم “79” هنا؟ معرف مستخدم أفترض أنك تحصل عليه عندما تذهب إلى ملف تعريف المستخدم؟
نعم، هذا هو معرف المستخدم، وهو طلب PUT. يعيد عدد المشاركات المحذوفة.
إذًا، لن أقوم بذلك؟
curl -i -sS -X DELETE "http://forums.mysite.com/admin/users/0/delete_posts_batch" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: eb4065d45745678u564754y4545y545445674y34545y50cbeb274bf7f87" \
-H "Api-Username: AdminUsername"
ليس طلب DELETE بل طلب PUT. أيضًا، لا توجد معلمات نموذج هنا.
إذا كان مسؤول يقوم بالحذف، فهناك عملية مسؤول لـ
حذف جميع المشاركات لمستخدم.
قد تحتاج إلى تعديل إعدادات أخرى أولاً للسماح بذلك (حذف جميع المشاركات كحد أقصى).
آمل بالتأكيد ألا يكون هذا هو مفتاح واجهة برمجة التطبيقات الفعلي لموقعك. كما لوحظ سابقًا، من السهل جدًا معرفة ماهية موقعك بالفعل.
يجب أن تفكر في حرق هذا المفتاح وتدويره.
إذًا، هل يجب إزالة هذا السطر من النموذج تمامًا؟
تحرير: لقد أبقيت على السطر وأعدت تسمية “DELETE” إلى “PUT” وعمل الأمر.