【问题标题】:How to use Etsy API credentials to GET and POST data in python如何使用 Etsy API 凭据在 python 中获取和发布数据
【发布时间】:2021-01-10 00:02:09
【问题描述】:

前提

我正在将我的产品配置数据库与我的 POS 和各种电子商务网站链接起来。拼图中的最后一个链接是连接到 Etsy。他们的指南 (https://www.etsy.com/developers/documentation/reference/listing) 专门针对 PHP,但我正在使用 python 3.7。

状态

由于这个问题,我已经能够成功获得所需的凭据:How to add a new item using Python Etsy HTTP API methods?我现在拥有以下凭据:

  • oauth_token
  • oauth_token_secret
  • oauth_consumer_key
  • verifier
  • key_string
  • shared_secret

我的尝试

我尝试同时使用python_etsyetsy_python,但两者似乎都已被废弃且不完整,每次都会产生异常。我尽我最大的能力尝试解决出现的每个问题,但我迷失了。

正如question linked above 的答案中所建议的那样,我尝试使用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。

即使在定义OAuth1Session 对象etsy 时添加signature_type=SIGNATURE_TYPE_QUERY 也会产生相同的结果。

我将此作为一个新问题发布,因为question linked above 专门用于使用 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 的以下每个值尝试了上述操作:

  • '明文'
  • 'RSA-SHA1'
  • 'HMAC-SHA1'

每个值产生相同的结果。我还尝试将verifier 放在oauth_nonce 参数中

【问题讨论】:

    标签: python-3.x api https etsy


    【解决方案1】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 2019-08-17
      • 2017-01-19
      • 2015-10-22
      • 2016-05-28
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多