如何在Python中解析来自sse.client的输出?

7

我对Python还很陌生,正在学习解析SSE客户端代码。我使用的是SSE客户端库。我的代码非常基础,完全按照示例实现。以下是我的代码:

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))

代码运行没有问题,我可以看到一些空白行和SSE数据通过。以下是示例输出:
<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'>

实际输出看起来像一个字典,但它的类型是"sseclient.Event"。我正在尝试找出如何解析输出,以便可以提取其中一个字段,但我尝试过的所有方法都没有成功。
如果这是基础问题,我很抱歉,但有人能否提供一些简单的指导,告诉我如何将整个输出转换为字典,或者只是提取其中一个字段?
谢谢您提前!
1个回答

13

我弄明白了。如果有人遇到同样的问题,这是我使其工作的方法。关键在于使用 msg.data 而不仅仅是 msg。然后我使用 JSON 库转换输出并且顺利进行。

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])

我相信“空白行”经常被一些SSE服务器实现用作“保持连接”的类型消息。话虽如此,我认为SSE客户端应该过滤掉它们,因为它们“不是消息”。截至今天,sseclient也已更新到0.0.26版本,所以如果您仍然有问题,请尝试更新您的库版本。 - ShoeLace
msg.data 是关键。谢谢! - embulldogs99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接