类型错误:decode() 的第一个参数必须是字符串,而不能是 None
我正在创建一个新项目。
我写了两个函数。第一个函数运行得很正常,但第二个函数却不工作。
第一个函数:
#it's work
def twitter(adress):
reqURL = request.urlopen("https://cdn.api.twitter.com/1/urls/count.json?url=%s" % adress)
encodingData = reqURL.headers.get_content_charset()
jsonLoad = json.loads(reqURL.read().decode(encodingData))
print("Sharing:", jsonLoad['count'])
第二个函数:
#Doesn't work
def facebook(adress):
reqURL = request.urlopen("https://api.facebook.com/method/links.getStats?urls=%s&format=json" % adress)
encodingData = reqURL.headers.get_content_charset()
jsonLoad = json.loads(reqURL.read().decode(encodingData))
print("Sharing:", jsonLoad['share_count'])
怎么修复第二个函数(facebook)?
我在facebook函数中遇到的错误:
Traceback (most recent call last):
File "/myproject/main.py", line 24, in <module>
facebook(url)
File "/myproject/main.py", line 15, in facebook
jsonLoad = json.loads(reqURL.read().decode(encodingData))
TypeError: decode() argument 1 must be str, not None
twitter函数的输出:
Sharing: 951
我该如何解决这个问题?
谢谢。
1 个回答
1
Facebook的回应里没有包含一个charset
参数,这个参数是用来指明使用的编码方式的:
>>> from urllib import request
>>> adress = 'www.zopatista.com'
>>> reqURL = request.urlopen("https://cdn.api.twitter.com/1/urls/count.json?url=%s" % adress)
>>> reqURL.info().get('content-type')
'application/json;charset=utf-8'
>>> reqURL = request.urlopen("https://api.facebook.com/method/links.getStats?urls=%s&format=json" % adress)
>>> reqURL.info().get('content-type')
'application/json'
注意Twitter的回应里有charset=utf-8
这一部分。
根据JSON的标准,默认的字符集是UTF-8,所以可以把这个传给get_content_charset()
方法:
encodingData = reqURL.headers.get_content_charset('utf8')
jsonLoad = json.loads(reqURL.read().decode(encodingData))
现在,当没有设置内容的charset
参数时,默认会返回'utf8'
。
要注意的是,Facebook的JSON回应里包含了一个列表,里面有多个匹配项;因为你只传入了一个网址,所以可以只取第一个结果:
print("Sharing:", jsonLoad[0]['share_count'])