from suds.client import Client from suds import WebFault import logging import getpass import datetime import time #Begin test gzip format import gzip from cStringIO import StringIO import binascii #End test gzip format WSDL_URL = "https://trth-api.thomsonreuters.com/TRTHApi-5.8/wsdl/TRTHApi.wsdl" #=============================================================================== def createDataObject( type, field, value, longName = "" ): data = client.factory.create( 'ns0:Data' ) data.type.value = type data.field.value = field data.value = value data.longName = longName return data #=============================================================================== def getTokenId( message ): startIndex = str( message ).find( "<typens:tokenId>" ) endIndex = str( message ).find( "</typens:tokenId>" ) return str( message )[startIndex+16:endIndex] #=============================================================================== # Based on the SEARCHRICS example on page 37 of the TRTH API User Guide 5.7.2 #=============================================================================== def searchRICs( client ): print "---------------------" print "SearchRICs()" print "---------------------" # set date range dateRange = client.factory.create( 'ns0:DateRange' ) dateRange.start = "2000-01-01" dateRange.end = "2006-12-31" # create data objects domain = createDataObject( "Text", "Domain", "EQU" ) exchange = createDataObject( "Text", "Exchange", "NMS" ) ric = createDataObject( "Text", "RICRegex", "^MSFT" ) # create criteria and add data objects criteria = client.factory.create( 'ns0:ArrayOfData' ) criteria.data.append( domain ) criteria.data.append( exchange ) criteria.data.append( ric ) # search RICs try: result = client.service.SearchRICs( dateRange, criteria, False ) #print "Result length:", len(result['instrument']) #for res in result['instrument']: # print res.code print "result:", result except WebFault, f: print "f:", f print "f.fault:", f.fault #=============================================================================== # Based on the EXPANDCHAIN example on page 39 of the TRTH API User Guide 5.7.2 #=============================================================================== def expandChain( client ): print "---------------------" print "ExpandChain()" print "---------------------" # create an instrument instrument = client.factory.create( 'ns0:Instrument' ) instrument.code = "0#.DJI" instrument.status = None # create a date range dateRange = client.factory.create( 'ns0:DateRange' ) dateRange.start = "2006-07-01" dateRange.end = "2006-07-31" # create a time range timeRange = client.factory.create( 'ns0:TimeRange' ) timeRange.start = "0:00" timeRange.end = "23:59:59.999" # expand chain try: result = client.service.ExpandChain( instrument, dateRange, timeRange, True ) print "result:", result except WebFault, f: print "f:", f print "f.fault:", f.fault #=============================================================================== # Get the Look Back Period Information #=============================================================================== def GetLookBackPeriod( client ): print "---------------------" print "GetLookBackPeriod()" print "---------------------" # expand chain try: result = client.service.GetLookBackPeriod() print "result:", result except WebFault, f: print "f:", f print "f.fault:", f.fault #=============================================================================== # Based on the SUBMITFTPREQUEST example on page 46 of the TRTH API User Guide 5.7.2 #=============================================================================== def submitFTPRequest( client ): print "---------------------" print "submitFTPRequest()" print "---------------------" # create an instrument instrument = client.factory.create( 'ns0:Instrument' ) instrument.code = "BHP.AX" instrument.status = None instrumentList = client.factory.create("ns0:ArrayOfInstrument") instrumentList.instrument = [instrument] # create a date range dateRange = client.factory.create( 'ns0:DateRange' ) dateRange.start = "2006-07-01" dateRange.end = "2006-07-31" # create a time range timeRange = client.factory.create( 'ns0:TimeRange' ) timeRange.start = "0:00" timeRange.end = "23:59:59.999" # create message type fields = ["Open","High", "Low"] messageType = client.factory.create("ns0:MessageType") messageType.name = "Intraday 10Min" fieldArray = client.factory.create("ns0:ArrayOfString") fieldArray.string = fields messageType.fieldList = fieldArray typesArray = client.factory.create("ns0:ArrayOfMessageType") typesArray.messageType = [messageType] # create a LargeRequestSpec request = client.factory.create("ns0:LargeRequestSpec") request.friendlyName = "Intraday FTP Request" request.requestType = (client.factory.create("ns0:RequestType")).Intraday request.instrumentList = instrumentList request.dateRange = dateRange request.timeRange = timeRange request.messageTypeList = typesArray request.requestInGMT = False request.displayInGMT = False request.marketDepth = 0 request.splitSize = 500 request.delivery = (client.factory.create("ns0:RequestDelivery")).Pull request.sortType = (client.factory.create("ns0:RequestSortType")).RICSequence request.fileFormat = (client.factory.create("ns0:RequestFileFormat")).Single request.dateFormat = (client.factory.create("ns0:RequestDateFormat")).DDMMYYYY request.applyCorrections = False request.displayMicroseconds = False request.disableDataPersistence = True request.includeCurrentRIC= True print request # submit request try: reqID = client.service.SubmitFTPRequest(request) print "Request:", reqID except WebFault, f: print "f:", f print "f.fault:", f.fault #=============================================================================== # #=============================================================================== def submitRequest( client ): print "---------------------" print "submitRequest()" print "---------------------" # create an instrument instrument = client.factory.create( 'ns0:Instrument' ) instrument.code = "AUD=D3" instrument.status = None # create a date range date = client.factory.create( 'xsd:date' ) date = "2014-01-02" # create a time range timeRange = client.factory.create( 'ns0:TimeRange' ) timeRange.start = "0:00" timeRange.end = "23:59:59.999" # create a LargeRequestSpec request = client.factory.create("ns0:RequestSpec") request.friendlyName = "Single Day Request" request.requestType = (client.factory.create("ns0:RequestType")).TimeAndSales request.instrument = instrument request.date = date request.timeRange = timeRange #request.messageTypeList = typesArray request.requestInGMT = False request.displayInGMT = False request.disableHeader = False request.marketDepth = 0 request.dateFormat = (client.factory.create("ns0:RequestDateFormat")).DDMMYYYY request.applyCorrections = False request.displayMicroseconds = False request.disableDataPersistence = True request.includeCurrentRIC= True print request # submit request try: reqID = client.service.SubmitRequest(request) print "Request:", reqID[1] except WebFault, f: print "f:", f print "f.fault:", f.fault complete = False while(True): res = client.service.GetRequestResult(reqID[1]); print "======Status: ", res if(res[1]['status'] == (client.factory.create("ns0:RequestStatusCode")).Complete or res[1]['status'] == (client.factory.create("ns0:RequestStatusCode")).Aborted): if(res[1]['status'] == (client.factory.create("ns0:RequestStatusCode")).Complete): complete = True break; time.sleep(10) if(complete == True): fileR = open('result.csv.gz', 'w') fileR.write(res[1]['data']) fileR.close() #=============================================================================== if __name__ == "__main__": # create suds client from TRTH API url client = Client( WSDL_URL, faults=False ) logging.basicConfig() logging.getLogger('suds.client').setLevel(logging.DEBUG) # get username username = raw_input( "Enter username:" ) # get password (TRTH) password = getpass.getpass( 'Enter a password:' ) # create credentials object credentials = client.factory.create( 'ns0:CredentialsHeader' ) credentials.username = username credentials.password = password # add credentials to header client.set_options( soapheaders = credentials ) # get version version = client.service.GetVersion() # add tokenID to credentials and add to header credentials.tokenId = getTokenId( client.last_received() ) client.set_options( soapheaders = credentials ) # attempt to make requests using the API searchRICs( client ) # expandChain( client ) # submitFTPRequest( client ) # GetLookBackPeriod( client ) # submitRequest( client