ETrade APIへのアクセスを許可するクラスを作成しています。 (理論的には、実際にはOAuth 1.0を使用するすべてのAPIで動作します)。フルコードはin my GitHubです。私の質問に関連するコードは次の通りです:ブラウザにURLをPythonからロードする
base_url = 'https://etws.etrade.com'
class Authorization:
def __init__(self):
self.oauth_session = requests_oauthlib.OAuth1Session(config.oauth_consumer_key, config.consumer_secret,
callback_uri='oob')
self.oauth_url = base_url + "/oauth"
print(self.get_authorization_url())
self.run_authorization_server()
// ... snip ...
def run_authorization_server(self):
host_name = 'localhost'
host_port = 80
with server.HTTPServer((host_name, host_port), AuthenticationCallbackHandler) as httpd:
httpd.serve_forever()
私が見ての通り、私は認証URLを印刷し、ブラウザにコピーして貼り付けなければなりません。 IntelliJ IDEAを実行すると、コンソールで解析され、クリックすることができます。このURLは、ユーザーが自分のアカウントにログインしてアクセスできるようにするためのページを読み込みます。結果はhttp://localhost
への返信として返されます。このため、検証トークンを使用してリクエストをリッスンするHTTPServerのインスタンスを開始します。
このプロセスは理想的ではありません。私は認証URLをプログラムで読み込みたいと思います。問題を解決するには、承認を読み込む前に自分のローカルサーバーが起動していることを確認する必要があります。私が知る限り、server_forever()
は現在のスレッドをブロックします。これは、サーバーをスピンアップするためにスレッドを開始する必要があることを示しています。これはどうすればいいですか?さらに重要なのは、サーバーを起動してURLをロードするのが安全であることをどのように伝えるかです。最後に、実際にブラウザでURLをロードするにはどうすればよいですか?