[PR]

アカウント認証

これは Twitter の Authentication documentation を補足するものです.

はじめに

Tweepy は, OAuth 1.0a User Context, OAuth 2.0 Bearer Token (アプリのみ)および OAuth 2.0 Authorization Code Flow with PKCE (User Context) の認証方式をサポートします.

Twitter API v1.1

OAuth 2.0 Bearer Token (App-Only)

ベアラートークンを生成するもっともシンプルな方法は, Twitter Developer Portal Projects & Apps page にあるKeys and Tokens タブで行います.

ベアラートークンで OAuth2BearerHandler を初期化し, OAuth2BearerHandler インスタンスで API を初期化することができます.

import tweepy

auth = tweepy.OAuth2BearerHandler("Bearer Token here")
api = tweepy.API(auth)

また, その代わりに同じページにある API / コンシューマキー及びシークレットを用いて, OAuth2AppHandler を初期化することもできます.

import tweepy

auth = tweepy.OAuth2AppHandler(
    "API / Consumer Key here", "API / Consumer Secret here"
)
api = tweepy.API(auth)

OAuth 1.0a User Context

同様に, 開発者アカウントとして認証する最も簡単な方法は, Twitter Developer Portal Projects & Apps page にあるアプリの Keys and Tokens タブからアクセストークンとアクセストークンシークレットを生成することです.

また同じページにあるアプリの API コンシューマキーとコンシューマシークレットも必要です.

4 つの認証情報を使って OAuth1UserHandler を初期化し, OAuth1UserHandler instance:: を使って, API を初期化することができます.

import tweepy

auth = tweepy.OAuth1UserHandler(
   "API / Consumer Key here", "API / Consumer Secret here",
   "Access Token here", "Access Token Secret here"
)
api = tweepy.API(auth)

異なるユーザとして認証する場合は 3-legged OAuth を見てください.

Twitter API v2

Twitter API v2 用の Tweepy のインターフェースである Client はOAuth 2.0 ベアラートークン (アプリのみ) とOAuth 1.0 User Context 認証を行います.

OAuth 2.0 Bearer Token (App-Only)

ベアラートークンを生成するもっともシンプルな方法は, Twitter Developer Portal Projects & Apps page にあるKeys and Tokens タブで行います.

この場合, Client を初期化するためにただベアラートークンを渡せばすみます.

import tweepy

client = tweepy.Client("Bearer Token here")

OAuth 1.0a User Context

同様に, 開発者アカウントとして認証する最も簡単な方法は, Twitter Developer Portal Projects & Apps page にあるアプリの Keys and Tokens タブからアクセストークンとアクセストークンシークレットを生成することです.

また同じページにあるアプリの API コンシューマキーとコンシューマシークレットも必要です.

この場合, Client を初期化するためにただ 4 つの認証情報を渡せばすみます.

import tweepy

client = tweepy.Client(
    consumer_key="API / Consumer Key here",
    consumer_secret="API / Consumer Secret here",
    access_token="Access Token here",
    access_token_secret="Access Token Secret here"
)

異なるユーザとして認証する場合は 3-legged OAuth を見てください.

PKCE を使った OAuth 2.0 認証コードの流れ (User Context)

OAuth2UserHandler を使ってユーザ認証用のアクセストークンを生成できます.

Twitter Developer Portal Projects & Apps page の Settings タブにあるアプリの User authentication settings セクションでOAuth 2.0 の設定をオンにする必要があります. またこれを行うには, Callback もしくは Redirect の URI / URL を設定する必要があります.

次に, アプリの Client ID を記録する必要があります. これは Twitter Developer Portal Projects & Apps page のアプリの Keys and Tokens タブで見つけられます. もし気密性の高いクライアントを使用している場合はClient Secret も生成する必要があります.

その後, 必要とするスコープで OAuth2UserHandler を初期化することができます.

import tweepy

