-
Notifications
You must be signed in to change notification settings - Fork 411
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Visualizações dos Conteúdos na Semana #1677
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Usando como exemplo a primeira publicação do Filipe: Devolve: {
"week_viewers": 101
} Para comparação, estes são os dados do mesmo conteúdo no Analytics da Vercel (filtrando também pelos últimos 7 dias): {
"visitors": 109,
"page views": 123
} A Vercel considera como um único visitor os acessos pelo mesmo dispositivo dentro de 24 horas. A Cloudflare não detalha isso, mas pelo número menor de visitantes, não deve se restringir a 24 horas. |
Eu tentei simular uma nova visita consultando a API Além disso, aqui só contaram visitas com a extensão uBlock Origin desligada, o que faz sentido, visto que o uBlock Origin bloqueia a requisição feita para Não sei se a Vercel consegue contar visitas com o uBlock Origin e similares ativos. Isso poderia explicar a diferença na contagem, mas achei a diferença pequena para ser isso (101 vs 109 no seu exemplo).
Podemos fazer testes com mock da API da Cloudflare, o que permitiria garantir que apenas usuários com a permissão receberão a resposta com É viável criar um token bem restrito (em relação às permissões) que pudesse ficar público para possibilitar qualquer pessoa rodar os testes? Ou, ao menos, definir o token no ambiente de CI? Assim poderíamos ter um teste que verifica se o valor retornado para determinada publicação está no formato Outra dúvida, onde você conferiu a documentação da API da Cloudflare? Procurei algumas coisas mas só encontrei a documentação de migração, que não é muito específica quanto às possibilidades e limitações. |
Temos alguns pontos que precisam ser considerados:
Fiz alguns testes e parece que realmente é esse comportamento que acontece com Se realmente não ficar legal usando
Com algumas configurações extras nós podemos fornecer o
A Vercel consegue, pois o script é fornecido pela mesma origem:
O problema é que a Vercel não oferece esses dados em uma API pública oficial, então não dá para criar um token só para isso. Além do token normal do usuário poder ser expirado quando eles quiserem, também podem mudar o funcionamento da API sem nenhuma aviso prévio, então só compensa pensar em alguma gambiarra para usar os dados da Vercel se ficar muito ruim com os dados da Cloudflare.
Implementei como um endpoint público e com cache. Os endpoints com cache não podem ter diferenciação de acordo com permissões dos usuários. Então esse teste não seria necessário (nem possível).
O token da Cloudflare já está bem restrito, mas temos razões para não deixar público.
Isso dá para fazer, mas temos que pesar os prós e contras, pois uma indisponibilidade do serviço na Cloudflare iria barrar o CI e dificultar um deploy na Vercel.
A documentação é essa mesma, mas ela é bem incompleta. Fiz a introspecção do esquema usando GraphiQL e analisando as requisições que ocorrem na dashboard. |
Não encontrei muitas informações sobre o assunto, mas vi que aqui sugeriram o uso de
Acabei me confundindo porque temos dois tipos de
Do jeito que está implementado agora, cairia no Então, podemos ter um teste apenas para garantir que ninguém vai mudar o O mais importante me parece ser retornar um valor de visitas que faça sentido, porque não me parece útil exibir as "visitas diretas" na página da publicação (isso pode ser bem útil e interessante como estatística para o autor, pois significa visitas a partir de outros sites, mas não para quem está lendo a publicação e vendo que ela recebeu "X visitas diretas"). |
Essa sugestão serve se quisermos contar a quantidade de diferentes IPs que acessaram, então é uma terceira opção. 👍
Coloquei no ar um projeto com GraphiQL para facilitar se você quiser testar as consultas. Basta se logar com o GitHub. @filipedeschamps, seu usuário também está liberado: graphql-cloudflare-analytics.bohr.io Fiz o deploy na bohr.io, pois na Vercel dava erro na consulta que busca o esquema completo da API, já que passa do limite de 4.5MB. Para quem se interessar, o código está aqui: aprendendofelipe/GraphQL-Cloudflare-Analytics
👍
É verdade, mas o visits ainda pode ser a melhor opção. Eu desconfio que a Cloudflare só não esteja querendo dar dicas de como computa realmente as visitas (para evitar manipulação), mas no fundo deve acabar contando as navegações via SPA, pois os números que analisei eram muito próximos dos números do Analytics da Vercel. |
Ficou ótimo! Obrigado.
Fui testar aqui apenas para comparar, mas parece que ele não tem filtro para uma página específica.
Eu tentei realizar alguns testes, cada testes com duas publicações, uma visitando pelo TabNews e outra por outro site ou diretamente pelo link. Só em um teste eu consegui aumentar a quantidade de visitas, que se não me engano eu estava na página do Google e alterei a URL para a publicação, mas mesmo fazendo isso em outras publicações, não aumentou. Fui testando tanto diretamente pela API da Cloudflare quanto pela do TabNews em homologação. Realmente eles não querem facilitar manipulações 🙃 Edit: Parece que só consegui fazer contar visitas dando F5 com Referer, mas mesmo indo de um resultado direto pelo Google, sem atualizar a página, não contou. |
Fiz alguns testes ao longo dessas semanas. Além da Cloudflare só contar visitas sem o bloqueio de rastreios, parece que:
Apesar disso, não consegui ter resultados "consistentes", tanto pelo GraphiQL quanto pelo endpoint da API em homologação. Considerando os pontos da lista acima, acham interessante exibir no TabNews ou acham que isso pode ser "danoso" por ser algo manipulável / inconsistente / não sabermos exatamente como funciona? Eu fico em dúvida, mas não vejo problemas em testarmos. Acho que seria interessante ter uma publicação avisando como funciona e que, a princípio, é uma implementação temporária até termos a contagem sem limite de tempo. Pode ser ao mesmo tempo uma boa publicação falando sobre o problema e a API da Cloudflare e também um anúncio da funcionalidade. |
77b4642
to
663aac4
Compare
Estou fechando o PR porque, das diversas métricas que a Cloudflare disponibiliza via GraphQL, a única que permite filtrar por conteúdo é essa contagem de visitas que não contabiliza navegações internas, então não é o que precisamos. |
Mudanças realizadas
Adiciona uma versão beta da API que devolve a contagem de visualizações dos conteúdos:
GET /api/v1/contents/[username]/[slug]/visits
Implementei buscando dados de Analytics da Cloudflare usando a API GraphQL.
Por limitações do método de busca dos dados, por enquanto só serão contabilizadas as visitas da semana. Ou seja, independentemente da data de publicação dos conteúdos, o que será mostrado é a somatória de visitas que aquele conteúdo teve nos últimos 7 dias. E a Cloudflare já remove visitas duplicadas do mesmo dispositivo.
Nesse primeiro momento deixei o endpoint com um cache SWR de 5 minutos.
Próximos passos
É apenas o início da solução para a issue #1115.
Do principal, fica faltando a alteração da UI para mostrar os dados em cada página de conteúdos (e talvez nas listas de conteúdos).
Um ponto importante é informar na UI que as visualizações são só da última semana.
Testes
Também falta pensar em uma forma interessante de testar a funcionalidade.
Como é necessário um token da Cloudflare, além do fato de ser contabilizado apenas o tráfego que passa por ela, nem mesmo em homologação conseguimos testar direito.
Então criei um token específico para homologação, mas ele busca os dados de produção, então não terá nenhuma relação com
/[username]/[slug]
existentes em homologação, mas sim da versão de produção.Ou seja, nessa versão de homologação já é possível consultar dados reais das visualizações de qualquer publicação do TabNews. 😉
Tipo de mudança
Checklist: