Twitter の API を Python製「TwitterAPI」ライブラリで手軽に利用する

Twitter の API を初めて使おうとしたとき思いのほか情報がなくて驚いたのに加え、Python においては使いやすい手頃なソリューション的なものも全然なさそうだったので記録しておきます。

使うもの

Twitter Developer の公式サイトを漁っていたら「各言語によるライブラリ集」的なやつを見つけました。以下。

Twitter API v2 tools & libraries
Twitter API v2 tools & libraries
Explore our official and community-supported tools and libraries for Twitter API.

今回は Python で実装を探していたのですが、 requests でベタ書きするだの OAuth1Session という OAuth 用のモジュールを使うだの色々見つかるわりには Twitter も標準的な実装とかは紹介してくれていなくて、そんな中公式の推奨?っぽいライブラリはかなり助かります。

選んだのはこれ。

GitHub - geduldig/TwitterAPI: Minimal python wrapper for Twitter's REST and Streaming APIs
GitHub - geduldig/TwitterAPI: Minimal python wrapper for Twitter's REST and Streaming APIs
Minimal python wrapper for Twitter's REST and Streaming APIs - GitHub - geduldig/TwitterAPI: Minimal python wrapper for Twitter's REST and Streaming APIs

名前そのまんまなんですが、下記のように超わかりやすい最高にシンプルな記述が素敵。

from TwitterAPI import TwitterAPI

api = TwitterAPI(
    consumer_key,
    consumer_secret,
    access_token_key,
    access_token_secret,
)
api.request('statuses/update', {'status':'This is a tweet!'})

見てわかる通り、OAuth 認証に使う例の4つのキー類もそのまま扱えて、次の行ではもうツイートのリクエストができちゃいます。まさにこういうものを探していたのだ。

インストールは pip でできます。

pip install TwitterAPI

基本的な使い方はこれだけ。

画像添付とか

res = api.request(
    "media/upload",
    None,
    {"media": file},
)
media_id = res.json()["media_id"]

画像の添付は、 request タイプの指定を media/upload にしつつ第三引数にキー名を media として画像ファイルをあてがいます。

ファイルは普通にファイルオブジェクトやバイナリが許容される模様。

レスポンスの中に media_id というのがいるのでそれを取り出しておきます。 json() となっているのはこの requsets などと同じく TwitterAPI オブジェクトの独自メソッドなのでうっかり json.loads(res["media_id"]) とかやらないように注意。

そしたら通常ツイートの実装をベースに画像を添付します。

res = api.request("statuses/update", {
    "status": tweet_text,
    "media_ids": media_id,
})

media_id を付与するキー名は media_ids であることに注意してください。

その他基本的な API(主に v1.1 と呼ばれているやつ)は下記のディレクトリから適宜サンプル実装を拾いましょう。

TwitterAPI/examples/v1.1 at master · geduldig/TwitterAPI
TwitterAPI/examples/v1.1 at master · geduldig/TwitterAPI
Minimal python wrapper for Twitter's REST and Streaming APIs - TwitterAPI/examples/v1.1 at master · geduldig/TwitterAPI

最近の主流は v2 かのように思えるのですが、こちらはリファレンスを読んだ感じ自分が必要とすることはなさそうだったのでスルーしています。