Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I finally figured it out. I did a fair bit of combrowse.py detective work, and I compared with the JAVA, C, C++, and .NET examples in the BBG API download. Interestingly enough the Bloomberg Helpdesk people knew pretty much null when it came to these things, or perhaps I was just talking to the wrong person.</p> <p>Here is my code.</p> <p>asynchronousHandler.py:</p> <pre><code>import win32com.client from pythoncom import PumpWaitingMessages from time import time, strftime import constants class EventHandler: def OnProcessEvent(self, result): event = win32com.client.gencache.EnsureDispatch(result) if event.EventType == constants.SUBSCRIPTION_DATA: self.getData(event) elif event.EventType == constants.SUBSCRIPTION_STATUS: self.getStatus(event) else: self.getMisc(event) def getData(self, event): iterator = event.CreateMessageIterator() while iterator.Next(): message = iterator.Message dataString = '' for fieldIndex, field in enumerate(constants.fields): if message.AsElement.HasElement(field): element = message.GetElement(field) if element.IsNull: theValue = '' else: theValue = ', Value: ' + str(element.Value) dataString = dataString + ', (Type: ' + element.Name + theValue + ')' print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString + ', CorrelationId: ' + str(message.CorrelationId) + dataString def getMisc(self, event): iterator = event.CreateMessageIterator() while iterator.Next(): message = iterator.Message print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString def getStatus(self, event): iterator = event.CreateMessageIterator() while iterator.Next(): message = iterator.Message if message.AsElement.HasElement('reason'): element = message.AsElement.GetElement('reason') print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString + ', CorrelationId: ' + str(message.CorrelationId) + ', Category: ' + element.GetElement('category').Value + ', Description: ' + element.GetElement('description').Value if message.AsElement.HasElement('exceptions'): element = message.AsElement.GetElement('exceptions') exceptionString = '' for n in range(element.NumValues): exceptionInfo = element.GetValue(n) fieldId = exceptionInfo.GetElement('fieldId') reason = exceptionInfo.GetElement('reason') exceptionString = exceptionString + ', (Field: ' + fieldId.Value + ', Category: ' + reason.GetElement('category').Value + ', Description: ' + reason.GetElement('description').Value + ') ' print strftime('%m/%d/%y %H:%M:%S') + ', MessageType: ' + message.MessageTypeAsString + ', CorrelationId: ' + str(message.CorrelationId) + exceptionString class bloombergSource: def __init__(self): session = win32com.client.DispatchWithEvents('blpapicom.Session' , EventHandler) session.Start() started = session.OpenService('//blp/mktdata') subscriptions = session.CreateSubscriptionList() for tickerIndex, ticker in enumerate(constants.tickers): if len(constants.interval) &gt; 0: subscriptions.AddEx(ticker, constants.fields, constants.interval, session.CreateCorrelationId(tickerIndex)) else: subscriptions.Add(ticker, constants.fields, session.CreateCorrelationId(tickerIndex)) session.Subscribe(subscriptions) endTime = time() + 2 while True: PumpWaitingMessages() if endTime &lt; time(): break if __name__ == "__main__": aBloombergSource = bloombergSource() </code></pre> <p>constants.py:</p> <pre><code>ADMIN = 1 AUTHORIZATION_STATUS = 11 BLPSERVICE_STATUS = 9 PARTIAL_RESPONSE = 6 PUBLISHING_DATA = 13 REQUEST_STATUS = 4 RESOLUTION_STATUS = 12 RESPONSE = 5 SESSION_STATUS = 2 SUBSCRIPTION_DATA = 8 SUBSCRIPTION_STATUS = 3 TIMEOUT = 10 TOKEN_STATUS = 15 TOPIC_STATUS = 14 UNKNOWN = -1 fields = ['BID'] tickers = ['AUD Curncy'] interval = '' #'interval=5.0' </code></pre> <p>For historical data I used this simple script:</p> <pre><code>import win32com.client session = win32com.client.Dispatch('blpapicom.Session') session.QueueEvents = True session.Start() started = session.OpenService('//blp/refdata') dataService = session.GetService('//blp/refdata') request = dataService.CreateRequest('HistoricalDataRequest') request.GetElement('securities').AppendValue('5 HK Equity') request.GetElement('fields').AppendValue('PX_LAST') request.Set('periodicitySelection', 'DAILY') request.Set('startDate', '20090119') request.Set('endDate', '20090130') cid = session.SendRequest(request) ADMIN = 1 AUTHORIZATION_STATUS = 11 BLPSERVICE_STATUS = 9 PARTIAL_RESPONSE = 6 PUBLISHING_DATA = 13 REQUEST_STATUS = 4 RESOLUTION_STATUS = 12 RESPONSE = 5 SESSION_STATUS = 2 SUBSCRIPTION_DATA = 8 SUBSCRIPTION_STATUS = 3 TIMEOUT = 10 TOKEN_STATUS = 15 TOPIC_STATUS = 14 UNKNOWN = -1 stayHere = True while stayHere: event = session.NextEvent(); if event.EventType == PARTIAL_RESPONSE or event.EventType == RESPONSE: iterator = event.CreateMessageIterator() iterator.Next() message = iterator.Message securityData = message.GetElement('securityData') securityName = securityData.GetElement('security') fieldData = securityData.GetElement('fieldData') returnList = [[0 for col in range(fieldData.GetValue(row).NumValues+1)] for row in range(fieldData.NumValues)] for row in range(fieldData.NumValues): rowField = fieldData.GetValue(row) for col in range(rowField.NumValues+1): colField = rowField.GetElement(col) returnList[row][col] = colField.Value stayHere = False break element = None iterator = None message = None event = None session = None print returnList </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload