🐣

Twitter API v2のTypeScriptクライアントをOpenAPI Generatorで自動生成した

3 min read

8月にリリースされたTwitter API v2は公式でOpenAPI仕様が公開されているので、OpenAPI Generatorを使ってTypeScript用クライアントを自動生成してみました。

https://github.com/yarnaimo/twimo-v2

Twitter API v2にはOAuth 2.0 Bearer TokenOAuth 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_keydata.attachments.media_keysに入る

Fields

各ツイートやメディアに含めたいフィールドはtweetFields/userFields/mediaFieldsなどのfieldsパラメータで指定します。