使用Python为ETrade API生成oauth_signature

时间:2017-07-18 21:22:09

标签: python oauth etrade-api

E * Trade API允许您使用RESTful登录网站并操纵帐户或检索报价信息。虽然我在生成oauth_signature时遇到了麻烦,因为outhuth_signature符合位于底部的“练习题” documentation

简单的HMAC-SMA1算法已编码如下,并从此处https://us.etrade.com/ctnt/dev-portal/getContent?contentId=306a9d46-58c2-4cac-85f6-7717aea056bd再现oauth核心1.0a签名值。虽然我无法获得E * Trade签名值来重现。

def generate_oauth_signature():
    from urllib.parse import quote_plus
    from hashlib import sha1
    import binascii
    import hmac

    key = quote_plus('7d30246211192cda43ede3abd9b393b9') + \
          '&' + \
          quote_plus('XCF9RzyQr4UEPloA+WlC06BnTfYC1P0Fwr3GUw/B0Es=')
    key = key.encode()
    raw = quote_plus('GET') + '&' + \
          quote_plus('https://etws.etrade.com/accounts/rest/accountlist') + '&' + \
          quote_plus('oauth_consumer_key=c5bb4dcb7bd6826c7c4340df3f791188&oauth_nonce=0bba225a40d1bbac2430aa0c6163ce44&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1344885636&oauth_token=VbiNYl63EejjlKdQM6FeENzcnrLACrZ2JYD6NQROfVI=')
    raw = raw.encode()
    hashed = hmac.new(key, raw, sha1)
    sig = hashed.digest()
    oauth_signature = quote_plus(binascii.b2a_base64(hashed.digest())[:-1])

该函数应该产生“%2FXiv96DzZabnUG2bzPZIH2RARHM%3D”,但我还没有。有没有人为E * Trade API编写散列?

我知道etradepy.py,这是一个很好的包,但有点过时,与当前的E * Trade网站不匹配。

1 个答案:

答案 0 :(得分:1)

一个问题是oauth_token需要在参数字符串中编码(它最终会被双重编码)。我的是以下内容:

oauth_consumer_key=c5bb4dcb7bd6826c7c4340df3f791188&oauth_nonce=0bba225a40d1bbac2430aa0c6163ce44&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1344885636&oauth_token=VbiNYl63EejjlKdQM6FeENzcnrLACrZ2JYD6NQROfVI%3D