はてブの XMLRPC API を使ってテストしてたら偶に妙なところでエラーが出るので見てみたら、Integer で返ってくるはずのはてブ数が String になってるところがあった。
特定のURLのみの様子。Stringというか「,」区切りの数列が返ってくる。
>>> import xmlrpclib
>>> s = xmlrpclib.ServerProxy('http://b.hatena.ne.jp/xmlrpc')
>>> r = s.bookmark.getCount('http://newsteam.livedoor.biz/archives/51467204.html')
>>> r
{'http://newsteam.livedoor.biz/archives/51467204.html': '10,0'}
>>> type(r['http://newsteam.livedoor.biz/archives/51467204.html'])
<type 'str'>
>>>
>>> r = s.bookmark.getCount('http://newsteam.livedoor.biz/archives/51465609.html')
>>> r
{'http://newsteam.livedoor.biz/archives/51465609.html': 23}
>>> type(r['http://newsteam.livedoor.biz/archives/51465609.html'])
<type 'int'>
xmlrpclib か api のどっちかだろう、とりあえず XML を直接投げてみた。
import urllib
body = """<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>bookmark.getCount</methodName>
<params>
<param><value><string>http://newsteam.livedoor.biz/archives/51467204.html</string></value></param>
<param><value><string>http://newsteam.livedoor.biz/archives/51465609.html</string></value></param>
</params>
</methodCall>"""
ret = urllib.urlopen('http://b.hatena.ne.jp/xmlrpc', body)
print ret.read()
$ python test.py
<?xml version="1.0" encoding="us-ascii"?><methodResponse><params><param><value><struct><member><name>http://newsteam.livedoor.biz/archives/51467204.html</name><value><string>28,0</string></value></member><member><name>http://newsteam.livedoor.biz/archives/51465609.html</name><value><int>23</int></value></member></struct></value></param></params></methodResponse>
Stringで帰ってきた。xmlhttplibの問題では無い様だ。
これ以上はどうしょうもできないので適当に整形して処理する様にしよう。このURL以外は今のところ正常なんだけどなー
コメント