Алгоритм по vk

Створення додатка і авторизація у вк:

library(RCurl)
library(httr)
library(RJSONIO)
library(lubridate)
library(dplyr)
library(gtools)

# функція авторизації у вк

get_access_token <- function(){
  accessURL <- "https://oauth.vk.com/access_token"
  authURL <- "https://oauth.vk.com/authorize"
  vk <- oauth_endpoint(authorize = authURL,
                       access = accessURL)
  myapp <- oauth_app(app_name, client_id, client_secret)
  ig_oauth <- oauth2.0_token(vk, myapp,  
                             type = "application/x-www-form-urlencoded",
                             cache=FALSE)
  my_session <-  strsplit(toString(names(ig_oauth$credentials)), '"')
  access_token <- paste0('access_token=', my_session[[1]][4])
  
  access_token
}

#авторизація додатка
client_id <- "5506320"
client_secret <- "POJRC0WPl6FeeQFtaoBQ"
app_name <- "analyseR"

access_token <-get_access_token()

#функція для пошуку груп
vk_group_search <- function(name){
  api <- paste0('https://api.vk.com/method/groups.search?q=',name)
  request <- paste(api, access_token, sep='&')
  region_list <- fromJSON(getURL(request))
  region_df <- as_data_frame(do.call("rbind",sapply(region_list$response,function(x) {as_data_frame(unlist(x))})))
  region_df
}

Формування масиву вк

#формувалися окремі таблиці за кожним запитом 
#нюанс - слова пи салися англ транслітерацією, оскільки моя сторінка вк англомовна, то апі-пошук на кирилицю не працює, але при транслітерації результати видаються на всіх мовах

maidan <- vk_group_search("maidan")
evromaidan <- vk_group_search("evromaidan")
ato <- vk_group_search("ato")
revolutsiya <- vk_group_search("revolutsiya")
ukraina <- vk_group_search("ukraina")

#поєднання в один масив
pages_vk <- rbind(maidan,evromaidan,ato,revolutsiya,ukraina)

Алгоритм по Facebook

Так відбувалась авторизація:

library(RSelenium)
library(dplyr)
library(RJSONIO)
library(digest)
library(httr)
library(RCurl)

#створення симулятора браузера

rD <- rsDriver(port = as.integer(round(runif(1, 1000,9999))),browser = "chrome")
remDr <- rD[["client"]]
remDr$navigate("http://facebook.com")

#функція, що авторизує фейсбук

fb_login(login,password){
  user <- remDr$findElement(using = "id", "email")
  user$sendKeysToElement(list(login))
  pass <- remDr$findElement(using = "id", value = "pass")
  pass$sendKeysToElement(list(password))
  login <- remDr$findElement(using = "css selector", value = ".uiButton.uiButtonConfirm")
  login$clickElement()
}

#авторизація

fb_login("***","***")

#функція для пошуку груп

getdata <- function() {
    post4 <- remDr$findElements(using = "css selector", value = ".touchable.primary")
    post3 <- remDr$findElements(using = "css selector", value = ".touchable.primary")
    postLink <- unlist(lapply(post3, function(x){x$getElementAttribute("href")}))
    name2 <- unlist(lapply(post4, function(x){x$getElementText()}))
  
  return(data_frame(name2,postLink))
}

#функція для скролу сторінки

scroll <- function(x){
  i = 0
  while(i < x) { 
    page <- remDr$findElement("css", "body")
    page$sendKeysToElement(list(key = "end"))
    i  =  i + 1
  }
}

Процес пошуку груп:

#власне, ключові слова для пошуку вписувалися в тіло посилання на сторінці пошуку після q=
#на зразок цього виразу

remDr$navigate("https://m.facebook.com/search/pages/?ssid=eaf255354fc9a6c59b727265b85d5f3a&search_source=filter&q=евромайдан")

#результати видачі скролились 500 разів (насправді, специфіка роботи симулятора така, що на практиці це менше)
scroll(500)

#після того, як скрол розгорнув повну сторінку видачі всі результати парсились у таблицю
p_evromaidan2 <- getdata()

#я створив ряд таких таблиць для кожного результату пошуку і потім їх об'єднав в одну
pages_maidan <- rbind(p_evromaidan,p_evromaidan2,p_maidan,p_revolution)

p_evromaidan #євромайдан
p_evromaidan2 #евромайдан
p_maidan #майдан
p_revolution #революція