【问题标题】:Mersive Solstive API: AttributeError: 'dict' object has no attribute 'm_displayInformation'Mersive Solstive API:AttributeError:“dict”对象没有属性“m_displayInformation”
【发布时间】:2017-05-29 15:02:32
【问题描述】:

我有大约 100 台机器运行 Mersive Solstice,这是一种无线显示工具。我正在尝试收集一些重要信息,尤其是每个已安装实例的许可证的实现 ID。

使用找到here 的 Solstice OpenControl API,我编写了一个 python 脚本来使用 json GET 获取我需要的一切。但是,即使使用文档中的示例 GET,

import requests
import json
url = ‘http://ip-of-machine/api/stats’

r = requests.get(url)
jsonStats = json.loads(r.text)
usersConnected = jsonStats.m_statistics.m_connectedUsers

我遇到:

Traceback (most recent call last):
  File "C:/Python27/test.py", line 7, in <module>
    usersConnected = jsonStats.m_statistics.m_connectedUsers
AttributeError: 'dict' object has no attribute 'm_statistics'

这非常令人困惑。我在 SO 上发现了很多关于这个问题的类似问题,但没有一个专门针对 API 参考指南中的错误 GET 请求。

另外,这是我的脚本:

import requests
import json
from time import sleep

url = 'test'

f = open("ip.txt", "r")
while(url != ""):
    url = f.readline()
    url = url.rstrip('\n')
    print(url)

    try:
        r = requests.get(url)
    except:
        sleep(5)

    jsonConfig = json.loads(r.text)
    displayName = jsonConfig.m_displayInformation.m_displayName
    hostName = jsonConfig.m_displayInformation.m_hostName
    ipv4 = jsonConfig.m_displayInformation.m_ipv4
    fulfillmentId = jsonConfig.m_licenseCuration.fulfillmentId
    r.close()


f.close

为了便于保存,我从文本文档中导入 URL。我能够与 /api/config JSON 建立连接,当 URL 放入浏览器时,它会吐出 JSON 记录:

【问题讨论】:

    标签: python json api get ip


    【解决方案1】:

    Json 使用“字典”,这是一种数组。您只是以错误的方式使用它们。我推荐阅读Python Data Structures.

    Json.Loads() 
    

    返回字典而不是对象。做:

    dict['key']['key']
    

    你的代码应该是这样的:

    import requests
    import json
    from time import sleep
    
    url = 'test'
    
    f = open("ip.txt", "r")
    
    while(url != ""):
    
        url = f.readline()
        url = url.rstrip('\n')
        print(url)
    
        try:
            response = requests.get(url)
            json_object = json.loads(response .text)
            displayName = json_object['m_displayInformation']['m_displayName']
            hostName = json_object['m_displayInformation']['m_hostName']
            ipv4 = json_object['m_displayInformation']['m_ipv4']
            fulfillmentId = json_object['m_licenseCuration']['fulfillmentId']
        except:
            pass
    
        response .close()
    f.close()
    

    希望对您有所帮助!

    【讨论】:

    • 大约 5 分钟前,我决定将我的符号从点转换为括号,这确实成功了。我回到了自我回答,但是您对问题的描述比我所能描述的要好得多!干杯!
    猜你喜欢
    • 2021-09-11
    • 2019-02-26
    • 1970-01-01
    • 2017-03-30
    • 2012-01-12
    • 2021-03-08
    • 2017-05-12
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多