Querying an authenticated API (Twitter)
Many APIs require some form of authentication. This can be a token, an OAuth flow, or another mechanism. The api
command is able to send requests with custom headers
and data
payloads, and also includes a --bearer
flag among other auth related flags to support many forms of API authentication.
The oauth
command also works for a number of supported OAuth providers, as well as custom Client Credentials flows.
Example 1: Twitter​
Full Query​
api get "https://api.twitter.com/2/tweets/search/recent?query=NASA&tweet.fields=created_at,author_id,public_metrics&max_results=100"
--bearer "$CREDENTIALS.twitter_bearer$"
|| normalize data
Note: This query requires a preconfigured twitter_bearer
custom credential. See credentials docs for more.
Stage 1: Making an authenticated request​
api get "https://api.twitter.com/2/tweets/search/recent?query=NASA&tweet.fields=created_at,author_id,public_metrics&max_results=100"
--bearer "$CREDENTIALS.twitter_bearer$"
This stage will make a GET
request to the Twitter search API. The --bearer
flag contains the internal token CREDENTIALS.twitter_bearer$
that will be substituted with the preconfigured twitter_bearer
custom credential value before dispatching the request.
Alternatively, you could manually construct the --headers
for this query.
api get "https://api.twitter.com/2/tweets/search/recent?query=NASA&tweet.fields=created_at,author_id,public_metrics&max_results=100"
--headers '{"Authorization": "$CREDENTIALS.twitter_bearer$"}'
Stage 2: Normalizing the results​
...
|| normalize data
The results from this endpoint are nested in a data
array. Note the data.0.*
, data.1.*
etc. columns. We can expand the results array into a row per data using the normalize
command.
Example 2: Reddit OAuth​
Full Query​
oauth
--credential "reddit"
|| api get https://oauth.reddit.com/r/sacramento/hot.json
--token.access_token "$token.access_token$"
--useragent "api:com.acmeinc:v1.0.0 (by u/acmeinc)"
|| normalize data.children
Note: This query requires a preconfigured reddit
OAuth token. See Reddit OAuth docs for instructions.
Stage 1: Acquiring OAuth Token​
oauth
--credential "reddit"
We can use the oauth
command with a preconfigured reddit
credential to get back a token to use for future requests. The token will be in the token.access_token
column.
Stage 2: Making an authenticated request​
...
|| api get https://oauth.reddit.com/r/sacramento/hot.json
--token.access_token "$token.access_token$"
--useragent "api:com.acmeinc:v1.0.0 (by u/acmeinc)"
In the seconds stage, we will make a request to the Reddit API to get top posts from the sacramento
subreddit. This request requires authentication and identification. We will identify our request using the --useragent
flag set to our Reddit username. The request will be authorized using the --token.access_token
flag, which will contain a $token.access_token$
token that will be replaced by the token.access_token
column value from the previous oauth
command stage.
Stage 3: Normalizing the results​
...
|| normalize data.children
The results from this endpoint are nested in a data.children
array. Note the data.children.0.*
, data.children.1.*
etc. columns. We can expand the data.children
array into a row per data using the normalize
command.