Supprimer tous les messages d'un utilisateur sur tout le site via l'API ?

Soit dit en passant, je ne pense pas qu’il y ait de moyen de supprimer en masse via l’API. Je pense que vous devez écrire un script pour parcourir chaque publication afin de la supprimer. Selon le nombre de publications, les limites de débit pourraient poser problème.

Lola, comment écrire un script pour supprimer en masse des publications Discourse ?

[quote=“Lola l’assistant de codage”]Pour effectuer un traitement par lots afin de supprimer des publications Discourse, vous pouvez utiliser un langage de script comme Python. Vous trouverez ci-dessous un exemple de script qui montre comment automatiser la suppression de publications pour un utilisateur spécifique. Ce script :

  1. Récupère les publications d’un utilisateur spécifique.
  2. Itère sur la liste des publications.
  3. Supprime chaque publication individuellement.

Exemple de script Python

import requests

# Configuration
discours_base_url = 'http://votrediscours.example.com'
api_key = 'votre_cle_api'
api_username = 'votre_nom_utilisateur_admin'
nom_utilisateur_cible = 'utilisateurCible'

# En-têtes pour les requêtes API
headers = {
    'Api-Key': api_key,
    'Api-Username': api_username
}

def get_user_posts(username):
    """Récupère les publications d'un utilisateur spécifique."""
    posts = []
    url = f'{discours_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):
    """Supprime une publication spécifique."""
    url = f'{discours_base_url}/posts/{post_id}.json'
    response = requests.delete(url, headers=headers)
    return response.status_code == 200

def main():
    # Récupère les publications de l'utilisateur
    posts = get_user_posts(nom_utilisateur_cible)
    
    # Supprime chaque publication
    for post in posts:
        post_id = post.get('id')
        if delete_post(post_id):
            print(f'Publication {post_id} supprimée avec succès')
        else:
            print(f'Échec de la suppression de la publication {post_id}')

if __name__ == '__main__':
    main()

Explication

  • Configuration : Définissez l’URL de base de votre instance Discourse, votre clé API, votre nom d’utilisateur API et le nom d’utilisateur cible dont vous souhaitez supprimer les publications.
  • Fonction get_user_posts : Récupère les publications de l’utilisateur spécifié. Adaptez l’URL ou les paramètres selon votre configuration Discourse.
  • Fonction delete_post : Supprime une publication par son ID.
  • Fonction main : Orchestre le processus en récupérant d’abord les publications de l’utilisateur, puis en supprimant chacune d’elles.

Notes importantes

  • Limites de débit : Soyez conscient des limites de débit de l’API Discourse. Si vous supprimez un grand nombre de publications, envisagez d’ajouter des délais entre les requêtes.
  • Permissions : Assurez-vous que votre clé API dispose des permissions nécessaires pour supprimer des publications.
  • Tests : Testez le script dans un environnement sûr avant de l’exécuter en production.

Ce script fournit un cadre de base. Selon vos besoins spécifiques, vous pourriez avoir besoin d’ajuster les points d’accès API, les paramètres, ou d’ajouter une gestion des erreurs et une journalisation.
[/quote]

Soit dit en passant, pourquoi utilisez-vous l’API pour faire cela ?

Je pense que cela peut également être fait sous forme de tâche Rake à partir de la ligne de commande.