前提
我正在将我的产品配置数据库与我的POS和各种电子商务网站链接起来。谜题中的最后一个环节是连接Etsy。他们的向导(https://www.etsy.com/developers/documentation/reference/listing)是PHP特有的,但我使用的是python 3.7。
状态
由于以下问题,我能够成功获取所需的凭据:如何使用Python-Etsy HTTP API方法添加新项?我现在有以下凭据:
oauth_token
oauth_token_secret
oauth_consumer_key
verifier
key_string
shared_secret
我尝试了什么
我尝试同时使用python_etsy
和etsy_python
,但两者似乎都被放弃了,而且都是不完整的,每次都会产生异常。我尽了最大的努力,试图在出现每个问题时解决它,但我太迷失了。
正如上面链接的问题的答案中所建议的,我尝试使用OAuth1Session
对象。
>>> etsy = OAuth1Session(
... key_string,
... client_secret=shared_secret,
... resource_owner_key=oauth_token,
... resource_owner_secret=oauth_token_secret)
>>> esty.get('https://openapi.etsy.com/v2/users/__SELF__')
>>> response.status_code
403
>>> response.text
'oauth_problem=token_rejected'
我只是不知道如何正确使用给定的凭据,以便成功地对Etsy API进行API调用。
即使在定义OAuth1Session
对象etsy
时添加signature_type=SIGNATURE_TYPE_QUERY
也会产生相同的结果。
我将这作为一个新问题发布,因为上面链接的问题是特定于使用API添加新项的,而我正在寻找解释和转换PHP示例以在Python中使用的一般说明。这是我对其他API所做的,并取得了很好的成功,但这个特定的API已经抛出了一个循环。
verifier
在哪里比赛?
--更新--
代替oauth
会话,我使用了requests.get
,如下所示:
>>> import requests
>>> import uuid
>>> from datetime import datetime
>>> url = 'https://openapi.etsy.com/v2/oauth/access_token'
>>> params = {
... 'oauth_consumer_key': {oauth_consumer_key},
... 'oauth_signature': {verifier},
... 'oauth_signature_method': {method},
... 'oauth_nonce': str(uuid(uuid1()),
... 'oauth_timestamp': datetime.timestamp(datetime.utcnow())
... 'oauth_token': {oauth_token}
...}
>>> token_response = requests.get(url,params=params)
>>> print(rrr.status_code,rrr.text)
400 oauth_problem=verifier_invalid
我使用oauth_signature_method
的以下每个值尝试了上述操作:
- "PLAINTEXT">
- 'RSA-SHA1'
- 'HMAC-SHA1'
每个值都产生相同的结果。我还尝试将verifier
放置在oauth_nonce
参数中
使用etsy-python2模块获取和处理凭据。
pip install etsy2
from etsy2 import Etsy
from etsy2.oauth import EtsyOAuthHelper, EtsyOAuthClient
import urllib.parse as urlparse
from urllib.parse import parse_qs
api_key = <etsy keystring>
shared_secret = <etsy shared secret>
#define permission scopes
permission_scopes = ['listings_r', 'listings_w']
login_url, temp_oauth_token_secret =
EtsyOAuthHelper.get_request_url_and_token_secret(api_key, shared_secret, permission_scopes)
query = urlparse.urlparse(login_url).query
temp_oauth_token = parse_qs(query)['oauth_token'][0]
print(login_url)
#follow the url to acquire the verifier.
oauth_token, oauth_token_secret =
EtsyOAuthHelper.get_oauth_token_via_verifier(api_key, shared_secret, temp_oauth_token, temp_oauth_token_secret, input('Verifier: '))
etsy_oauth = EtsyOAuthClient(client_key = api_key,
client_secret = shared_secret,
resource_owner_key = oauth_token,
resource_owner_secret = oauth_token_secret)
etsy = Etsy(etsy_oauth_client = etsy_oauth)
etsy2
模块是最新的,正在维护中,所以现在,它是一个不错的选择。这些方法是在运行时从Etsy的API服务器动态定义的。定义Etsy
对象后,可以使用以下方法列出可用的方法:
dir(etsy)