Como eu faria isso? Não consigo entender o que fazer…
Eu olhei:
mas não entendi. A principal coisa que também não entendo é como obter cada ID aleatório e depois enviá-lo para ser excluído, já que cada ID é diferente…
Como eu faria isso? Não consigo entender o que fazer…
Eu olhei:
mas não entendi. A principal coisa que também não entendo é como obter cada ID aleatório e depois enviá-lo para ser excluído, já que cada ID é diferente…
Lola, como se excluem todas as postagens do Discourse de um usuário usando a API?
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?
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.
Obrigado, vou tentar isso ainda hoje! Então, esse negócio de rake pode ser feito como um usuário normal? Eu gostaria que tudo isso fosse feito como um usuário normal que não seja da equipe.
Isso.
Quando executei o script Python abaixo:
import requests
# Configuration
discourse_base_url = 'https://forums.mysite.me/'
api_key = 'eb4065d1dergrgh45h45h54h45reg4g70cbeb274bf7f87'
api_username = 'username'
target_username = 'targetusername'
# Headers for API requests
headers = {
'eb4065d1dergrgh45h45h54h45reg4g70cbeb274bf7f87': api_key,
'B': api_username
}
def get_user_posts(username):
"""Fetch posts by a specific user."""
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):
"""Delete a specific post."""
url = f'{discourse_base_url}/posts/{post_id}.json'
response = requests.delete(url, headers=headers)
return response.status_code == 200
def main():
# Fetch user posts
posts = get_user_posts(target_username)
# Delete each post
for post in posts:
post_id = post.get('id')
if delete_post(post_id):
print(f'Successfully deleted post {post_id}')
else:
print(f'Failed to delete post {post_id}')
if __name__ == '__main__':
main()
No meu terminal/console, recebo:
Failed to delete post 73
Failed to delete post 71
Failed to delete post 69
Failed to delete post 60
Failed to delete post 47
Tentei 2 chaves de API que criei. Uma com apenas eu quem pode usá-la e outra com todos os usuários. Ambas as vezes, usei a opção Global. Mesmo resultado.
Isso não vai funcionar. Mesmo para solicitações de API. Após um certo ponto, os usuários não podem excluir suas próprias postagens.
Geralmente, a melhor opção é anonimizar todas as postagens de um usuário se ele não quiser mais fazer parte do fórum. Isso simplesmente mudará o nome de usuário dele para algo aleatório para que suas postagens não sejam mais associadas a ele.
@Lilly Vi a resposta que você excluiu. Então, e quanto a fazê-lo funcionar para mim ou para outro usuário administrador? Não tenho certeza se você viu, mas editei minha postagem acima para incluir o resultado que estou obtendo ao usar esse script.
Acho que o mesmo pode ser perguntado a você também, @blake, haha.
Isso é apenas para teste no momento.
Eu apaguei porque o Blake já respondeu.
Você pode tentar esta solicitação curl para o seu post id
curl -i -sS -X DELETE "http://localhost:4200/posts/<post-id>.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: key" \
-H "Api-Username: username"
Para ver se ele retorna um erro diferente, mas provavelmente ele apenas dirá “Ocorreu um erro” ![]()
Parece que existem algumas configurações do site em torno de usuários excluindo postagens que você pode ajustar. Também parece que pode haver um botão “Excluir todas as postagens” em algum lugar.
Tentando o comando curl acima:
curl -X GET "https://forums.mysite.me/posts.json?username=targetusername" \
-H "Api-Key: eb4065d56u7u6u65u54y54uy566575w4yer343434ac8a770cbeb274bf7f87" \
-H "Api-Username: AdminUsername"
Então, ele executou e me trouxe os posts… mas então recebi isso:
C:\Users\User>-H "Api-Key: eb4065d56u7u6u65u54y54uy566575w4yer343434ac8a770cbeb274bf7f87"
'-H' não é reconhecido como um comando interno ou externo,
um programa operável ou um arquivo em lotes.
C:\Users\User>-H "Api-Username: AdminUsername"
'-H' não é reconhecido como um comando interno ou externo,
um programa operável ou um arquivo em lotes.
Isso é normal ou por que está acontecendo?
O comando curl que você inseriu não é o mesmo que o de acima.
Parece que você está usando o terminal cmd do Windows, talvez ele não goste de \\ separando as linhas. Você pode simplesmente removê-los para que tudo fique em uma única linha.
Já tentei sem as barras. Colocar tudo em uma linha corrigiu, obrigado!
Desculpe, quis dizer o que a Lilly compartilhou.
Parece que há um endpoint para excluir em lote todas as postagens de um usuário.
Ele é acionado por este botão na página de usuários do painel de administração
Então, em vez de ter que inserir manualmente um post-id (porque nesse ponto, eu poderia muito bem ir ao site real e apenas clicar nos botões de exclusão, certo?), como isso pode ser preenchido automaticamente para cada post?
Ah, ótimo! Então eu faria a URL:
http://mysite.com/admin/users/79/delete_posts_batch?
Ou, o que é o “79” aqui? um ID de usuário, presumo, que você obtém quando acessa o perfil do usuário?
Sim, esse é o ID do usuário, e é uma requisição PUT. Ela retorna o número de posts excluídos.
Então, eu não faria?
curl -i -sS -X DELETE "http://forums.mysite.com/admin/users/0/delete_posts_batch" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: eb4065d45745678u564754y4545y545445674y34545y50cbeb274bf7f87" \
-H "Api-Username: AdminUsername"
Não é uma requisição DELETE, mas sim PUT. Além disso, não há parâmetros de formulário aqui.
Se for um administrador a realizar a exclusão, existe uma operação de administrador para \u003ckbd\u003e:lixeira: Excluir todas as postagens\u003c/kbd\u003e de um usuário.
Pode ser necessário ajustar outras configurações primeiro para permitir isso (excluir todas as postagens máx.).
Espero certamente que esta não seja a chave de API real do seu site. Como observado anteriormente, é muito fácil descobrir qual é o seu site.
Você deve considerar esta chave como queimada e rotacioná-la.
Então é só remover completamente essa linha do formulário?
EDIT: Mantive a linha e apenas troquei “DELETE” por “PUT” e funcionou.
Excluir posts usando a API está falhando para mim com um erro 403 e o corpo {“errors”:[“Você não tem permissão para visualizar o recurso solicitado.”],“error_type”:“invalid_access”}
Alguma ideia de qual pode ser a correção?