0

I'm trying to get quotes from the etrade API. I'm able to list accounts, get transactions, but not get quotes. I've tried removing the accounts and transactions api calls but it makes no difference. I get an "oauth_problem=signature_invalid" response. Any ideas what I need to do differently?

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()

1 Answers1

0

Not sure if you figured this out but you had a typo here:

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

Should be using quote_url, not quote_url_template

Jonathan Leon
  • 2,877
  • 2
  • 3
  • 10