파이썬에서 트위터 계정의 액세스 토큰 획득 반자동화 [OAuth 인증]

추가



2018/10/08



이 기사의 방법을 사용하려면 앱 설정에서 Callback URL을 비워야합니다. 비워두지 않으면 앱 인증 후에 PIN이 표시되지 않습니다. (이 정보는 오래되었습니다 2021/03/15 추가)

2021/03/15



이 기사의 방법을 사용하려면 앱 설정에서 3-legged OAuth를 비활성화해야합니다.
그렇지 않으면 앱 인증 후에 PIN이 표시되지 않습니다.


2021/11/29



방치하고 있는 동안에 API 의 사양 변경이 있었던 것 같아, 그것에 의해 움직이지 않게 되어 있던 것을 수정했습니다.

이전



최근, Twitter API의 사용 조건의 엄격화가 화제가 되고 있습니다. API를 사용하려면 개발자 등록이 필요하기 때문에 나도 매우 어려웠습니다.

요 전날 개발자 등록 신청이 무사히 승인되었으므로, Twitter Apps의 재설정 등을 하고 있으면 Access Token의 취득이 번거롭다고 생각 Python으로 자동화하는 것을 생각했습니다.

그러나 완전한 자동화에는 이르지 않고 반자동화가 되어 버렸습니다. PIN 인증 당을 자동화하는 것은 아직 내 실력으로는 할 수 없었습니다.

또한,
  • [Twitter OAuth] 파이썬에서 트위터 계정의 액세스 토큰 (access token) 얻기 (OAuth 인증) - Qiita
  • 파이썬에서 자신 이외의 트위터 계정에 대한 액세스 토큰을 얻으십시오 - Hatena Blog

  • 를 참고로 했습니다.

    필요한 라이브러리


  • oauth2

  • conda에서는 들어 가지 않는 것 같습니다. . .
    pip install oauth2
    

    코드




    TwitterOauth.py
    import urllib
    import json
    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):
            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):
            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)
            body = urllib.parse.urlencode({"oauth_callback": "oob"})
            resp, content = client.request(self.REQUEST_TOKEN_URL, "POST", body=body)
            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()
        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)
    

    사용법




  • 위의 TwitterOauth.py를 편집하여 Twitter 앱의 API 키와 API secret key를 설정합니다
  • python TwitterOauth.py 실행
  • 브라우저가 열리고 트위터 인증 화면이 표시됩니다.
  • 액세스 토큰을 얻고 싶은 Twitter 계정으로 로그인하고 "연합 앱 인증"을 클릭하면 PIN이 표시됩니다 (PIN이 표시되지 않는 경우).
  • 터미널로 돌아가서 PIN을 입력하십시오
  • 액세스 토큰이 표시됩니다
  • 좋은 웹페이지 즐겨찾기