辞書の応答オブジェクトから値を取得しようとしていますが、このエラーが発生し続けます。クラスのインデックス作成に__getitem__
がより一般的に使用されていると考えるのは間違っていますか?
コードは次のとおりです。
import json
import requests
from requests.auth import HTTPBasicAuth
url = "http://public.coindaddy.io:4000/api/"
headers = {'content-type': 'application/json'}
auth = HTTPBasicAuth('rpc', '1234')
payload = {
"method": "get_running_info",
"params": {},
"jsonrpc": "2.0",
"id": 0,
}
response = requests.post(url, data=json.dumps(payload), headers=headers, auth=auth)
print("respone is: ", response['result'])
応答オブジェクトはディクショナリではないため、インデックスを使用することはできません。
APIが JSON応答 を返す場合は、 response.json()
メソッド を使用してPythonオブジェクト:
_data = response.json()
print("respone is: ", data['result'])
_
リクエストJSONデータもエンコードする必要がないことに注意してください。ここでは、request.post()
メソッドにjson
引数を使用できます。これにより、Content-Typeヘッダーも設定されます。
_response = requests.post(url, json=payload, auth=auth)
_
最後になりましたが、APIがプロトコルとしてJSONRPCを使用している場合は、 _jsonrpc-requests
_ project を使用してメソッド呼び出しをプロキシできます。
_from jsonrpc_requests import Server
url = "http://public.coindaddy.io:4000/api/"
server = Server(url, auth=('rpc', '1234'))
result = server.get_running_info()
_
ソースコードを次のように少し変更するだけです:
_ response = requests.post(url, json=json.dumps(payload), headers=headers, auth=auth).json()
print("respone is: ", response['result'].encode('utf-8'))
_
確かに、応答オブジェクトだけではインデックスを作成できません。そのために、_json format
_で情報を返す必要があります(応答情報を解析するため)。これは、json()
とHereを順番に使用して行うことができます。適切な文字列を取得するには、utf-8でエンコードする必要があります(そうしないと、出力は次のようになります-u'LikeThis)