del.icio.usやったら次は はてなブックマーク でしょ。ということで,newsbitsに投稿したリンクを,はてなブックマークにも投稿するようにしてみました。サイトから拝借した(スイマセン!)「B!」アイコンをクリックすると,はてなでブックマークを共有している人のリストにジャンプするようにしてみました。
はてなブックマークでは AtomAPI が公開されているので,コイツを使う。認証は WSSE なんだそうで,仕様とかサンプルを見ながら専用のモジュールを書いてみる。
PythonではてなブックマークにURLを追加するためにはこんな風にする。
#!/usr/local/bin/python2.3
import urllib2
import random
import base64
import datetime
import sha
user = 'XXXXX'
passwd = 'XXXXX'
dt = datetime.datetime(2005,12,12)
#make 'once'
nonce = str(random.random())+str(dt.today())
#ISO format date
created = dt.now().isoformat()+'Z'
#make Digest
d = sha.new(nonce+created+passwd)
wsseheader = 'UsernameToken Username="%s", PasswordDigest="%s", ' +
'Nonce="%s", Created="%s"'
#make Request instance
req = urllib2.Request('http://b.hatena.ne.jp/atom/post')
#make WSSE-auth header
req.add_header('X-WSSE',
wsseheader %
(user,base64.encodestring(d.digest()).strip(),
base64.encodestring(nonce).strip(),created))
req.add_header('Content-Type','text/xml')
body = """<entry xmlns="http://purl.org/atom/ns#">
<link type="text/html" rel="related" href="%s" />
</entry>"""
#post a request
handle = urllib2.urlopen(req, body % 'http://coreblog.org/')
#show response
print handle.read()
import urllib2
import random
import base64
import datetime
import sha
user = 'XXXXX'
passwd = 'XXXXX'
dt = datetime.datetime(2005,12,12)
#make 'once'
nonce = str(random.random())+str(dt.today())
#ISO format date
created = dt.now().isoformat()+'Z'
#make Digest
d = sha.new(nonce+created+passwd)
wsseheader = 'UsernameToken Username="%s", PasswordDigest="%s", ' +
'Nonce="%s", Created="%s"'
#make Request instance
req = urllib2.Request('http://b.hatena.ne.jp/atom/post')
#make WSSE-auth header
req.add_header('X-WSSE',
wsseheader %
(user,base64.encodestring(d.digest()).strip(),
base64.encodestring(nonce).strip(),created))
req.add_header('Content-Type','text/xml')
body = """<entry xmlns="http://purl.org/atom/ns#">
<link type="text/html" rel="related" href="%s" />
</entry>"""
#post a request
handle = urllib2.urlopen(req, body % 'http://coreblog.org/')
#show response
print handle.read()
まずルートのエンドポイントにアクセスしてPostURIを取得するのがお行儀がいいのだけど,まあサンプルということで。XMLったってこのレベルでは「単なる文字列」なので,高級なことをする必要はありませんな。レスポンスをパースするにはfeedparserを使えばいい。
で,だれかpyhatena作ってくれないかな...。