oauth2_user_handler = tweepy.OAuth2UserHandler(
    client_id="Client ID here",
    redirect_uri="Callback / Redirect URI / URL here",
    scope=["Scope here", "Scope here"],
    # Client Secret is only necessary if using a confidential client
    client_secret="Client Secret here"
)

スコープの一覧については, Twitter の OAuth 2.0 Authorization Code Flow with PKCE documentation のScopes セクションを参照してください.

そして, 認証 URL を取得できます.

print(oauth2_user_handler.get_authorization_url())

これは, ユーザにアプリを認証させるために使用できます. 認証が完了すると, 指定した Callback または Redirect 用のURL (URI) にリダイレクトされます. アクセストークンを取得するため, その認証応答用の URL を渡す必要があります.

access_token = oauth2_user_handler.fetch_token(
    "Authorization Response URL here"
)

そして, Client を初期化するためにアクセストークンを渡します.

client = tweepy.Client("Access Token here")

3-legged OAuth

このセクションは Twitter の 3-legged OAuth flow documentation を補足するものです.

開発者アカウント以外のユーザとして認証するためには, 3-legged OAuth の方法でアクセストークンを取得する必要があります.

まず Twitter Developer Portal Projects & Apps page の Settings タブにあるアプリの User authentication settings セクションでOAuth 1.0 の設定をオンにする必要があります. またこれを行うには, Callback もしくは Redirect の URI / URL を設定する必要があります.

次にアプリの API コンシューマキーとコンシューマシークレットが必要です. これはアプリの Twitter Developer Portal Projects & Apps page にある Keys and Tokens タブで見つけられます.

その後, OAuth1UserHandler を初期化できます.

import tweepy

oauth1_user_handler = tweepy.OAuth1UserHandler(
    "API / Consumer Key here", "API / Consumer Secret here",
    callback="Callback / Redirect URI / URL here"
)

そして, 認証 URL を取得できます.

print(oauth1_user_handler.get_authorization_url())

Twitter でログインまたはサインインを利用するには認証 URL を取得するときに signin_with_twitter パラメータを設定することができます.

print(oauth1_user_handler.get_authorization_url(signin_with_twitter=True))

これはユーザにアプリを認証させるために使用することができます. 一度認証が終わると, oauth_tokenoauth_verifier パラメータをリダイレクトされた Callback または Redirect URL (URI) に提供します.

そして, 認証情報を元に, アクセストークンとアクセスシークレットを取得できます.

access_token, access_token_secret = oauth1_user_handler.get_access_token(
    "Verifier (oauth_verifier) here"
)

OAuth1UserHandler を最初期化する必要があるときは, 認証情報を使ってアクセストークンとアクセスシークレットを取得する前に, リクエストトークンとシークレットを跡から設定することができます.

request_token = oauth1_user_handler.request_token["oauth_token"]
request_secret = oauth1_user_handler.request_token["oauth_token_secret"]

new_oauth1_user_handler = tweepy.OAuth1UserHandler(
    "API / Consumer Key here", "API / Consumer Secret here",
    callback="Callback / Redirect URI / URL here"
)
new_oauth1_user_handler.request_token = {
    "oauth_token": "Request Token (oauth_token) here",
    "oauth_token_secret": request_secret
}
access_token, access_token_secret = (
    new_oauth1_user_handler.get_access_token(
        "Verifier (oauth_verifier) here"
    )
)

または, 単純に古い OAuth1UserHandler のインスタンスを利用することができます.

そして, この OAuth1UserHandler インスタンスを用いて API を初期化できます:

api = tweepy.API(oauth1_user_handler)

また access_tokenaccess_token_secret を用いて新しく OAuth1UserHandler インスタンスを初期化することで, API を初期化することもできます:

auth = tweepy.OAuth1UserHandler(
   "API / Consumer Key here", "API / Consumer Secret here",
   "Access Token here", "Access Token Secret here"
)
api = tweepy.API(auth)

