Парсинг исторических данных о подписчиках аккаунтов соцсетей через API LiveDune (R Script), вторая часть
Приветствую. Во втором уроке по теме использования API LiveDune я также поделюсь с вами кодом на R, предназначенном для взаимодействия с API сервиса LiveDune. На этот раз мы вытащим историю изменения числа подписчиков на каждом аккаунте, прикрепленном к сервису.
API LiveDune имеет онлайн-документацию для взаимодействия, но совершенно не имеет примеров исполнения в виде действующего кода.


Получать данные не только о своих, но и о чужих данных, добавленных на дэшборд LiveDune.
В этом уроке вы найдете код на языке R для получения исторических данных о подписчиках аккаунтов соцсетей на балансе кабинета LiveDune через API сервисе.
Ссылка на предыдущий урок по теме, где мы разбирали парсинг отдельных постов.
Важное отступление. Я не имею отношения к LiveDune, это платный сервис, и поэтому вариант парсинга через него может подойти не всем. Также этот код не был написан внутри LiveDune, и не поддерживается разработчиками оригинального продукта.
Покончив с формальностями, можно переходить к парсингу исторических данных о количестве подписчиков
Особенности парсинга данных о подписчиках в соцсетях через Livedune
Давайте для начала поймем, что мы получим в итоге.
Это будет CSV файл, где каждая строка будет соответствовать состоянию каждого отдельного аккаунта из дэшборда LiveDune за каждый отдельный день существования аккаунта. Разумеется. при наличии этих данных внутри сервиса. И тут нужно понимать, что если у вас много аккаунтов, которые вы собираетесь отслеживать, то документ может получиться довольно объемным. Например, для 150 среднестатистических аккаунтов со средним возрастом от 3 до 6 лет вы получите около 400 тысяч строк и документ размером ~ 90 мегабайт.
Высока вероятность превышения лимита Google Spreadsheets, а потому, хоть я и оставлю код, предназанченый для отгрузки результата в Spreadsheets, я сделаю его неактивным. Если вы захотите попробовать его в деле, уберите перед ним шарп.
На момент написания этого урока, лимиты Google Sheets были такие:
- 5 миллионов клеток на документ и все его листы
- Не более 100 мб размер документа при импорте
Код для получения количества подписчиков в CSV.
Перед стартом написания кода вам необходимо зарегистрироваться в LiveDune (по ссылке — 3 дня бесплатного доступа), ознакомиться с документацией по API от сервиса LiveDune и получить API ключ.
Вам так же понадобится аккаунт в Google Docs, если вы все-таки хотите автоматически отгружать данные Spreadsheets. Про особенности лимитов Google Sheets я написал выше.
Код написан на языке R. Рекомендую использовать для работы бесплатную среду R Studio.

Сперва вызовем необходимые библиотеки. Если какая-либо библиотека отсутствует у вас, установите ее через install.packages(«название библиотеки»).
#install.packages("httr")
library(httr)
#install.packages("tidyverse")
library(tidyverse)
library(jsonlite)
#install.packages("googlesheets4")
library(googlesheets4)
#install.packages("here")
library(here)
Далее создаем функцию для сбора информации об аккаунтах из API Livedune. Здесь есть одна хитрость. Выдача данных от LiveDune имеет лимит в 100 элементов. Для перехода на следующую страницу мы прописываем в функцию get-параметр after, полученный на предыдущей странице выдачи. В сборе функция выглядит вот так:
get_all_iteration <- function(url, apiKey, resp, accounts_df, account){
while(length(resp$response) > 0) {
after <- resp$after
account <- account
url <- if_else(url == "accounts",
glue::glue("https://api.livedune.ru/accounts"),
glue::glue('https://api.livedune.ru/accounts/{account}./posts'))
resp <- GET(as.character(url),
query = list(access_token=apiKey,
after = after)
)$content %>%
rawToChar() %>%
fromJSON(flatten = T)
accounts <- resp$response %>%
as_tibble()
accounts_df <- accounts_df %>%
bind_rows(accounts)
}
return(accounts_df)
}
Далее мы создаем параметр apiKey с вашим ключом API, после чего запрашиваем у LiveDune таблицу accounts_df со списком аккаунтов.
apiKey <- "ВАШ_КЛЮЧ_API"
accounts_url <- "https://api.livedune.ru/accounts"
resp <- GET(accounts_url, query = list(access_token=apiKey))$content %>%
rawToChar() %>%
fromJSON(flatten = T)
accounts_df <- resp$response %>%
as_tibble() %>%
get_all_iteration("accounts",apiKey, resp, ., "a")
Далее мы создаем функцию для выгрузки исторических данных о подписчиках.
get_history <- function(account, apiKey){
apiKey <- "ВАШ_КЛЮЧ_API"
resp <- GET(paste0("https://api.livedune.ru/accounts/",account,"/history"),
query = list(access_token=apiKey))$content %>%
rawToChar() %>%
fromJSON(flatten = T)
if (length(resp$response) != 0) {
posts_df = resp$response %>%
as_tibble() %>%
get_all_iteration("history", apiKey, resp, ., account) %>%
select(created, followers)
} else {
posts_df = NA
}
return(posts_df)
}
При помощи tibble комбинируем результат выполнения функций. Секция defalult в LiveDune содержит данные по аккаунтам из «Проверки Аккаунтов», поэтому исключаем ее из выдачи. Если нужны данные только из проверки аккаунтов, убрать восклицательный знак из «filter(project != «default») %>%»
В зависимости от количества аккаунтов в LiveDune а также возраста этих аккаунтов, процесс построения базы данных с цифрами подписчиков может занять от 1 до 20 минут. Итоговый датафрейм будет называться df_history
accounts_df %>% filter(project != "default") %>% mutate(history = map(id, get_history)) %>% unnest(history) -> df_history
Теперь сохраняем полученные данные в CSV файл, пригодный для дальнейшего изучения и анализа. Файл сохрантся в папку вашего проекта в Rstudio.
df_history %>%
write_csv(here::here("df_history.csv"))
Если не можете найти папку вашего проекта в системе, выполните вот этот код в консоли R, он покажет адрес рабочей папки текущего проекта
getwd()
Если все-таки хотим отгрузить данные на Google Sheets
При помощи gs4_auth проходим авторизацию в Google Sheets, получаем токен доступа. Далее мы отгружаем датафрейм в таблицу в Google Docs. Чтобы функция sheet_write знала в какую таблицу писать результат, вставьте ID таблицы в значение параметра ss. Это может быть ID, уникальная ссылка таблицы или другие приемлемые значения
Справку по функции sheet_write можно получить здесь
gs4_auth(use_oob = TRUE)
df %>%
write_csv(here::here("df_all.csv"))
sheet_write(ss = "ID вашей таблицы", sheet = "df")
Работа функции может занять до 20 минут на особо больших документах. Если вы получили ошибку и загрузка прервалась, это значит, вы превысили лимиты Google Sheets.
Вот и всё, мы получили документ, содержащий исторические данные по изменению количества подписчиков во всех аккаунтах на балансе Livedune за весь доступный период.
