Данные соцсетей через API LiveDune

Архивный кейс работы с API LiveDune на языке R.

API LiveDune и язык R

В архивной части сохранён код на R для взаимодействия с API сервиса LiveDune. Перед применением необходимо проверить текущую документацию.

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

Код получает список соцсетей в кабинете LiveDune, публикации аккаунтов и доступную статистику по ним. Возможности API и правила доступа могли измениться.

Связанный пример с историческими данными подписчиков сохранён отдельным материалом.

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

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

На OpenSMM также сохранён архивный разбор неофициальной Python-библиотеки Instagram. Этот способ больше не актуален и опубликован только для исторического контекста.

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

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

https://youtu.be/c8i4CaELPME
https://youtu.be/zwTohy42np4

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


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

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

Код написан на языке 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_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. Спасибо за внимание.