Получить общее количество просмотров категории через Data Explorer можно, просуммировав просмотры всех тем в этой категории:
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
Получение общего количества просмотров по тегу выполняется аналогично:
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
Также существует таблица topic_views, которую теоретически можно использовать для разделения просмотров по пользователям и датам. Однако я не нашел эту таблицу особенно полезной, так как запросы к ней завершаются по таймауту, если у тем много просмотров. Кроме того, в ней отображается значительно меньше просмотров на тему, поскольку, насколько я понимаю, она не учитывает анонимные просмотры. Мне также кажется, что topic.views включает не только анонимные просмотры, но и трафик от ботов? Их значительно больше, чем я вижу в GA.
Кстати, о GA: в ней есть все необходимые данные, но группировка по категориям или тегам затруднена. Лучшее, что я могу сделать, — попытаться распарсить pageTitle, чтобы найти категории. Я делаю это в R с помощью пакета googleAnalyticsR. Следуйте инструкциям в руководстве, чтобы авторизовать свой аккаунт Google и получить нужные метрики. Обязательно включите pageTitle в качестве измерения. Мои вызовы API выглядят примерно так:
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")
)
Ключ к пониманию следующего шага — увидеть, что заголовки страниц (pageTitles) обычно имеют следующий формат:
Заголовок темы - Категория - Название сайта
Если тема не имеет категории, поле категории отсутствует. Также существует ряд служебных страниц («Последние темы», «Новые темы» и т. д.), у которых нет категорий. (Я не считаю «Последние темы [категории]» частью категории, хотя, возможно, их стоит включать.) Наконец, главная страница использует формат Название сайта - краткое описание сайта для заголовка страницы. Однако нас это не интересует. Поэтому используемое мной регулярное выражение выглядит так:
str_extract(pageTitle,
str_glue(".*? - (.*) - {sitename}"),
group=1)
Объединив это в функцию, группирующую данные по категориям, я получаю что-то вроде этого:
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)
(Очевидно, замените “Meta Jon” на название вашего собственного сайта.)
В настоящее время я не знаю, как извлекать данные из GA на основе тегов.