Парсинг исторических данных о подписчиках аккаунтов соцсетей через API LiveDune (R Script), вторая часть

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

API LiveDune имеет онлайн-документацию для взаимодействия, но совершенно не имеет примеров исполнения в виде действующего кода.

LiveDune — сервис аналитики соцсетей: Instagram, ВКонтакте и ...
Getting to know the R programming language | WorkingNation

Получать данные не только о своих, но и о чужих данных, добавленных на дэшборд 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.

Rstudio un IDE para el lenguaje de programación R en Linux

Сперва вызовем необходимые библиотеки. Если какая-либо библиотека отсутствует у вас, установите ее через 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 за весь доступный период.

Если у вас возникнут дополнительные вопросы, пишите мне в Facebook. Спасибо за внимание.

Тэги урока: api, FB, instagram, Livedune, OK, parsing, R, Rstudio, VK, youtube, данные, исторические, подписчики
Назад: Исследование данных в Digital маркетинге