2017-05-29 18 views
0

ワイヤレスディスプレイツールであるMersive Solsticeを実行しているマシンが100台近くあります。重要な情報を集めようとしています。特に、インストールされているインスタンスごとにライセンスのフルフィルメントIDがあります。Mersive Solstive API:AttributeError: 'dict'オブジェクトに 'm_displayInformation'属性がありません

Solstice OpenControl APIを使用して、hereが見つかりました。私はjson GETを使用して必要なものをすべて取得するためにPythonスクリプトを作成しました。しかし、例を用いた場合であっても

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 

は、私が遭遇した、ドキュメントからGET:非常に混乱して

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' 

を。私は、この問題に関しては、そうではないかと疑問に思っていますが、APIリファレンスガイドに間違ったGETリクエストがあったことは特にありません。私は簡単に維持するためのテキスト文書からURLのをインポート

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 

はさらに、ここに私のスクリプトです。私は/ api/config JSONに接続することができます。URLがブラウザに置かれると、JSONレコードが吐き出されます。

答えて

1

Jsonは配列の型である "Dicts"を使用します。あなたはちょうど間違った方法でそれらを使用しています。私は読むことをお勧めします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() 

私はこれは参考になりましたね!

+0

約5分前に私は表記法をドットからブラケットに切り替えることにしました。それは確かにそのトリックでした。私は自分の答えに戻ってきましたが、あなたは私が持っていたよりもはるかに優れた問題を説明しました!乾杯! – Dupontrocks11

関連する問題