Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to parse output from sse.client in Python?

I am new to Python and am trying to get my ahead around parsing SSE client code. I am using the SSE Client library. My code is very basic and follows the sample exactly. Here it is:

from sseclient import SSEClient


devID = "xxx"
AToken = "xxx"

sparkURL = 'https://api.spark.io/v1/devices/' + devID + '/events/?access_token=' + AToken

messages = SSEClient(sparkURL)

for msg in messages:
    print(msg)
    print(type(msg))

The code runs without a problem and I see some blank lines and SSE data coming through. Here is the sample output:

<class 'sseclient.Event'>
{"data":"0 days, 0:54:43","ttl":"60","published_at":"2015-04-09T22:43:52.084Z","coreid":"xxxx"}
<class 'sseclient.Event'>

<class 'sseclient.Event'>
{"data":"0 days, 0:55:3","ttl":"60","published_at":"2015-04-09T22:44:12.092Z","coreid":"xxx"}
<class 'sseclient.Event'>

The actual output above looks like a dictionary, but its type is "sseclient.Event". I am trying to figure out how to parse the output so I can pull out one of the fields and nothing I have tried has worked.

Sorry if this is basic questions, but can someone provide some simple guidance on how I would either convert the entire output to a dictionary or perhaps just pull out one of the fields?

Thank you in advance!

like image 995
Jay L Avatar asked Apr 09 '15 22:04

Jay L


1 Answers

I figured this out. In case anyone else experiences the same problem, here is how I got it to work. The key was using msg.data and not just msg. I then converted the out using the JSON library and am good to go.

messages = SSEClient(sparkURL)

for msg in messages:
    outputMsg = msg.data
    if type(outputMsg) is not str:
        outputJS = json.loads(outputMsg)
        FilterName = "data"
        #print( FilterName, outputJS[FilterName] )
        print(outputJS[FilterName])
like image 81
Jay L Avatar answered Sep 28 '22 00:09

Jay L