1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
from common import root
import os
import requests, zipfile
from io import BytesIO
import xml.etree.ElementTree as ET
import datetime
def getMarkitIRData(date):
basedir = os.path.join(root, "data", "Yield Curves")
datestr = datetime.datetime.strftime(date, "%Y%m%d")
filename = "InterestRates_USD_{0}.xml".format(datestr)
if not os.path.exists(os.path.join(basedir, filename)):
r = requests.get('http://www.markit.com/news/InterestRates_USD_{0}.zip'.format(datestr))
if "x-zip" in r.headers['content-type']:
with zipfile.ZipFile(BytesIO(r.content)) as z:
z.extractall(path = os.path.join(root, "data", "Yield Curves"))
else:
return getMarkitIRData(date-datetime.timedelta(days=1))
tree = ET.parse(os.path.join(root, "data", "Yield Curves", filename))
deposits = {tenor: rate for tenor, rate in \
zip([e.text for e in tree.findall('./deposits/*/tenor')],
[float(e.text) for e in tree.findall('./deposits/*/parrate')])}
swaps = {tenor: rate for tenor, rate in \
zip([e.text for e in tree.findall('./swaps/*/tenor')],
[float(e.text) for e in tree.findall('./swaps/*/parrate')])}
effectiveasof = tree.find('./effectiveasof').text
MarkitData = {'deposits': deposits,
'swaps': swaps,
'effectiveasof': datetime.datetime.strptime(effectiveasof, "%Y-%m-%d").date()}
return MarkitData
if __name__=="__main__":
print(getMarkitIRData(datetime.date.today()))
|