Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-04-17YAuth

Atomのentry文書生成

| 16:25 |  Atomのentry文書生成 - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  Atomのentry文書生成 - Ci.nsIZIGOROu

まだたたき台みたいな感じだけど。

var AtomEntry = function() {
};

AtomEntry.uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);

AtomEntry.formatW3CDate = function(aDate) {
  if (!aDate || typeof aDate != "object" || !(aDate instanceof Date)) {
    return "";
  }

  var format_date = aDate.toLocaleFormat("%Y-%m-%dT%H:%M:%S");
  var tz_offset = aDate.getTimezoneOffset();
  var tz_min = tz_offset % 60;
  var tz = ((tz_offset >= 0) ? "-" : "+") + ("0" + Math.abs((tz_offset - tz_min) / 60)).substr(-2, 2) + ":" + ("0" + Math.abs(tz_min)).substr(-2, 2);

  return format_date + tz;
};

AtomEntry.prototype = {
  parser: new DOMParser(),
  serializer: new XMLSerializer(),
  doc: null,
  createEntryDocument: function(title, type) {
    if (!type) 
      type = "text";
    this.doc = this.parser.parseFromString('<?xml version="1.0" encoding="utf-8"?><entry><id></id><title type="' + type + '">' + title + '</title><updated></updated></entry>', 'text/xml');
    this.applyId();
  },
  applyId: function() {
    var idElem = this.doc.getElementsByTagName("id")[0];
    idElem.textContent = "urn:uuid:" + AtomEntry.uuidGenerator.generateUUID().number.replace(/[{}]/g, "");
  },
  applyUpdated: function(aDate) {
    var updatedSet = this.doc.getElementsByTagName("updated");
    var updatedElem = (updatedSet.length > 0) ? updatedSet[0] : this.doc.createElement("updated");
    updatedSet.length == 0 && this.doc.documentElement.appendChild(updatedElem);
    updatedElem.textContent = AtomEntry.formatW3CDate(aDate);
  },
  serialize: function(aDate) {
    if (!aDate)
      aDate = new Date();
    this.applyUpdated(aDate);
    return this.serializer.serializeToString(this.doc);
  }
};

仮に真面目にライブラリっぽくしたら、

  • 必須要素じゃないなら直接DOMで作る
  • JSXPCOMにするかもなので、DOMParser, XMLSerializerの辺りをXPCOMに置き換え?

とかなのかな。

XHRと組み合わせると簡易Atompubクライアント作れそうだなー。

ku0522ku05222008/04/18 17:33Flockで動かすの前提なコードになってて再利用できなかったりするのですがFlockがAPI系のコード満載ですよー

trunk/mozilla/browser/components/flock/blog/src/flockBlogWebServiceAtom.js

ZIGOROuZIGOROu2008/04/28 11:48おお、ありがとうございます。
ちょっと見てみますー。

pjnkflvjapjnkflvja2011/04/07 04:41ELO8Uw <a href="http://unrzmsyckzva.com/">unrzmsyckzva</a>, [url=http://cmnkzuzctbhx.com/]cmnkzuzctbhx[/url], [link=http://hodnipwwaecy.com/]hodnipwwaecy[/link], http://cbiszrcyhtui.com/