Baixar histórico de postagens de um usuário via API do Discourse?

Olá,

Para cumprir nossas obrigações legais, precisamos de uma maneira de permitir que os usuários baixem seu histórico completo de postagens (não trechos) por meio da API do Discourse, para que os dados possam ser incluídos quando um usuário fizer uma solicitação de DSAR diretamente ao nosso site/equipe jurídica (para que recebam um registro completo de seus dados do Last.fm e dos dados de postagens no Discourse). Isso é possível atualmente? E, se for, qual é a maneira correta de proceder?

Tínhamos tentado fazer isso usando o endpoint get user actions (Discourse API Docs), mas parece que ele retorna apenas um registro parcial com trechos, e não postagens completas.

Sei que os usuários já podem baixar seus dados diretamente na página de configurações de atividade do Discourse, mas temo que isso não seja suficiente para satisfazer nossa equipe jurídica (:roll_eyes:) — eles estão insistindo que os dados sejam baixados do nosso site. Alguma ideia? Estou preocupado de que possamos ser forçados a cancelar nosso plano de hospedagem se não resolvermos isso.

Agradeço antecipadamente por qualquer ajuda. :pensive:

Bem, você poderia, em teoria, fazer isso usando a API (veja Como fazer engenharia reversa da API do Discourse), mas não há uma maneira fácil de contornar a exigência de que o usuário clique no link de validação de e-mail, que o protege contra alguém baixando seus dados.

Como Jay observou, uma solicitação POST autenticada para /export_csv/export_entity.json pode ser usada para gerar o arquivo. Para isso, você precisa usar uma chave de API Global de Todos os Usuários. Defina o nome de usuário da API da solicitação como o nome de usuário do usuário para o qual deseja criar o arquivo. Você deve fornecer um parâmetro entity na solicitação. O parâmetro entity deve ser definido como user_archive. Com essa abordagem, uma notificação será gerada para o usuário. Para a maioria dos usuários, isso também enviará um e-mail contendo um link de download, mas não acho que isso possa ser garantido — depende de como o usuário configurou suas preferências de e-mail.

Um exemplo de solicitação curl para gerar o arquivo. Substituí $api_key por uma chave de API Global de Todos os Usuários na solicitação:

curl -X POST "http://localhost:3000/export_csv/export_entity.json" -H "Api-Username: Ben" -H "Api-Key: $api_key" -F "entity=user_archive"

Não tenho certeza se existe alguma maneira de gerar o arquivo de forma que permita compartilhá-lo sem que o usuário precise acessar a notificação e clicar no link de download. Talvez seja possível desenvolver uma consulta no Data Explorer que retorne as informações. Você poderia então executar a consulta do Data Explorer via API. A desvantagem dessa abordagem é que, se houver mais de 10.000 linhas de dados retornadas pela consulta, você precisará fazer várias solicitações para obter os dados. Para mais detalhes sobre a abordagem do Data Explorer, consulte: Como executar consultas do Data Explorer com a API do Discourse.

Obrigado! Vou encaminhar essas informações para nossa equipe de desenvolvimento — espero que consigamos resolver isso sem muita dificuldade. :crossed_fingers: