javascript(Firefox拡張)でAtomPubで投稿するコード書いてみた
AtomPubを使ってはてなに投稿する方法を調べている。
WSSE認証ががけっこうややこしい。結局ネットから拾ったライブラリを使ってみた。
http://rvr.typepad.com/wind/2005/07/wsse_for_javasc.html
以下のようなコードで記事が投稿できる。(ライブラリ部分除く)
atompub = (function(){ function HatenaAtomPub(userId) { this.userId = userId; } HatenaAtomPub.prototype = { set password(passwd) (this.passwd = passwd), get wsseHeader() plugins.wsse.header(this.userId, this.passwd) , get endpoint() ({'collection': 'http://d.hatena.ne.jp/' + this.userId + '/atom/blog'}), postEntry: function(title, content) { let transport = new XMLHttpRequest(); transport.open('POST', this.endpoint['collection'], false /* synchronous */); transport.setRequestHeader('X-WSSE', hatena.wsseHeader); transport.setRequestHeader('Content-Type', 'application/atom+xml;type=entry;charset="utf-8"'); transport.send(<> <entry xmlns="http://purl.org/atom/ns#"> <title>{title}</title> <content type="text/plain">{content}</content> </entry> </>.toXMLString()); return transport.responseXML; } }; let hatena = new HatenaAtomPub('snaka72'); let self = { post: function(pass) { hatena.password = pass; return hatena.postEntry( "AtomPub\u3067\u6295\u7A3F\u3057\u3066\u307F\u305F\u30C6\u30B9\u30C8", <> {"AtomPub\u306E\u3066\u3059\u3068\u266A"} - {"\u307B\u3052\u307B\u3052"} - {"\uFF3C\uFF08\uFF3E\uFF2F\uFF3E\uFF09\uFF0F"} </> ); } }; return self; })(); atompub.post("password"); // => see http://d.hatena.ne.jp/snaka72/20090611/1244745870