0

次の API サービスからランダムな単語を取得する Python 3 を使用してアプリケーションを作成しています。

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 サービスが意図したとおりに機能していないのか疑問に思っていました。

ありがとう!

4

1 に答える 1

1

実際、サービスは JSON を返しません。ご覧のとおり、Accept ヘッダーで何を送信しても、プレーン テキストが返され、Content-Type ヘッダーが text/html に設定されます。

>>> 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'

このサービスは文書化されていないため、何が起こっているのか、実際に何を期待しているのかを判断するのは困難です. プレフィックスは UTF-8 BOM であるため、その\xef\xbb\xbfように使用したい場合は、次のようにすることができます。

>>> word.decode('utf-8-sig').strip()
u'Ninevitish'
于 2013-11-03T22:31:53.703 に答える