aboutsummaryrefslogtreecommitdiffstats
path: root/python/bbg_helpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/bbg_helpers.py')
-rw-r--r--python/bbg_helpers.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py
new file mode 100644
index 00000000..ea23cb3a
--- /dev/null
+++ b/python/bbg_helpers.py
@@ -0,0 +1,63 @@
+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)