Help us understand the problem. What is going on with this article?

PythonでTwitterアカウントのAccess Tokenの取得を半自動化する[OAuth認証]

追記(2018/10/08)

無題.png

この記事の方法を用いるためにはAppの設定においてCallback URLsを空白にする必要があります.空白にしなければアプリ認証後にPINが表示されません.

前書き

最近,Twitter APIの使用条件の厳格化が話題になっています.APIの使用にデベロッパー登録が必要になったりして私も大変困りました.

先日,デベロッパー登録申請が無事に承認されたので,Twitter Appsの再設定などをしているとAccess Tokenの取得が面倒だなと思いPythonで自動化することを考えました.

しかし,完全な自動化には至らず半自動化になってしまいました.PIN認証あたりを自動化するのはまだ私の実力ではできませんでした.

なお,

を参考にさせていただきました.

必要なパッケージ

  • oauth2
pip install oauth2

コード: TwitterOauth.py

TwitterOauth.py
import urllib
import webbrowser
import oauth2 as oauth


class TwitterOauth:

    REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token"
    ACCESS_TOKEN_URL  = "https://api.twitter.com/oauth/access_token"
    AUTHENTICATE_URL  = "https://api.twitter.com/oauth/authenticate"

    def __init__(self, key, secret):
        self.consumer = oauth.Consumer(key=key, secret=secret)

    def get_authenticate_url(self):
        """
        認証ページのURLを返す
        """
        self._set_request_token_content()
        request_token = self.request_token_content["oauth_token"][0]
        query = urllib.parse.urlencode({"oauth_token": request_token})
        authenticate_url = self.AUTHENTICATE_URL + "?" + query
        return authenticate_url

    def get_access_token_content(self, pin):
        """
        Access Token などの情報が入ったdictを返す
        """
        oauth_token = self.request_token_content["oauth_token"][0]
        oauth_token_secret = self.request_token_content["oauth_token_secret"][0]
        token = oauth.Token(oauth_token, oauth_token_secret)
        client = oauth.Client(self.consumer, token)
        body = urllib.parse.urlencode({"oauth_verifier": pin})
        resp, content = client.request(self.ACCESS_TOKEN_URL, "POST", body=body)
        return urllib.parse.parse_qs(content.decode())

    def _set_request_token_content(self):
        client = oauth.Client(self.consumer)
        resp, content = client.request(self.REQUEST_TOKEN_URL, "GET")
        self.request_token_content = urllib.parse.parse_qs(content.decode())


if __name__ == '__main__':

    ###############################################################################
    CONSUMER_KEY = "<< your API key >>"            # ここに API key を設定する
    CONSUMER_SECRET = "<< your API secret key >>"  # ここに API secret key を設定する
    ###############################################################################

    t = TwitterOauth(CONSUMER_KEY, CONSUMER_SECRET)
    authenticate_url = t.get_authenticate_url()  # 認証ページのURLを取得する
    webbrowser.open(authenticate_url)            # ブラウザで認証ページを開く

    print("PIN? >> ", end="")
    pin = int(input())

    access_token_content = t.get_access_token_content(pin)
    access_token = access_token_content["oauth_token"][0]
    access_token_secret = access_token_content["oauth_token_secret"][0]
    s = "ACCESS TOKEN        = {}\nACCESS TOKEN SECRET = {}"
    s = s.format(access_token, access_token_secret)
    print(s)

使い方

demo

  1. 上のTwitterOauth.pyを編集してTwitter AppのAPI keyとAPI secret keyを設定する
  2. python TwitterOauth.pyを実行する
  3. ブラウザが開き,Twitterの認証画面が表示される
  4. アクセストークンを取得したいTwitterアカウントでログインし,「連携アプリを認証」をクリックするとPINが表示される(PINが表示されない場合)
  5. ターミナルに戻ってPINを入力する
  6. アクセストークンが表示される

リンク

s-col
記事ははてブに書くことにした
https://scol.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away