import blpapi import sys import pandas as pd # Fill SessionOptions def init_bbg_session(ipaddr, port=8184): sessionOptions = blpapi.SessionOptions() sessionOptions.setServerHost(ipaddr) sessionOptions.setServerPort(port) session = blpapi.Session(sessionOptions) # Start a Session if not session.start(): print "Failed to start session." sys.exit(0) if not session.openService("//blp/refdata"): print "Failed to open //blp/refdata" sys.exit(0) return session def retreive_data(session, securities, fields): refDataService = session.getService("//blp/refdata") request = refDataService.createRequest("ReferenceDataRequest") for security in securities: request.append("securities", security) for field in fields: request.append("fields", field) session.sendRequest(request) data = [] try: # Process received events while(True): # We provide timeout to give the chance to Ctrl+C handling: ev = session.nextEvent(500) if ev.eventType() in [blpapi.Event.PARTIAL_RESPONSE, blpapi.Event.RESPONSE]: for msg in ev: data.append(msg) # Response completely received, so we could exit if ev.eventType() == blpapi.Event.RESPONSE: break finally: # Stop the session session.stop() return data def process_msgs(data, fields): newdata = [] for msg in data: if msg.messageType() == blpapi.Name("ReferenceDataResponse"): securityDataArray = msg.getElement("securityData") for securityData in securityDataArray.values(): securityName = securityData.getElementValue("security") fieldData = securityData.getElement("fieldData") row = {'security': securityName} for fieldName in fields: try: fieldValue = fieldData.getElementValue(fieldName) row[fieldName] = fieldValue except blpapi.NotFoundException: row[fieldName] = None newdata.append(row) return pd.DataFrame.from_dict(newdata)