Chapter 8 User follows
Chapter progress bar
███████████████████████████░░░ 90%
There are different ways to get the users that a given user follows.
If we are interested in getting only the Twitter user_id of each user out entry point user follows we can use this API endpoint (at this time a corresponding v2 version is not available as far as I know)
url <-
"https://api.twitter.com/1.1/friends/ids.json"and this parameters
entry_point_user_id <-
'2962620002'
params <-
list(user_id = entry_point_user_id,
count = 5000)The only required parameter is the user_id or alternatively screen_name.
We store the JSON-formatted results into a data folder which we set with
json_data_dir <-
"json_data"
if(!dir.exists(json_data_dir)) {
dir.create(json_data_dir)
}We are now ready to request a paginate the results (in case we our entry point user follows more than 5,000 users).
headers <-
c(`Authorization` = sprintf('Bearer %s',
Sys.getenv("BEARER_TOKEN")))
res <-
httr::GET(url,
httr::add_headers(.headers = headers),
query = params)obj.r <-
httr::content(res, as = "text") %>%
jsonlite::fromJSON()
jsonlite::write_json(httr::content(res, as = "parsed"),
path = sprintf("%s/%s_follows_ids_%s.json",
json_data_dir,
entry_point_user_id,
sprintf("%04d", 1)))Do we have additional pages?
if (obj.r$next_cursor != 0) {
counter <- 2
while(TRUE) {
params[['cursor']] <-
obj.r$next_cursor_str
print(sprintf("Next cursor: %s...", obj.r$next_cursor_str))
res <-
httr::GET(url,
httr::add_headers(.headers = headers),
query = params)
obj.r <-
httr::content(res, as = "text") %>%
jsonlite::fromJSON()
if (!is.null(obj.r$error) && obj.r$error['code'] == 88) {
while(TRUE) {
print(obj.r$errors)
Sys.sleep(60)
res <-
httr::GET(url,
httr::add_headers(.headers = headers),
query = params)
obj.r <-
httr::content(res, as = "text") %>%
jsonlite::fromJSON()
if (is.null(obj.r$errors)) {
break
}
}
}
jsonlite::write_json(httr::content(res, as = "parsed"),
path = sprintf("%s/%s_follows_ids_%s.json",
json_data_dir,
entry_point_user_id,
sprintf("%04d", counter)))
if (obj.r$next_cursor == 0) {
break
}
counter <-
counter + 1
}
}