Lilly
(Lillian )
4 Abril, 2024 05:01
3
Por cierto, no creo que haya una forma de eliminar masivamente a través de la API. Creo que necesitas escribir un script para recorrer cada publicación y eliminarla. Dependiendo de cuántas publicaciones, los límites de tasa podrían ser un problema.
Lola, ¿cómo escribo un script para eliminar masivamente publicaciones de Discourse?
Lola la Bot Asistente de Codificación:
Para lograr el procesamiento por lotes para eliminar publicaciones de Discourse, puedes usar un lenguaje de scripting como Python. A continuación, se muestra un script de ejemplo que demuestra cómo automatizar la eliminación de publicaciones para un usuario específico. Este script:
Recupera las publicaciones de un usuario específico.
Itera a través de la lista de publicaciones.
Elimina cada publicación individualmente.
Ejemplo de script de Python
import requests
# Configuración
discours_base_url = 'http://yourdiscourse.example.com'
api_key = 'your_api_key'
api_username = 'your_admin_username'
target_username = 'targetUser'
# Encabezados para solicitudes de API
headers = {
'Api-Key': api_key,
'Api-Username': api_username
}
def get_user_posts(username):
"""Recupera las publicaciones de un usuario específico."""
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):
"""Elimina una publicación específica."""
url = f'{discours_base_url}/posts/{post_id}.json'
response = requests.delete(url, headers=headers)
return response.status_code == 200
def main():
# Recuperar publicaciones del usuario
posts = get_user_posts(target_username)
# Eliminar cada publicación
for post in posts:
post_id = post.get('id')
if delete_post(post_id):
print(f'Publicación {post_id} eliminada con éxito')
else:
print(f'Error al eliminar la publicación {post_id}')
if __name__ == '__main__':
main()
Explicación
Configuración : Establece la URL base de tu instancia de Discourse, la clave de API, el nombre de usuario de la API y el nombre de usuario de destino cuyas publicaciones deseas eliminar.
Función get_user_posts : Recupera las publicaciones del usuario especificado. Ajusta la URL o los parámetros según sea necesario según tu configuración de Discourse.
Función delete_post : Elimina una publicación por su ID.
Función main : Orquesta el proceso recuperando primero las publicaciones del usuario y luego eliminando cada una.
Notas importantes
Límites de tasa : Ten en cuenta los límites de tasa de la API de Discourse. Si estás eliminando una gran cantidad de publicaciones, considera agregar demoras entre las solicitudes.
Permisos : Asegúrate de que tu clave de API tenga los permisos necesarios para eliminar publicaciones.
Pruebas : Prueba el script en un entorno seguro antes de ejecutarlo en producción.
Este script proporciona un marco básico. Dependiendo de tus necesidades específicas, es posible que necesites ajustar los puntos finales de la API, los parámetros o agregar manejo de errores y registro.
POR CIERTO, ¿por qué usas la API para hacer esto?
Creo que también se puede hacer como una tarea de rake desde la línea de comandos.