🐣
Twitter API v2のTypeScriptクライアントをOpenAPI Generatorで自動生成した
8月にリリースされたTwitter API v2は公式でOpenAPI仕様が公開されているので、OpenAPI Generatorを使ってTypeScript用クライアントを自動生成してみました。
Twitter API v2にはOAuth 2.0 Bearer TokenとOAuth 1.0a User Contextの2種類の認証方法があります。
公開ツイートなどユーザーに関係なくアクセスできるデータはOAuth 2.0 Bearer Tokenで取得できますが、ツイートの投稿や非公開ツイートの取得など特定のユーザーとして行う操作は、今まで通りOAuth1.0a認証を使用する必要があります。
OAuth 2.0認証はOpenAPI Generatorの自動生成で対応できましたが、OAuth 1.0a認証は対応していなかったので手動で実装し、両方の認証方法をサポートしました。
インストール
yarn add twimo-v2
# or
npm i -S twimo-v2
使い方
ここではTweet lookupエンドポイントからデータを取得しています。
OAuth 2.0 Bearer Token
import { configureApi, TweetsApi, SearchApi, UsersApi } from 'twimo-v2'
const bearerToken = 'xxxxxxxx'
const tweetsApi = configureApi(TweetsApi, bearerToken)
tweetsApi.findTweetsById({
ids: ['1326191408546414592'],
expansions: ['author_id', 'attachments.media_keys'],
tweetFields: ['created_at', 'referenced_tweets', 'attachments'],
mediaFields: ['url', 'width', 'height'],
})
OAuth 1.0a User Context
import {
configureUserContextApi,
TweetsApi,
SearchApi,
UsersApi,
} from 'twimo-v2'
const apiKeys = { apiKey: 'xxxxxxxx', apiSecret: 'xxxxxxxx' }
const accessTokens = { token: 'xxxxxxxx', tokenSecret: 'xxxxxxxx' }
const tweetsApi = configureUserContextApi(TweetsApi, apiKeys, accessTokens)
tweetsApi.findTweetsById({
ids: ['1326191408546414592'],
expansions: ['author_id', 'attachments.media_keys'],
tweetFields: ['created_at', 'referenced_tweets', 'attachments'],
mediaFields: ['url', 'width', 'height'],
})
レスポンスの例
{
"data": [
{
"id": "1326191408546414592",
"created_at": "2020-11-10T15:54:05.000Z",
"text": "test https://t.co/uMLs9riKeg",
"author_id": "1013969666186678272",
"attachments": {
"media_keys": [
"3_1326191367203160064"
]
}
}
],
"includes": {
"media": [
{
"height": 128,
"url": "https://pbs.twimg.com/media/EmeUBaJVgAA9mFu.png",
"width": 477,
"media_key": "3_1326191367203160064",
"type": "photo"
}
],
"users": [
{
"id": "1013969666186678272",
"name": "やまいも",
"username": "yarnaimo"
}
]
}
}
API v2のレスポンス形式について
Expansions
API v2では、ツイートの投稿ユーザーやメディア (画像・動画) などは、ツイート本体とは別のincludes
フィールドに含まれます。
これらはデフォルトではレスポンスに含まれないため、リクエストの際expansions
パラメータでレスポンスに含めたいデータを指定する必要があります。
-
author_id
を指定 =>includes
にuserが含まれ、そのuserのidがdata.author_id
に入る -
attachments.media_keys
を指定 =>includes
にmediaが含まれ、そのmediaのmedia_key
がdata.attachments.media_keys
に入る
Fields
各ツイートやメディアに含めたいフィールドはtweetFields
/userFields
/mediaFields
などのfieldsパラメータで指定します。
Discussion