Lilly
(Lillian )
4. April 2024 um 05:01
3
Übrigens glaube ich nicht, dass es eine Möglichkeit gibt, über die API Massenlöschungen durchzuführen. Ich denke, Sie müssen ein Skript schreiben, um jeden Beitrag einzeln zu durchlaufen und zu löschen. Je nachdem, wie viele Beiträge es sind, könnten Ratenbegrenzungen ein Problem darstellen.
Lola, wie schreibe ich ein Skript, um Discourse-Beiträge massenhaft zu löschen?
Lola the Coding Assistant Bot:
Um die Stapelverarbeitung zum Löschen von Discourse-Beiträgen zu realisieren, können Sie eine Skriptsprache wie Python verwenden. Unten finden Sie ein Beispielskript, das zeigt, wie die Löschung von Beiträgen für einen bestimmten Benutzer automatisiert wird. Dieses Skript:
Ruft Beiträge eines bestimmten Benutzers ab.
Iteriert durch die Liste der Beiträge.
Löscht jeden Beitrag einzeln.
Beispiel Python-Skript
import requests
# Konfiguration
discourse_base_url = 'http://yourdiscourse.example.com'
api_key = 'your_api_key'
api_username = 'your_admin_username'
target_username = 'targetUser'
# Header für API-Anfragen
headers = {
'Api-Key': api_key,
'Api-Username': api_username
}
def get_user_posts(username):
"""Ruft Beiträge eines bestimmten Benutzers ab."""
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):
"""Löscht einen bestimmten Beitrag."""
url = f'{discourse_base_url}/posts/{post_id}.json'
response = requests.delete(url, headers=headers)
return response.status_code == 200
def main():
# Benutzerbeiträge abrufen
posts = get_user_posts(target_username)
# Jeden Beitrag löschen
for post in posts:
post_id = post.get('id')
if delete_post(post_id):
print(f'Beitrag {post_id} erfolgreich gelöscht')
else:
print(f'Beitrag {post_id} konnte nicht gelöscht werden')
if __name__ == '__main__':
main()
Erklärung
Konfiguration : Legen Sie die Basis-URL Ihrer Discourse-Instanz, den API-Schlüssel, den API-Benutzernamen und den Zielbenutzernamen fest, dessen Beiträge Sie löschen möchten.
get_user_posts-Funktion : Ruft Beiträge des angegebenen Benutzers ab. Passen Sie die URL oder die Parameter je nach Ihrer Discourse-Einrichtung an.
delete_post-Funktion : Löscht einen Beitrag anhand seiner ID.
main-Funktion : Steuert den Prozess, indem zuerst die Beiträge des Benutzers abgerufen und dann jeder einzelne gelöscht wird.
Wichtige Hinweise
Ratenbegrenzungen : Beachten Sie die Ratenbegrenzungen der Discourse-API. Wenn Sie eine große Anzahl von Beiträgen löschen, sollten Sie Verzögerungen zwischen den Anfragen einfügen.
Berechtigungen : Stellen Sie sicher, dass Ihr API-Schlüssel über die erforderlichen Berechtigungen zum Löschen von Beiträgen verfügt.
Testen : Testen Sie das Skript in einer sicheren Umgebung, bevor Sie es in der Produktion ausführen.
Dieses Skript bietet ein grundlegendes Framework. Je nach Ihren spezifischen Anforderungen müssen Sie möglicherweise die API-Endpunkte, Parameter anpassen oder Fehlerbehandlung und Protokollierung hinzufügen.
BTW, warum verwenden Sie die API, um dies zu tun?
Ich denke, es kann auch als Rake-Aufgabe von der Kommandozeile aus erledigt werden.