小さなPythonというライブラリを libpynexmo と呼んで、Python 3。
私はこの機能にこだわっています:
_def send_request_json(self, request):
url = request
req = urllib.request.Request(url=url)
req.add_header('Accept', 'application/json')
try:
return json.load(urllib.request.urlopen(req))
except ValueError:
return False
_
これに到達すると、jsonは次のように応答します。
_TypeError: the JSON object must be str, not 'bytes'
_
_json.load
_には.read()
を付けてオブジェクト(この場合はHTTPResponse
オブジェクト)を渡す必要があるといくつかの場所で読みましたが、HTTPResponse
オブジェクトでは機能しません。
次はどこに行けばいいか迷っていますが、1500行のスクリプト全体がPython 3に変換されたばかりなので、2.7に戻るつもりはありません。
最近、Nexmoメッセージを送信する小さな関数を作成しました。 libpynexmoコードの完全な機能が必要でない限り、これはあなたのために仕事をするはずです。また、libpynexmoのオーバーホールを続けたい場合は、このコードをコピーしてください。キーはutf8エンコーディングです。
メッセージとともに他のフィールドを送信する場合は、nexmoアウトバウンドメッセージに含めることができるものの完全なドキュメント is here
Python 3.4テスト済み Nexmo アウトバウンド(JSON):
def nexmo_sendsms(api_key, api_secret, sender, receiver, body):
"""
Sends a message using Nexmo.
:param api_key: Nexmo provided api key
:param api_secret: Nexmo provided secrety key
:param sender: The number used to send the message
:param receiver: The number the message is addressed to
:param body: The message body
:return: Returns the msgid received back from Nexmo after message has been sent.
"""
msg = {
'api_key': api_key,
'api_secret': api_secret,
'from': sender,
'to': receiver,
'text': body
}
nexmo_url = 'https://rest.nexmo.com/sms/json'
data = urllib.parse.urlencode(msg)
binary_data = data.encode('utf8')
req = urllib.request.Request(nexmo_url, binary_data)
response = urllib.request.urlopen(req)
result = json.loads(response.readall().decode('utf-8'))
return result['messages'][0]['message-id']
同じ問題に直面して、私はdecode()を使用してそれを解決します
...
rawreply = connection.getresponse().read()
reply = json.loads(rawreply.decode())
私も問題に出会い、今では合格しました
import json
import urllib.request as ur
import urllib.parse as par
html = ur.urlopen(url).read()
print(type(html))
data = json.loads(html.decode('utf-8'))
HTTPResponse を取得しているため、 Tornado.escape とそのjson_decode()
を使用して、JSONストリンを辞書に変換できます。
from tornado import escape
body = escape.json_decode(body)
マニュアルから:
tornado.escape.json_decode(value)
戻り値Python指定されたJSON文字列のオブジェクト。