Client を初期化するには, access_tokenaccess_token_secret を直接与えます:

client = tweepy.Client(
    consumer_key="API / Consumer Key here",
    consumer_secret="API / Consumer Secret here",
    access_token="Access Token here",
    access_token_secret="Access Token Secret here"
)

PIN-based OAuth

このセクションは Twitter の PIN-based OAuth documentation を補足するものです.

PIN-based OAuth は callback パラメータとして "oob" を指定することで利用できます.

import tweepy

oauth1_user_handler = tweepy.OAuth1UserHandler(
    "API / Consumer Key here", "API / Consumer Secret here",
    callback="oob"
)

このとき, 認証 URL はこれまでと同じ方法で取得できます.

print(oauth1_user_handler.get_authorization_url())

ユーザがこの URL で認証すると, PIN が提供されます. この PIN をユーザから取得することで, 認証に使うことができます.

verifier = input("Input PIN: ")
access_token, access_token_secret = oauth1_user_handler.get_access_token(
    verifier
)

これで OAuth1UserHandler インスタンスや, access_tokenaccess_token_secret を使うことができます.

Reference

class tweepy.OAuth1UserHandler(consumer_key, consumer_secret, access_token=None, access_token_secret=None, callback=None)

OAuth 1.0a User Context authentication handler

バージョン 4.5 で変更: Renamed from OAuthHandler

get_authorization_url(signin_with_twitter=False, access_type=None)

Get the authorization URL to redirect the user to

get_access_token(verifier=None)

After user has authorized the app, get access token and secret with verifier

set_access_token(key, secret)

バージョン 4.5 で非推奨: Set through initialization instead.

class tweepy.OAuthHandler(consumer_key, consumer_secret, access_token=None, access_token_secret=None, callback=None)

Alias for OAuth1UserHandler

バージョン 4.5 で非推奨: Use OAuth1UserHandler instead.

class tweepy.OAuth2AppHandler(consumer_key, consumer_secret)

OAuth 2.0 Bearer Token (App-Only) using API / Consumer key and secret authentication handler

バージョン 4.5 で変更: Renamed from AppAuthHandler

class tweepy.AppAuthHandler(consumer_key, consumer_secret)

Alias for OAuth2AppHandler

バージョン 4.5 で非推奨: Use OAuth2AppHandler instead.

class tweepy.OAuth2BearerHandler(bearer_token)

ベースクラス: AuthBase

OAuth 2.0 Bearer Token (App-Only) authentication handler

バージョン 4.5 で追加.

class tweepy.OAuth2UserHandler(*, client_id, redirect_uri, scope, client_secret=None)

ベースクラス: OAuth2Session

OAuth 2.0 Authorization Code Flow with PKCE (User Context) authentication handler

バージョン 4.5 で追加.

Construct a new OAuth 2 client session.

パラメータ:
  • client_id -- Client id obtained during registration

  • client -- oauthlib.oauth2.Client to be used. Default is WebApplicationClient which is useful for any hosted application but not mobile or desktop.

  • scope -- List of scopes you wish to request access to

  • redirect_uri -- Redirect URI you registered as callback

  • token -- Token dictionary, must include access_token and token_type.

  • state -- State string used to prevent CSRF. This will be given when creating the authorization url and must be supplied when parsing the authorization response. Can be either a string or a no argument callable.

  • kwargs -- Arguments to pass to the Session constructor.

Auto_refresh_url:

Refresh token endpoint URL, must be HTTPS. Supply this if you wish the client to automatically refresh your access tokens.

Auto_refresh_kwargs:

Extra arguments to pass to the refresh token endpoint.

Token_updater:

Method with one argument, token, to be used to update your token database on automatic token refresh. If not set a TokenUpdated warning will be raised when a token has been refreshed. This warning will carry the token in its token argument.

get_authorization_url()

Get the authorization URL to redirect the user to

fetch_token(authorization_response)

After user has authorized the app, fetch access token with authorization response URL