This tutorial will walk through what you need to get started with the programming language R and the Twitter API v2. Using R to connect to the user lookup endpoint, I’ll show how to work with JSON returned from the Twitter API. User lookup is a GET method and returns information about a user or group of users, specified by a user ID or a username.
If you aren’t familiar, R is one of the most popular languages for common Data Science tasks like time-series analysis, modeling, visualization, and other data analysis, and is often used in conjunction with the Twitter API. With the user lookup endpoint, you can use the user object to determine a correlation between the number of followers a person has and the sentiment score of their bio. The user object may also be used to map a group of accounts based on the location publicly listed in their profiles.
Getting started with the Twitter API
Before you can use the Twitter API v2, you will need a developer account.
Once you have an approved developer account, you will need to first create a Project. Projects allow you to organize your work based on how you intend to use the Twitter API, so you can effectively manage your access to the API, and monitor your usage.
Each Project contains an App, with which you can generate the credentials required to use the Twitter API. You can learn more about how to get started with the Twitter API, in the getting started section of our documentation.
Getting your R environment set up
First, you need to download R which you can do on the cran website.
After, to set up an environment to work with R, you can use R studio, the R extension pack for Visual Studio Code, or a Jupyter notebook if you come from the Python world.
Setting up your environment variable
For the code examples, I’m going to be showing today, you will want to create an environment variable for your bearer token. The bearer token is what allows you to authenticate to the Twitter API and start making requests. First, replace “your-bearer-token” with your own bearer token, which can be obtained from the keys and tokens section of your App in the developer portal. You’ll need to run this line of code in the console before you start writing a script.
Sys.setenv(BEARER_TOKEN = "your-bearer-token")
Making your request
You can use the package httr to make HTTP requests to the Twitter API. If you haven’t already installed this, please install the package in your console. You will also need to install jsonlite to work with our JSON object and dplyr for data manipulation.
install.packages("httr") install.packages("jsonlite") install.packages("dplyr")
You can now begin writing your R script to connect to the API. At the top of the file, call the packages
require(httr) require(jsonlite) require(dplyr)
The first step in your code sample is to get set up to authenticate to the Twitter API. Grab the bearer token you set, and pass that into your headers for authentication.
bearer_token <- Sys.getenv("BEARER_TOKEN") headers <- c(`Authorization` = sprintf('Bearer %s', bearer_token))
Once you got your authentication set up, define the parameters of your request. By default, you will get back the id, name, and username of each user you get back. You can make adjustments to this payload by adding additional fields and expansions. For this example, you will want the profile bio of the user which is found in the description and an expansion that contains the pinned Tweet of the user.
params <- list(`user.fields` = 'description', `expansions` = 'pinned_tweet_id')
Now you are ready to format your URL with the handle you are looking to get more information about. Use the
readline method to allow this sample to be reusable. After you type the handle you want to look at, format your URL to contain the handle you define.
handle <- readline('What handle do you want to look at? ') url_handle <- sprintf('https://api.twitter.com/2/users/by?usernames=%s', handle)
At this point, use the
httr package to make a GET request to the URL you just created, pass in our authentication credential via the header, and pass in the parameters you defined. You can save the response as a text object in the variable obj and print this out to view the result of the request you made.
response <- httr::GET(url = url_handle, httr::add_headers(.headers = headers), query = params) obj <- httr::content(response, as = "text") print(obj)
Working with our JSON payload
One of my favorite ways to work with a JSON is to use a data frame, which allows you to easily access complex nested data. To do this, use the
fromJSON method of the
jsonlite package to flatten your file to allow the fields to be in the same object. Then, pass that object into a data frame. Now you are ready to view this data frame.
json_data <- fromJSON(obj, flatten = TRUE) %>% as.data.frame View(json_data)
You can access the fields of the data from the data frame and pass them into a string that has the handle, the username, and bio.
final <- sprintf( "Handle: %s\nBio: %s\nPinned Tweet: %s", json_data$data.username, json_data$data.description, json_data$includes.tweets.text )
cat instead of print to view the object with newlines between each field you are pulling.
If you had multiple handles you made requests for, you could easily use a loop to access each data frame element.
Hopefully, this tutorial can be a starting place to work with R and the Twitter API. As a next step, you may want to look at our R samples for recent search, Tweet lookup and user lookup in our v2 sample code. Be sure to let us know on the forums if you run into any troubles along the way or Tweet us at @TwitterDev if this tutorial inspires you to create anything.
Top comments (4)
Wow, great article on R! I rarely see any here. That is so great. I mostly use R but have felt out of the loop here bc not many people have even heard of it here. ;)
How long have you worked with R?
BTW, Good work.
A few years now! I have a few other R related articles here.
Thank you so much for this tutorial! This is super helpful! Any plan on tutorials about how to get historical tweets using Twitter API?
expansionneeds to be changed to
expansionsor get 400 error. (Originally encountered post here: developer.twitter.com/en/docs/tuto...