2017-04-26 4 views
1

私は次のリクエストます手動コピーすることなく、アクセストークンを取得

https://oauth.vk.com/authorize?redirect_uri=https%3A%2F%2Foauth.vk.com%2Fblank.html&response_type=token&client_id=5842359&v=5.63&scope=friends%2Coffline&display=page

アクセストークンを取得するために。このURLにより、vk.comのログインページが表示されます(まだログインしていない場合)。その後、ユーザーにアプリケーションの承認を求めるメッセージが表示され、https://oauth.vk.com/blank.html#access_token= {token} & expires_in = 0 & user_id = {id}にリダイレクトされます。実際にアクセストークンを取得するには、アドレスバーから手動でコピーする必要があります。このプロシージャは、公式のAPIで指定されています。これを回避する方法はありますか? Pythonコードのみを使用してトークンを取得するにはどうすればよいですか?

以下

は、URLを生成手順です:あなたはAuth_codeを受信し、access_tokenはを取得するために、このコードを使用することを特徴とする請求

import requests 

def authorize_app(client_id, redirect_uri = None): 
''' 
    The function generates an url, which redirects to login page (optional, if not logged in) and app authorization. 
''' 
if redirect_uri == None: 
    redirect_uri = 'https://oauth.vk.com/blank.html' # default callback url 
oauth = requests.get('https://oauth.vk.com/authorize', params = {'client_id' : str(client_id), 
                   'redirect_uri' : redirect_uri, 
                   'display' : 'page', 
                   'scope' : ['friends,offline'], # offline option makes the token permanent 
                   'response_type' : 'token', 
                   'v' : 5.63}) 
return oauth.url 
+0

APIドキュメントとoauthへのリンク:https://vk.com/dev/access_token – jackdawrites

+0

redirect_uriを変更できませんか?通常の手順は、ローカルウェブサーバ( 'localhost:5000'と言う)を開いてそこにユーザをリダイレクトし、トークンを受け取ったらサーバを停止することです。 –

+0

@Rawingありがとう、私はそれを試してみます。 – jackdawrites

答えて

0

あなたは、認証コードの流れを使用することができます。

auth_codeとaccess_tokensの取得は、OAuthサーバーへのPOSTリクエストです。あなたのコードのresponse_typeで

は、認証コードを取得し、このhttps://vk.com/dev/auth_sitesを参照してください

acccess_token取得するためにこのコードを使用するコードである必要があります。一般に、このフローはすべてのOAuthプロバイダで同じです。

+0

しかし、私はhttps://oauth.vk.comをredirect_uriとして使用しているので、access_tokenを取得するコードは、ブラウザのアドレスバーからのみアクセス可能なURL内でも提供されています。私の質問は、私はURLからこのコードを取ることができるかどうかです? – jackdawrites

+0

はい、これを実現するいくつかの方法があります。 1つの方法は、ex:localhost:8080のポートをリッスンするpythonを使用してhttpserverを作成することです。認証が完了したら、redirect_uriをlocalhost:8080に与えます。リダイレクトすると、クエリ文字列パラメータからコードを取得できます。 response_type = access_tokenを使用して直接access_tokenを取得している場合は、上記の同じスニペットを使用してサーバーにリクエストを送信し、pythonコード内でaccess_tokenを取得できます。 –

関連する問題