Lilly
(Lillian )
4 Abril , 2024 05:01
3
Aliás, não acredito que exista uma maneira de excluir em massa pela API. Acho que você precisa escrever um script para percorrer cada postagem para excluí-la. Dependendo de quantas postagens, os limites de taxa podem ser um problema.
Lola, como escrevo um script para excluir postagens do Discourse em massa?
Para realizar o processamento em lote para excluir postagens do Discourse, você pode usar uma linguagem de script como Python. Abaixo está um script de exemplo que demonstra como automatizar a exclusão de postagens para um usuário específico. Este script:
Busca postagens de um usuário específico.
Itera pela lista de postagens.
Exclui cada postagem individualmente.
Exemplo de Script Python
import requests
# Configuração
url_base_discourse = 'http://seudiscurso.exemplo.com'
chave_api = 'sua_chave_api'
nome_usuario_admin = 'seu_nome_de_usuario_admin'
nome_usuario_alvo = 'usuarioAlvo'
# Cabeçalhos para requisições de API
cabecalhos = {
'Api-Key': chave_api,
'Api-Username': nome_usuario_admin
}
def obter_postagens_do_usuario(username):
"""Busca postagens de um usuário específico."""
postagens = []
url = f'{url_base_discourse}/posts.json?username={username}'
resposta = requests.get(url, headers=cabecalhos)
if resposta.status_code == 200:
dados_postagens = resposta.json()
postagens = dados_postagens.get('latest_posts', [])
return postagens
def excluir_postagem(id_postagem):
"""Exclui uma postagem específica."""
url = f'{url_base_discourse}/posts/{id_postagem}.json'
resposta = requests.delete(url, headers=cabecalhos)
return resposta.status_code == 200
def main():
# Busca postagens do usuário
postagens = obter_postagens_do_usuario(nome_usuario_alvo)
# Exclui cada postagem
for postagem in postagens:
id_postagem = postagem.get('id')
if excluir_postagem(id_postagem):
print(f'Postagem {id_postagem} excluída com sucesso')
else:
print(f'Falha ao excluir postagem {id_postagem}')
if __name__ == '__main__':
main()
Explicação
Configuração : Defina a URL base da sua instância do Discourse, a chave da API, o nome de usuário da API e o nome de usuário de destino cujas postagens você deseja excluir.
Função obter_postagens_do_usuario : Busca postagens do usuário especificado. Ajuste a URL ou os parâmetros conforme necessário com base na sua configuração do Discourse.
Função excluir_postagem : Exclui uma postagem pelo seu ID.
Função main : Orquestra o processo, primeiro buscando as postagens do usuário e depois excluindo cada uma delas.
Observações Importantes
Limites de Taxa : Esteja ciente dos limites de taxa da API do Discourse. Se você estiver excluindo um grande número de postagens, considere adicionar atrasos entre as requisições.
Permissões : Certifique-se de que sua chave de API tenha as permissões necessárias para excluir postagens.
Teste : Teste o script em um ambiente seguro antes de executá-lo em produção.
Este script fornece uma estrutura básica. Dependendo das suas necessidades específicas, você pode precisar ajustar os endpoints da API, os parâmetros ou adicionar tratamento de erros e logs.
Aliás, por que você está usando a API para fazer isso?
Acho que também pode ser feito como uma tarefa rake pela linha de comando.