Continuando a discussão de Obter e-mail do usuário, emails.json parece não funcionar:
A documentação da API para list_users afirma que a resposta JSON resultante fornece o campo email. A discussão acima menciona que:
Usando uma chave de API de equipe, quando chamo client.list_users('staff'), recebo uma lista de usuários, mas apenas minha entrada mostra o campo de e-mail. Eu esperaria que o campo de e-mail fosse retornado para todos os usuários na lista. Caso contrário, tenho que chamar a API novamente para cada usuário para recuperar o e-mail.
Como tenho um arquivo CSV com nomes e e-mails, só posso pesquisar usuários por seus e-mails para manipular os registros ou criar novos usuários a partir da lista de entrada. Isso torna o trabalho um pouco tedioso e propenso a erros.
Em geral, acho que os e-mails devem estar disponíveis de forma clara para a equipe ou como um hash SHA256, talvez com algum salt que impediria atacantes arbitrários de descobrir se um e-mail é usado neste site — embora existam outras maneiras de fazer isso, como lembretes de senha ou registro. Usar um hash criptográfico do e-mail permitiria verificar sua presença sem divulgá-lo.
De qualquer forma, acho que não ter o valor do e-mail na lista de usuários usando uma chave de API de equipe é um bug e deve ser corrigido.
Enquanto isso, uma vez que você tenha a lista de usuários, deve iterar sobre ela e chamar /u/#{username}/emails.json para injetar o e-mail faltante na lista.
Aqui está algum código:
module DiscourseApi::API::Users
def user_email(username)
response = get("/u/#{username}/emails.json")
response.body['email']
end
end
staff = client.list_users('staff')
staff.each_with_index do |u, i|
next unless u['email'].nil?
staff[i]['email'] = client.user_email(u['username'])
end
staff.sample['email'].nil? # => false