-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathtrkd_interday.py
125 lines (109 loc) · 5.49 KB
/
trkd_interday.py
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
'''
The RKD API sample code is provided for informational purposes only
and without knowledge or assumptions of the end users development environment.
We offer this code to provide developers practical and useful guidance while developing their own code.
However, we do not offer support and troubleshooting of issues that are related to the use of this code
in a particular environment; it is offered solely as sample code for guidance.
Please see the Refinitiv Knowledge Direct (RKD) API (formerly known as TRKD API) product page at https://my.refinitiv.com
for additional information regarding the RKD API.'''
import os
import sys
import requests
import json
import getpass
from dotenv import load_dotenv
# Send HTTP request for all services
def doSendRequest(url, requestMsg, headers):
result = None
try:
# send request
result = requests.post(
url, data=json.dumps(requestMsg), headers=headers)
# print('outgoing message is %s'%(json.dumps(requestMsg)))
# handle error
if result.status_code != 200:
print('Request fail')
print('response status %s' % (result.status_code))
if result.status_code == 500: # if username or password or appid is wrong
#print('Error: %s'%(result.json()))
print('Error: %s' % (json.dumps(result.json(),
sort_keys=True, indent=2, separators=(',', ':'))))
result.raise_for_status()
except requests.exceptions.RequestException as e:
print('Exception!!!')
print(e)
sys.exit(1)
return result
# Perform authentication
def CreateAuthorization(username, password, appid):
token = None
# create authentication request URL, message and header
authenMsg = {'CreateServiceToken_Request_1': {
'ApplicationID': appid, 'Username': username, 'Password': password}}
authenURL = 'https://api.rkd.refinitiv.com/api/TokenManagement/TokenManagement.svc/REST/Anonymous/TokenManagement_1/CreateServiceToken_1'
headers = {'content-type': 'application/json;charset=utf-8'}
print('############### Sending Authentication request message to RKD ###############')
authenResult = doSendRequest(authenURL, authenMsg, headers)
if authenResult and authenResult.status_code == 200:
print('Authen success')
print('response status %s' % (authenResult.status_code))
# get Token
token = authenResult.json()['CreateServiceToken_Response_1']['Token']
return token
# Perform Interday request
def RetrieveInteraday(token, appid):
# construct Time Series Interday request message
ricName = input('Please input Symbol: ')
interdayRequestMsg = None
# change your fields (support these 'OPEN','HIGH','LOW','CLOSE','CLOSEYIELD','VOLUME','BID','ASK' fields only)
fields = ['OPEN', 'HIGH', 'LOW', 'CLOSE',
'CLOSEYIELD', 'VOLUME', 'BID', 'ASK']
startTime = '2015-09-22T00:00:00' # change your StartTime
endtime = '2016-09-22T23:59:00' # change your EndTime
# interval = 'DAILY' # change your interval between 'DAILY', 'WEEKLY', 'MONTHLY', 'QUARTERLY' and 'ANNUAL'
interval = input(
'Input interested interval (\'DAILY\' or \'WEEKLY\' or \'MONTHLY\' or \'QUARTERLY\' or \'ANNUAL\'): ')
interdayRequestMsg = {
'GetInterdayTimeSeries_Request_5': {
'Field': fields,
'TrimResponse': False,
'Symbol': ricName,
'StartTime': startTime,
'EndTime': endtime,
'Interval': interval,
'MetaField': ['NAME', 'QOS', 'CCY', 'TZ', 'TZOFFSET', 'NAME_LL']
}
}
# construct Time Series Interday URL and header
#interdayURL = 'http://api.rkd.reuters.com/api/TimeSeries/TimeSeries.svc/REST/TimeSeries_1/GetInterdayTimeSeries_5'
interdayURL = 'http://api.rkd.refinitiv.com/api/TimeSeries/TimeSeries.svc/REST/TimeSeries_1/GetInterdayTimeSeries_5'
headers = {'content-type': 'application/json;charset=utf-8',
'X-Trkd-Auth-ApplicationID': appid, 'X-Trkd-Auth-Token': token}
print('############### Sending Time Series Interday request message to RKD ###############')
interdayResult = doSendRequest(interdayURL, interdayRequestMsg, headers)
if interdayResult and interdayResult.status_code == 200:
print('Time Series Interday response message: ')
# print(interdayResult.json())
print(json.dumps(interdayResult.json(),
sort_keys=True, indent=2, separators=(',', ':')))
## ------------------------------------------ Main App ------------------------------------------ ##
if __name__ == '__main__':
# Load Environment Variables
load_dotenv()
# Get username, password and application_id from Environment Variables or .env
username = os.getenv('RKD_USERNAME')
# use getpass.getpass to hide user inputted password
password = os.getenv('RKD_PASSWORD')
appid = os.getenv('RKD_APP_ID')
#If not Environment Variables or .env
if not (username and password and appid):
## Get username, password and applicationid
username = input('Please input username: ')
## Use getpass.getpass to hide user inputted password
password = getpass.getpass(prompt='Please input password: ')
appid = input('Please input appid: ')
token = CreateAuthorization(username, password, appid)
print('Token = %s' % (token))
# if authentication success, continue subscribing Time Series interday
if token:
RetrieveInteraday(token, appid)