del.icio.usのAPIに対する認証方法(Yahoo!IDにも対応) 修正@2009/11/15

まだ調べ中なので、とりあえずメモです。
コード書いて確認できました。(2009/11/15)


Yahoo!IDでどうやって認証するんだってことで、del.icio.us Bookmarks のソース読んでみると、どうやら、delicious.comで認証した際に設定されるCookiehttps://api.del.icio.usの認証を行える模様です。
https://api.del.icio.us/ に対するリクエストを下記のように作成します。

  • リクエストヘッダのAuthorizationに、id/パスワードを共に"cookie"としたもので設定。
  • Content-Typeに'application/x-www-form-urlencoded'を設定。
  • リクエストのbodyとして、hostが".delicious.com"、nameが"_user"となっているCookieの内容を設定し送信。

コードにすると、下記のような感じです。(抜粋なので、このままコピペだと動かないかも)

var request = new XMLHttpRequest();

request.open('POST', url, true);
request.setRequestHeader('Authorization', 'Basic '+ window.btoa('cookie:cookie'));
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

var authToken = null;

var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
                      .getService(Components.interfaces.nsICookieManager);
var iter = cookieManager.enumerator;
while(iter.hasMoreElements()) { 
  var cookie = iter.getNext(); 
  if (cookie instanceof Components.interfaces.nsICookie) {
    if ((cookie.host == '.delicious.com') && cookie.name == '_user') {
      authToken = '_user=' + encodeURIComponent(cookie.value);
    }
  }
}

request.send(authToken);

APIのURLを"api.del.icio.us"->"api.delicious.com"に変えてくれれば、こんな面倒な手間は不要になると思ってます。
早く変えてくれないかなぁ。