我正在创建新项目
我创建了两个函数。第一个功能正常运行,但第二个功能不起作用
第一个功能:
#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 func的错误:
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 func out:
Sharing: 951
我该如何解决这个问题?
由于
答案 0 :(得分: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()
method:
encodingData = reqURL.headers.get_content_charset('utf8')
jsonLoad = json.loads(reqURL.read().decode(encodingData))
现在,如果未设置内容charset
参数,则会返回默认的'utf8'
。
请注意,Facebook的JSON响应包含匹配的列表;因为您只传入一个URL,所以您可以只获取第一个结果:
print("Sharing:", jsonLoad[0]['share_count'])