É possível obter visualizações totais de categorias do Explorador de Dados somando as visualizações de todos os tópicos de uma categoria:
SELECT
c.id as category_id,
SUM(views) as "total views"
FROM categories c
JOIN topics t ON t.category_id = c.id
WHERE read_restricted is false
GROUP BY c.id
order by sum(views) desc
Obter visualizações totais por tag é semelhante:
SELECT tags.name,
sum(views)
from topics t
join topic_tags tt on t.id = topic_id
join tags on tags.id = tt.tag_id
group by tags.name
order by sum(views) desc
Há também uma tabela topic_views que poderia, em teoria, ser usada para dividir visualizações por usuário e data. No entanto, não achei essa tabela particularmente útil, pois as consultas expiram quando os tópicos têm muitas visualizações. Ela também mostra muito menos visualizações por tópico porque, se entendi corretamente, não conta visualizações anônimas. Também acho que talvez topic.views inclua não apenas visualizações anônimas, mas também tráfego de bots? É muito mais do que o que vejo no GA.
Falando em GA, ele tem todos os dados de que você precisa, mas não é fácil agrupá-los por categoria ou tag. O melhor que posso fazer é tentar analisar o pageTitle para encontrar categorias. Estou fazendo isso em R usando googleAnalyticsR. Siga as instruções no manual para autorizar sua conta do Google e obter as métricas desejadas. Certifique-se de incluir pageTitle como uma dimensão. Minhas chamadas de API se parecem um pouco com isto:
ga_this_year <- ga_data(ga_id,
date_range = c("2023-01-01", "2023-05-30" ),
metrics=c("screenPageViews","averageSessionDuration", "sessions"),
dimensions = c("pageTitle", "deviceCategory")
)
A chave para entender o próximo trecho é ver que os pageTitles se encaixam neste formato geral:
Título do tópico - Categoria - Título do site
Se o tópico não for categorizado, a Categoria estará faltando. Há também um monte de páginas de utilidade (“Últimos tópicos”, “Novos tópicos”, etc.) que não têm categorias. (Não estou contando “Últimos tópicos [categoria]” como parte da categoria, embora possa ser melhor incluí-los.) Finalmente, a página inicial usa Título do site - Descrição curta do site para o título da página. No entanto, não nos importamos com nenhum desses. Portanto, a regex que estou usando é:
str_extract(pageTitle,
str_glue(".*? - (.*) - {sitename}"),
group=1)
Colocando tudo em uma função que agrupa por categoria, obtenho algo assim:
category_views <- function(data, sitename = "Meta Jon") {
data %>%
mutate(category = str_extract(
pageTitle,
str_glue(".*? - (.*) - {sitename}"),
group=1
)) %>%
group_by(category) %>%
summarise(views = sum(screenPageViews)) %>%
arrange(desc(views)) #%>% head(20)
}
category_views(ga_this_year)
(Obviamente, mude “Meta Jon” para o nome do seu próprio site.)
Atualmente, não sei como extrair dados do GA com base em tags.