È possibile ottenere le visualizzazioni totali per categoria da Data Explorer sommando le visualizzazioni di tutti gli argomenti di una 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
Ottenere le visualizzazioni totali per tag è simile:
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
Esiste anche una tabella topic_views che potrebbe, in teoria, essere utilizzata per dividere le visualizzazioni per utente e data. Tuttavia, non ho trovato quella tabella particolarmente utile, poiché le query vanno in timeout quando gli argomenti hanno molte visualizzazioni. Mostra anche molte meno visualizzazioni per argomento perché, se ho capito bene, non conta le visualizzazioni anonime. Penso anche che topic.views includa non solo le visualizzazioni anonime ma anche il traffico dei bot? È molto di più di quello che vedo su GA.
Parlando di GA, contiene tutti i dati di cui hai bisogno, ma non è facile raggrupparli per categoria o tag. Il massimo che posso fare è provare a fare il parsing di pageTitle per trovare le categorie. Lo sto facendo in R usando googleAnalyticsR. Segui le istruzioni nel manuale per autorizzare il tuo account Google e ottenere le metriche desiderate. Assicurati di includere pageTitle come dimensione. Le mie chiamate API sono un po’ così:
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")
)
La chiave per capire il passaggio successivo è vedere che i pageTitles seguono questo formato generale:
Titolo argomento - Categoria - Titolo sito
Se l’argomento non è categorizzato, la Categoria è mancante. Ci sono anche molte pagine di utilità (“Ultimi argomenti”, “Nuovi argomenti”, ecc.) che non hanno categorie. (Non sto contando “Ultimi argomenti [categoria]” come parte della categoria, anche se potrebbe essere meglio includerli.) Infine, la homepage usa Titolo sito - breve descrizione sito per il titolo della pagina. Tuttavia, non ci interessa nessuno di questi. Quindi, la regex che sto usando è:
str_extract(pageTitle,
str_glue(".*? - (.*) - {sitename}"),
group=1)
Mettendo tutto insieme in una funzione che raggruppa per categoria, ottengo qualcosa di simile:
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)
(Ovviamente cambia “Meta Jon” con il nome del tuo sito.)
Attualmente non so come estrarre i dati GA in base al tag.