随机Word SetGetGo API

时间:2013-11-03 20:42:04

标签: python json api rest

我正在使用Python 3创建一个应用程序,该应用程序从以下API服务中检索随机单词

http://randomword.setgetgo.com/get.php

这是我到目前为止所做的,

import urllib.request
response = urllib.request.urlopen('http://randomword.setgetgo.com/get.php')

我试过

word = response.read()
print (word)

但我得到的只是,

b'\xef\xbb\xbfcellepore\r\n'
b'\xef\xbb\xbfchough\r\n'
b'\xef\xbb\xbfparamide\r\n'
b'\xef\xbb\xbfunsiphon\r\n'
b'\xef\xbb\xbfadenopodous\r\n'
b'\xef\xbb\xbfsupertramp\r\n'
b'\xef\xbb\xbfEphraimite\r\n'
b'\xef\xbb\xbfosteostracan\r\n'
b'\xef\xbb\xbfrhizopodan\r\n'
b'\xef\xbb\xbftransiter\r\n'
b'\xef\xbb\xbfoneirocritically\r\n'

API服务表示它将返回JSON,但这看起来不像JSON。

我想知道我的代码是否有问题,或者API服务没有按预期工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

确实,该服务没有返回JSON。如您所见,它返回纯文本并将Content-Type标头设置为text / html,无论我们在Accept标头上发送什么内容:

>>> req = urllib2.Request('http://randomword.setgetgo.com/get.php', headers={"Accept": "application/json"})
>>> response = urllib2.urlopen(req)
>>> word = response.read()
>>> word
'\xef\xbb\xbfNinevitish\r\n'
>>> response.headers['Content-Type']
'text/html'

由于服务记录不佳,很难说出发生了什么以及它实际上有什么期望。 \xef\xbb\xbf前缀是一个UTF-8 BOM,所以如果您仍然希望像这样使用它,您可以执行以下操作:

>>> word.decode('utf-8-sig').strip()
u'Ninevitish'