Парсинг исторических данных о подписчиках аккаунтов соцсетей через 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 за весь доступный период.