作为API的介绍,我试图找出如何使用Rotten Tomatoes API在python中访问数据.这也是我第一次与json打交道.
我正在使用Python 3.4并确认已经安装了json和urllib3.
这是我的代码:
import urllib3 import json url = 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?limit=16&country=us&apikey=API-KEY'; http = urllib3.PoolManager() request = http.request('GET', url) print (json.load(request)); request.release_conn()
这是我得到的错误:
Traceback (most recent call last): File "C:\Users\admnasst1\Documents\Personal\Python\RotTomTest.py", line 16, inprint (str(json.load(request))); File "C:\Python34\lib\json\__init__.py", line 268, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Python34\lib\json\__init__.py", line 312, in loads s.__class__.__name__)) TypeError: the JSON object must be str, not 'bytes'
由于我正在尝试这么多新东西(API,urllib3,json),我不确定发生了什么.我已经尝试过做上面代码的其他一些版本,并且我一直得到同样的错误,所以我想我必须遗漏一些基本的东西......你们有没有发现它?
您需要将网络数据解码为字符串:
json.loads(request.data.decode('utf8'))
理想情况下,您将检测Content-Type
标头中使用的编解码器; 你要解析它并寻找一个charset=
参数.JSON数据的默认编码是UTF-8.
如果您打算使用第三方库,请requests
改用.它包含urllib3
一个友好的API ,可以为您处理JSON:
import requests url = 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json' params = {'limit': 16, 'country': 'us', 'apikey': 'API-KEY'} response = requests.get(url, params=params) print(response.json())