В архивной части сохранён код на R для взаимодействия с API сервиса LiveDune. Перед применением необходимо проверить текущую документацию.
Я покажу два варианта кода, один для парсинга постов и статистики, другой - для парсинга исторических данных по подписчикам в аккаунтах. Причем, можно получать данные не только о своих, но и о чужих данных, добавленных на дэшборд LiveDune.
Код получает список соцсетей в кабинете LiveDune, публикации аккаунтов и доступную статистику по ним. Возможности API и правила доступа могли измениться.
Связанный пример с историческими данными подписчиков сохранён отдельным материалом.
Но прежде всего, важное отступление. Я не имею отношения к LiveDune, это платный сервис, и поэтому вариант парсинга через него может подойти не всем. давайте посмотрим, какая существует альтернатива парсингу через LiveDune.
Альтернатива парсингу через API LiveDune
На OpenSMM также сохранён архивный разбор неофициальной Python-библиотеки Instagram. Этот способ больше не актуален и опубликован только для исторического контекста.
Какие еще есть альтернативы, если вам нужно получить данные из социальных сетей? Доступ через Instagram Graph API Access Token.
В сети можно найти много видео на эту тему. Суть в том, что получить этот токен в режиме разработчика может любой человек, и не смотря на его ограниченные ресурсы, его можно использовать для получения данных о своих аккаунтах. Чуть подробней можно узнать в этих видео:
Для соцсетей 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. Спасибо за внимание.

