0

我正在尝试从 etrade API 获取报价。我可以列出帐户,获取交易,但不能获取报价。我已经尝试删除帐户和交易 API 调用,但没有任何区别。我收到“oauth_problem=signature_invalid”响应。有什么想法我需要做不同的事情吗?

from rauth import OAuth1Service
import webbrowser
import hmac

# required for google sheets
# from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request


class ETradeManager():
    def __init__(self):
        session = None
        service = None

    def connect_to_etrade(self):
        self.service = OAuth1Service(
            name='etrade',
            consumer_key='',
            consumer_secret='',
            request_token_url='https://apisb.etrade.com/oauth/request_token',
            access_token_url='https://apisb.etrade.com/oauth/access_token',
            authorize_url='https://us.etrade.com/e/t/etws/authorize?key={}&token={}',
            base_url='https://etsw.etrade.com')

        oauth_token, oauth_token_secret = self.service.get_request_token(params=
                                                                    {'oauth_callback': 'oob',
                                                                     'format': 'json'})

        auth_url = self.service.authorize_url.format(self.service.consumer_key, oauth_token)
        webbrowser.open(auth_url)
        verifier = input('Please input the verifier: ')
        print("Attempting to get session")
        self.session = self.service.get_auth_session(oauth_token, oauth_token_secret, params={'oauth_verifier': verifier})

        url = 'https://apisb.etrade.com/v1/accounts/list'
        resp = self.session.get(url, params={'format': 'json'})
        accountid = ""
        print(resp.text)
        trans_url_template = "https://apisb.etrade.com/v1/accounts/{}/transactions"
        trans_url = trans_url_template.format(accountid)
        resp = self.session.get(trans_url, params={'format': 'json'})
        f = open("trans.xml", "w")
        f.write(resp.text)
        # key = self.service.consumer_secret + \
        #       '&' + \
        #       oauth_token_secret
        # hashed = hmac.new(key.encode(), base_string.encode(), sha1)

    # def get_quote(self):
        quote_url_template = "https://apisb.etrade.com/v1/market/quote/{}"
        quote_url = quote_url_template.format("TSLA")
        resp = self.session.get(quote_url_template, params={'format': 'json'})
        f = open("quote.xml", "w")
        f.write(resp.text)




trade_manager = ETradeManager()
    

trade_manager.connect_to_etrade()
# trade_manager.get_quote()
4

1 回答 1

0

不知道你是否明白这一点,但你在这里有一个错字:

    resp = self.session.get(quote_url_template, params={'format': 'json'})

应该使用quote_url,而不是quote_url_template

于 2020-11-30T04:14:55.047 回答