Python で URL クエリ文字列を使用してリクエストを構築する 質問する

Python で URL クエリ文字列を使用してリクエストを構築する 質問する

何をやっているのかよくわかりません。これにはライブラリを使うべきでしょうか? それとも手動で行うべきでしょうか?

そこで私はWiThingsを使って何か作業をしようとしています(ウィシングス) Python の API。

一部のリクエストを実行するには、OAuth 認証が必要です。リクエスト ライブラリを使用して、OAuth トークンとシークレット トークン、およびコンシューマー トークンとコンシューマー シークレット トークンを取得しました。

今、私はリクエストをしなければならない段階にきており、いくつかの問題に直面しています。私が行う必要があるリクエストの形式は次のとおりです (API からの例):

http://wbsapi.withings.net/notify?action=subscribe
&callbackurl=http%3a%2f%2fwww.yourdomain.net%2fyourCustomApplication.php
&comment=Your%20Own%20Application%20Description
&oauth_consumer_key=c331c571585e7c518c78656f41582e96fc1c2b926cf77648223dd76424b52b
&oauth_nonce=accbac1b7ee2b86b828e6dc4a5a539b2
&oauth_signature=XfobZMboIg2cRyNKAvyzONHHnKM%3D
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1311842514
&oauth_token=887557411788d5120537c6550fbf2df68921f8dd6f8c7e7f9b441941eb10
&oauth_version=1.0
&userid=831

私の知る限り、これは末尾のユーザー ID を除けば、OAuth の典型的な形式とほぼ同じです。

では、リクエスト ライブラリを使用してこのようなリクエストを行うことは可能ですか? または、他のライブラリを使用することは可能ですか? コメント、ユーザー ID、コールバック URL フィールドを含む URL を正しく取得するにはどうすればよいですか? または、この URL を手動で生成する必要がありますか? その場合、これを行うための最善の方法は何ですか?

しばらくの間、この問題で行き詰まっているので、どんな助けでも大歓迎です。

編集

明確に言うと、私が参照しているコードの約 98% を理解しています。最後の部分で少しだけ問題があります。

それで、次のコードを作成しました:

from __future__ import unicode_literals
from urlparse import parse_qs
import requests
from requests_oauthlib import OAuth1Session

consumer_key = '**Valid consumer key**'

consumer_secret = '**Valid consumer secret**'


oauth_key = '**Valid oauth key obtained through requests library and OAuth workflow**'

oauth_secret ='**Valid oauth secret obtained through requests library and OAuth workflow**'

verifier = '**Valid consumer key obtained through requests library and OAuth workflow**'

base_url = 'http://wbsapi.withings.net/notify'

params = {
'action': 'subscribe',
'callbackurl': '**callback URL**',
'comment': '**comment**',
'oauth_consumer_key': '**consumer_key**',
'oauth_nonce': 'etc etc',
'oauth_signature' : '' # <-------------- Where do I get this
# etc etc... I have everything else
}
r = requests.get("http://wbsapi.withings.net/notify", params=params)

必要なものはこれだけです。署名以外の必要なものはすべて揃っています。OAuth ライブラリから署名を取得する方法はありますか? これが私を妨げているすべてです。

ベストアンサー1

GETURL クエリ文字列を使用してリクエストを実行するには:

import requests

params = {
    'action': 'subscribe',
    'callbackurl': '',
    'comment': '',
    'oauth_consumer_key': '',
    'oauth_nonce': '',
    # more key=value pairs as appeared in your query string
}
r = requests.get("http://wbsapi.withings.net/notify", params=params)

それがクリアされたら、あとは文書化されたワークフローに従うだけです。http://www.withings.com/en/api/oauthguideそしてそれを実践する

  1. OAuthキーとOAuthシークレットを受け取ったら、GET次のエンドポイントでリクエストを実行し、クエリ文字列返されるものtoken:

    https://oauth.withings.com/account/request_token? oauth_callback=http%3A%2F%2Fexample.com%2Fget_access_token &oauth_consumer_key=c331c571585e7c518c78656f41582e96fc1c2b926cf77648223dd76424b52b &oauth_nonce=f71972b1fa93b8935ccaf34ee02d7657 &oauth_signature=J8xzgFtHTsSRw8Ejc8UDV2jls34%3D &oauth_signature_method=HMAC-SHA1 &oauth_timestamp=1311778988 &oauth_version=1.0

  2. 次に、許可する次のリクエストで受け取ったトークンは、ユーザーID:

    https://oauth.withings.com/account/authorize? oauth_callback=http%3A%2F%2Fexample.com%2Fget_access_token &oauth_consumer_key=c331c571585e7c518c78656f41582e96fc1c2b926cf77648223dd76424b52b &oauth_nonce=369f9ceb2f285ac637c9a7e9e98019bd &oauth_signature=OR9J9iEl%2F2yGOXP2wk5c2%2BWtYvU%3D &oauth_signature_method=HMAC-SHA1 &oauth_timestamp=1311778988 &oauth_token=5bb105d2292ff43ec9c0f633fee9033045ed4643e9871b80ce586dc1bf945 &oauth_version=1.0

  3. access_token次に、このエンドポイントをさらにヒットしてリクエストする必要がありますクエリ文字列:

    https://oauth.withings.com/account/access_token? oauth_consumer_key=c331c571585e7c518c78656f41582e96fc1c2b926cf77648223dd76424b52b &oauth_nonce=7acd22371fc56fd8a0aaf8416f79f84f &oauth_signature=jmj1g%2FB3rYR2DCpWp86jB5YVHIM%3D &oauth_signature_method=HMAC-SHA1 &oauth_timestamp=1311778988 &oauth_token=5bb105d2292ff43ec9c0f633fee9033045ed4643e9871b80ce586dc1bf945 &oauth_version=1.0 &userid=831

  4. これで、質問内の前述のリクエストやその他のリクエストを実行するために必要なものがすべて揃いました。ドキュメントから直接取得した例は次のとおりです。

    http://wbsapi.withings.com/measure? アクション=getmeas &oauth_consumer_key=c331c571585e7c518c78656f41582e96fc1c2b926cf77648223dd76424b52b &oauth_nonce=accbac1b7ee2b86b828e6dc4a5a539b2 &oauth_signature=XfobZMboIg2cRyNKAvyzONHHnKM%3D &oauth_signature_method=HMAC-SHA1 &oauth_timestamp=1311842514 &oauth_token=887557411788d5120537c6550fbf2df68921f8dd6f8c7e7f9b441941eb10 &oauth_version=1.0 &userid=831

繰り返しますが、明示的なライブラリがなくてもすべて実行できます。oauthワークフローを次のように終了できますrequests.getクエリ文字列メソッドの引数dictへのフィードから構築されます。params

これがあなたの目標達成に役立つことを心から願っています。

おすすめ記事