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

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

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

Я покажу два варианта кода, один для парсинга постов и статистики, другой — для парсинга исторических данных по подписчикам в аккаунтах. Причем, можно получать данные не только о своих, но и о чужих данных, добавленных на дэшборд LiveDune.

В этом уроке вы найдете код на языке R для получения списка соцсетей на балансе кабинета LiveDune через API, а также всех постов на каждом аккаунте и всей статистики по каждому из них. Обратите внимание, что получить сведения по просмотрам видео можно только с тех аккаунтов в Instagram, которые были переведены в бизнес-профиль.

Следущий вариант кода я размещу в следующем уроке в ближайшее время.

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

Альтернатива парсингу через API LiveDune

На сайте OpenSMM уже был урок на тему парсинга Instagram через код на Python и библиотек от LevPasha, но этот способ, к сожалению, более не актуален. Тем не менее, вы все еще можете посмотреть тот урок на сайте.

Какие еще есть альтернативы, если вам нужно получить данные из социальных сетей? Доступ через Instagram Graph API Access Token.

В сети можно найти много видео на эту тему. Суть в том, что получить этот токен в режиме разработчика может любой человек, и не смотря на его ограниченные ресурсы, его можно использовать для получения данных о своих аккаунтах. Чуть подробней можно узнать в этих видео:

Для соцсетей Mail Ru Group существует возможность получения данных через их открытые API. Пример для VK можно посмотреть тут.


Код для получения статистики в CSV и отгрузки на Google Spreadsheets.

Перед стартом написания кода вам необходимо зарегистрироваться в LiveDune (по ссылке — 3 дня бесплатного доступа), ознакомиться с документацией по API от сервиса LiveDune и получить API ключ. Вам так же понадобится аккаунт в Google Docs, если вы хотите автоматически отгружать данные Spreadsheets.

Код написан на языке 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_posts <- function(account, apiKey){
  apiKey <- "ВАШ_КЛЮЧ_API"
  resp <-  GET(paste0("https://api.livedune.ru/accounts/",account,"/posts"),
            query = list(access_token=apiKey))$content %>% 
    rawToChar() %>% 
    fromJSON(flatten = T)
  
  if (length(resp$response) != 0) {
    posts_df = resp$response %>% 
    as_tibble() %>% 
    get_all_iteration("posts", apiKey, resp, ., account) %>% 
    mutate(post_id = as.character(post_id)) %>% 
    rename_all(recode, type = "post_type", url = "posts_url") %>% 
    select(-id, -categories)
  } else {
    posts_df = NA
  }
  return(posts_df) 
}

При помощи tibble комбинируем результат выполнения функций. Секция defalult в LiveDune содержит данные по аккаунтам из «Проверки Аккаунтов», поэтому исключаем ее из выдачи. Если нужны данные только из проверки аккаунтов, убрать восклицательный знак из «filter(project != «default») %>%»

В зависимости от количества аккаунтов в LiveDune а также контента внутри этих аккаунтов, процесс построения таблицы с информацией и статистикой может занять от 1 до 20 минут. Итоговый датафрейм будет называться df

accounts_df %>%
  filter(project != "default") %>% 
  mutate(posts = map(id, get_posts)) %>% 
  unnest(posts) -> df

Теперь при помощи gs4_auth проходим авторизацию в Google Sheets, получаем токен доступа. Далее мы сохраняем датафрейм на компьютер в рабочую папку в формате CSV, после чего отгружаем его в таблицу в 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")

Вот и всё, мы получили список абсолютно всех постов всех аккаунтов на балансе Livedune за весь доступный период.

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

Сабақ тэгі: api, FB, instagram, Livedune, OK, parsing, R, Rstudio, VK, youtube
Артқа: Исследование данных в Digital маркетинге