如何使用Etsy API凭据在python中获取和POST数据



前提

我正在将我的产品配置数据库与我的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_etsyetsy_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)

相关内容

  • 没有找到相关文章

最新更新