vkR
is an R package which provides access to the VKontakte (VK) API.
To get the current released version from CRAN:
install.packages("vkR")
To get the current development version from github:
install.packages("devtools")
::install_github("Dementiy/vkR")
devtoolslibrary("vkR")
Most API requests require the use of an access token. VK has several types of authorization mechanisms. Check out the documentation for more details.
vkOAuth(CLIENT_ID, 'SCOPE', 'EMAIL', 'PASSWORD')
where: * CLIENT_ID
- is an application ID. You have to
create new Standalone-app in
VK to get ID (or use the already existing). * SCOPE
- the
list of comma separated access rights,
e.g. 'friends,groups'
- provide the access to user friends
and groups. List of all rights can be found here. * EMAIL
and
PASSWORD
- username and password.
If the EMAIL
and PASSWORD
have been
omitted, a browser window will be opened. In the address bar an access
token will be shown. Access token must be copied and passed as an
argument into the following function:
setAccessToken(access_token = 'YOUR ACCESS TOKEN')
At your own risk you can use mongodb and mongolite package for storing data:
> db_init()
> wall <- getWallExecute(domain="data_mining_in_action", count=0, use_db=TRUE, progress_bar=TRUE)
|======================...======================| 100%
> show_collections()
db collection suffix count1 temp data_mining_in_action wall 232
If connection was aborted by some reasons we don’t lose our data:
> wall <- getWallExecute(domain='privivkanet', count=0, use_db = T, progress_bar = T)
|================= | 25%
Show Traceback
Rerun with Debugin curl::curl_fetch_memory(url, handle = handle) :
Error
Operation was aborted by an application callback ...> show_collections()
db collection suffix count1 temp data_mining_in_action wall 232
2 temp privivkanet wall 916
> wall <- getWallExecute(domain='privivkanet', count=0, offset=916, use_db = T, progress_bar = T)
|======================...======================| 100%
> show_collections()
db collection suffix count1 temp data_mining_in_action wall 232
2 temp privivkanet wall 3664
You can specify the collection name:
> wall <- getWallExecute(domain="data_mining_in_action", count=0,
use_db=TRUE, db_params=list('collection'='dm', 'suffix'='posts'), progress_bar=TRUE)
|======================...======================| 100%
> show_collections()
db collection suffix count1 temp data_mining_in_action wall 232
2 temp privivkanet wall 3664
3 temp dm posts 232
> friends <- getFriends()
> users <- getUsersExecute(friends$items, use_db = TRUE, db_params=list('collection'='my_friends'), progress_bar = TRUE)
> show_collections()
db collection suffix count1 temp data_mining_in_action wall 232
2 temp privivkanet wall 3664
3 temp dm posts 232
4 temp my_friends 141
For load collection into a namespace you can use
db_load_collection
function:
> db_load_collection('data_mining_in_action', 'wall')
232 records. Simplifying into dataframe...
Imported > ls()
1] "temp.data_mining_in_action.wall"
[> nrow(temp.data_mining_in_action.wall)
1] 232 [
Building a Friend Graph:
<- getFriends(fields = 'sex')
my_friends <- filter(my_friends$items, is.na(deactivated))
my_friends <- getNetwork(my_friends$id)
network
library("igraph")
<- graph.adjacency(as.matrix(network), weighted = T, mode = "undirected")
g <- layout.fruchterman.reingold(g)
layout plot(g, layout = layout)
Analyzing community activity:
<- 'nipponkoku'
domain <- getWallExecute(domain = domain, count = 0, progress_bar = TRUE)
wall <- jsonlite::flatten(wall$posts[c("date", "likes", "comments", "reposts")])
metrics $date <- as.POSIXct(metrics$date, origin="1970-01-01", tz='Europe/Moscow')
metrics
library(dplyr)
<- metrics %>%
df mutate(period = as.Date(cut(date, breaks='month'))) %>%
group_by(period) %>%
summarise(likes = sum(likes.count), comments = sum(comments.count), reposts = sum(reposts.count), n = n())
library(ggplot2)
library(tidyr)
ggplot(data=gather(df, 'type', 'count', 2:5), aes(period, count)) + geom_line(aes(colour=type)) +
labs(x='Date', y='Count')
You can find more examples in examples
directory.