Last active
April 7, 2018 16:50
-
-
Save prs-watch/0fd9ff7d501b7e881c159f9abaf3f93d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import sys | |
| import requests | |
| from requests_oauthlib import OAuth1 as oauth | |
| import webbrowser | |
| class Settings: | |
| """ | |
| アプリケーションを登録すると取得出来る認証情報を保持するプロパティクラス。 | |
| """ | |
| CLIENT_ID = 'XXX' | |
| CLIENT_SECRET = 'YYY' | |
| class Authenticater: | |
| """ | |
| 認証器クラス。 | |
| access_tokenの発行を内部で実行した上、OAuth情報オブジェクトを返却する。 | |
| """ | |
| # access_token発行時に用いる認証コード発行URL | |
| AUTH_URL = 'https://api.login.yahoo.com/oauth2/request_auth' | |
| # access_token発行URL | |
| TOKEN_URL = 'https://api.login.yahoo.com/oauth2/get_token' | |
| # リダイレクトURI。Out of Band設定。 | |
| REDIRECT_URI = 'oob' | |
| # レスポンス形式。 | |
| RESPONSE_TYPE = 'code' | |
| # 認証形式 | |
| GARNT_TYPE = 'authorization_code' | |
| # httpパラメータ | |
| params = {} | |
| @classmethod | |
| def _get_authorization_code(cls): | |
| """ | |
| 認証コードを取得する。 | |
| ブラウザ画面を立ち上げた上認証を確認する手順を踏む形で実装。 | |
| """ | |
| # パラメータを詰める | |
| cls.params['client_id'] = Settings.CLIENT_ID | |
| cls.params['redirect_uri'] = cls.REDIRECT_URI | |
| cls.params['response_type'] = cls.RESPONSE_TYPE | |
| # 認証コード発行URLにHTTP GET | |
| res = requests.get(cls.AUTH_URL, params=cls.params, allow_redirects=False) | |
| code = res.status_code | |
| url = res.url | |
| # ステータスコードが302の場合成功、それ以外は失敗として処理。 | |
| if code == 302: | |
| webbrowser.open(url) | |
| else: | |
| print('Fail to redirect to {url}.Status Code is {code}'.format(url=url, code=code)) | |
| sys.exit() | |
| @classmethod | |
| def _get_token(cls): | |
| """ | |
| access_tokenを取得する。 | |
| input箇所では_get_authorization_code()で取得の認証コードを入力。 | |
| """ | |
| # パラメータ詰め | |
| code = input('Type authorization code >> ') | |
| cls.params['client_secret'] = Settings.CLIENT_SECRET | |
| cls.params['grant_type'] = cls.GARNT_TYPE | |
| cls.params['code'] = code | |
| access_token = requests.post(cls.TOKEN_URL, data=cls.params).json()['access_token'] | |
| # OAuth認証情報を返却 | |
| return oauth(Settings.CLIENT_ID, Settings.CLIENT_SECRET, access_token) | |
| @classmethod | |
| def execute(cls): | |
| """ | |
| 実行用のパブリックメソッド。 | |
| """ | |
| cls._get_authorization_code() | |
| return cls._get_token() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment