77
88
99#!/usr/bin/env python
10- """ Simple example of outputting Market Price JSON data using Websockets """
10+ """ Simple example of outputting Machine Readable News JSON data using Websockets """
1111
1212import sys
1313import time
2828position = socket .gethostbyname (socket .gethostname ())
2929mrn_domain = 'NewsTextAnalytics'
3030mrn_item = 'MRN_STORY'
31+ mrn_item = 'MRN_TRNA'
3132
3233# Global Variables
3334web_socket_app = None
@@ -64,11 +65,6 @@ def processRefresh(ws, message_json):
6465 decodeFieldList (message_json ["Fields" ])
6566
6667
67- def parseNewsData (fragment ):
68- decompressed_data = zlib .decompress (fragment , zlib .MAX_WBITS | 32 )
69- print ("News = %s" % decompressed_data )
70-
71-
7268def processUpdate (ws , message_json ):
7369 print ("RECEIVED: Update Message" )
7470 # print(message_json)
@@ -77,6 +73,9 @@ def processUpdate(ws, message_json):
7773 # Dump the FieldList first (for informational purposes)
7874 decodeFieldList (message_json ["Fields" ])
7975
76+ # declare variables
77+ tot_size = 0
78+
8079 try :
8180 # Get data for all requried fields
8281 fragment = base64 .b64decode (fields_data ["FRAGMENT" ])
@@ -89,7 +88,7 @@ def processUpdate(ws, message_json):
8988 #print("MRN_SRC = %s" % mrn_src)
9089
9190 #fragment_decoded = base64.b64decode(fragment)
92- print ( "fragment length = %d" % len ( fragment ))
91+
9392 if frag_num > 1 : # We are now processing more than one part of an envelope - retrieve the current details
9493 guid_index = next ((index for (index , d ) in enumerate (
9594 _news_envelopes ) if d ["guid" ] == guid ), None )
@@ -101,26 +100,24 @@ def processUpdate(ws, message_json):
101100 #print("fragment before merge = %d" % len(envelop["data"]["fragment"]))
102101
103102 # Merge incoming data to existing envelop
104- envelop ["data" ]["fragment" ] = envelop ["data" ]["fragment" ] + fragment
103+ fragment = envelop ["data" ]["fragment" ] = envelop ["data" ]["fragment" ] + fragment
105104 envelop ["data" ]["frag_num" ] = frag_num
106-
105+ tot_size = envelop ["data" ]["tot_size" ]
106+ print ("TOT_SIZE = %d" % tot_size )
107+ print ("fragment length = %d" % len (fragment ))
107108 #print("TOT_SIZE from envelop = %d" % envelop["data"]["tot_size"])
108109 #print("fragment after merge = %d" % len(envelop["data"]["fragment"]))
109- if envelop ["data" ]["tot_size" ] == len (envelop ["data" ]["fragment" ]):
110- parseNewsData (envelop ["data" ]["fragment" ])
111- else :
110+ if tot_size != len (fragment ):
112111 return None
113112 else :
114113 print ("Error: Cannot find fragment for GUID %s with matching FRAG_NUM or MRN_SRC %s" % (
115114 guid , mrn_src ))
116115 return None
117116 else : # FRAG_NUM:1 The first fragment
118117 tot_size = int (fields_data ["TOT_SIZE" ])
118+ print ("fragment length = %d" % len (fragment ))
119119 print ("TOT_SIZE = %d" % tot_size )
120- if tot_size == len (fragment ): # Completed News
121- parseNewsData (fragment )
122- pass
123- else :
120+ if tot_size != len (fragment ): # Completed News
124121 #print("Receiving Multiple Fragments!!")
125122 print ("Add new fragments to news envelop for guid %s" % guid )
126123 _news_envelopes .append ({
@@ -132,6 +129,13 @@ def processUpdate(ws, message_json):
132129 "tot_size" : tot_size
133130 }
134131 })
132+ return None
133+
134+ # News Fragment completed, decompress and print data as JSON
135+ if tot_size == len (fragment ):
136+ decompressed_data = zlib .decompress (fragment , zlib .MAX_WBITS | 32 )
137+ print ("News = %s" % json .loads (decompressed_data ))
138+
135139 except KeyError as keyerror :
136140 print ('KeyError exception: ' , keyerror )
137141 except zlib .error as error :
@@ -178,19 +182,6 @@ def process_login_response(ws, message_json):
178182 send_mrn_request (ws )
179183
180184
181- def send_market_price_request (ws ):
182- """ Create and send simple Market Price request """
183- mp_req_json = {
184- 'ID' : 2 ,
185- 'Key' : {
186- 'Name' : ['EUR=' , 'JPY=' , 'THB=' ],
187- },
188- }
189- ws .send (json .dumps (mp_req_json ))
190- print ("SENT:" )
191- print (json .dumps (mp_req_json , sort_keys = True , indent = 2 , separators = (',' , ':' )))
192-
193-
194185def send_login_request (ws ):
195186 """ Generate a login request from command line data (or defaults) and send """
196187 login_json = {
0 commit comments