Створення додатка і авторизація у вк:
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)
Так відбувалась авторизація:
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 #революція