Lilly
(Lillian )
4 Aprile 2024, 5:01am
3
A proposito, non credo che ci sia un modo per eliminare in blocco tramite l’API. Penso che tu debba scrivere uno script per scorrere ogni post da eliminare. A seconda del numero di post, i limiti di frequenza potrebbero essere un problema.
Lola, come scrivo uno script per eliminare in blocco i post di Discourse?
Lola the Coding Assistant Bot:
Per eseguire l’elaborazione batch per l’eliminazione dei post di Discourse, puoi utilizzare un linguaggio di scripting come Python. Di seguito è riportato un esempio di script che dimostra come automatizzare l’eliminazione dei post per un utente specifico. Questo script:
Recupera i post di un utente specifico.
Itera sull’elenco dei post.
Elimina ogni post individualmente.
Esempio di script Python
import requests
# Configurazione
discourse_base_url = 'http://yourdiscourse.example.com'
api_key = 'your_api_key'
api_username = 'your_admin_username'
target_username = 'targetUser'
# Intestazioni per le richieste API
headers = {
'Api-Key': api_key,
'Api-Username': api_username
}
def get_user_posts(username):
"""Recupera i post di un utente specifico."""
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):
"""Elimina un post specifico."""
url = f'{discourse_base_url}/posts/{post_id}.json'
response = requests.delete(url, headers=headers)
return response.status_code == 200
def main():
# Recupera i post dell'utente
posts = get_user_posts(target_username)
# Elimina ogni post
for post in posts:
post_id = post.get('id')
if delete_post(post_id):
print(f'Post {post_id} eliminato con successo')
else:
print(f'Impossibile eliminare il post {post_id}')
if __name__ == '__main__':
main()
Spiegazione
Configurazione : Imposta l’URL di base della tua istanza Discourse, la chiave API, il nome utente API e il nome utente di destinazione i cui post desideri eliminare.
Funzione get_user_posts : Recupera i post dell’utente specificato. Modifica l’URL o i parametri secondo necessità in base alla tua configurazione di Discourse.
Funzione delete_post : Elimina un post tramite il suo ID.
Funzione main : Orchestra il processo recuperando prima i post dell’utente ed eliminandoli poi uno per uno.
Note importanti
Limiti di frequenza : Tieni presente i limiti di frequenza dell’API di Discourse. Se stai eliminando un gran numero di post, considera l’aggiunta di ritardi tra le richieste.
Autorizzazioni : Assicurati che la tua chiave API disponga delle autorizzazioni necessarie per eliminare i post.
Test : Testa lo script in un ambiente sicuro prima di eseguirlo in produzione.
Questo script fornisce un framework di base. A seconda delle tue esigenze specifiche, potrebbe essere necessario modificare gli endpoint API, i parametri o aggiungere gestione degli errori e logging.
A proposito, perché usi l’API per fare questo?
Penso che possa essere fatto anche come task rake dalla riga di comando.