2008/01/31


Blogging APIは何処に行こうとしているのか...

先日は、XMLRPCについてのお話をさせて頂きました。
今日はその中で出てきたBlogging APIについて。
著名なブログツールの多くは、リモートからブログが更新出来る仕組みを提供しています。
その中でも、一般的な物が先日お話した「XMLRPC」をベースにした「Blogger API」や「metaWeblog API」、「MovableType API」があります。
※現在ではBloggerはXMLRPCではなく、Atompubを使用しています。
それとは別に、Atomフィードを使用したAtomPub APIがあります。
XMLRPCの場合は、リモートメソッドとしてXMLを生成してブログの投稿、削除等を行いますが、AtomPubの場合は送受信されるXMLの単位自身が文書になります。
この文書をHTTPのGET/POST(PUT)およびDELETEメソッドを使用して文書(ブログ)を更新します。
AtomPubではAtomフィードにひもづけられた登録用URIに対して文書をPOST(PUT)する事で新規エントリ、既存エントリにひもづけられた編集用URIに対してPOST(PUT)する事でエントリ更新、そして既存エントリの編集用URIに対してDELETEメソッドを送信する事でエントリ削除という動作になります。
一部のサーバではDELETEメソッドを受け付けない物もあるので、「X-Http-Method-Override: DELETE」というヘッダでDELETEメソッドと同じ処理が行える様になっているサーバもあります。

この2つのAPIの大きな違いとして、文書形式と認証方法が挙げられます。

XMLRPCの場合は、各メソッドに対してユーザIDおよびパスワードを渡す事になります。
またXMLRPCでは送信されるXML自身はメソッドパラメータが含まれ、その中にはユーザIDやパスワードも含まれてしまいます。二次利用する事は出来ません。

AtomPubの場合は、上で説明した通り送受信されるXML自身が文書である為に二次利用も可能です。
また認証方法は一般的にはBasic認証か、WSSE認証が用いられています。

巷のブログサービスは以下の様なAPI実装を行っています。
ブログサービス提供APIフォーマットエントリポイント
teacupXMLRPCHTMLhttp://white.ap.teacup.com/applet/[username]/postmsgrpc
EGOISTブログXMLRPCHTMLhttp://[blogid].ebsystems.jp/xmlrpc.php
自分のブログサイトの先頭に付いているblogid
FC2ブログXMLRPCHTMLhttp://blog.fc2.com/xmlrpc.php
JUGEMXMLRPCHTMLhttp://[blogid].jugem.jp/admin/xmlrpc.php
JustBlogAtompubHTMLhttp://app.justblog.jp/t/atom/weblog/blog_id=[blogid]
Livedoor BlogAtompubHTMLhttp://cms.blog.livedoor.com/atom/blog_id=[blogid]
MSN SpaceXMLRPCHTMLhttps://storage.msn.com/storageservice/MetaWeblog.rpc
NetLaputaXMLRPCHTMLhttp://blog.netlaputa.ne.jp/rpc/mt-xmlrpc.cgi
News HandlerXMLRPCHTMLhttp://blog.nettribe.org/xmlrpc.php
SeesaaブログXMLRPCHTMLhttp://blog.seesaa.jp/rpc/
WordPressXMLRPCHTMLhttp://faq.wordpress.com/xmlrpc.php
Yahoo!ブログXMLRPCHTMLhttp://api.my.yahoo.co.jp/RPC2
BloggerAtompubHTMLhttp://[blogid].blogspot.com/feeds/posts/default
BloggerXMLRPCHTMLhttp://blog.goo.ne.jp/xmlrpc.php
pwBlogXMLRPCHTMLhttp://www.pwblog.com/xmlrpc
VoxAtompubHTMLhttp://[blogid].vox.com/library/posts/atom.xml
はてなブックマークAtomPubTEXThttp://b.hatena.ne.jp/[username]/atom/
はてなダイアリーAtompubはてな記法http://d.hatena.ne.jp/[blogid]/edit
アメーバブログAtompubHTMLhttp://ameblo.jp/servlet/_atom/blog/[blogid]
ココログXMLRPCHTMLhttp://app.f.cocolog-nifty.com/t/api
ドリコムXMLRPCHTMLhttp://blog.drecom.jp/api/xmlrpc
ブログ人XMLRPCHTMLhttp://app.blog.ocn.ne.jp/t/api/
PLAYLOGXMLRPCWikihttp://playlog.jp/_atom/blog/[blogid]
ちなみに、アメーバブログはWSSEヘッダを作成する際、パスワードをMD5した値でSHA1/NONCEを作成する必要があります。
これは正直言ってしまうと、バグとしか思えません...汗
Atompubの場合、実際には上記エントリポイントを直接参照するのではなく、ブログページからオートディスカバリする事が推奨されます。
例えば、私のVoxのサイトのHTMLを参照してみると <link rel="EditURI" type="application/rsd+xml" href="http://mattn.vox.com/rsd.xml" title="RSD" />
というヘッダがあるのが分かるかと思います。
次にこのhrefを参照すると <?xml version="1.0"?>
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
    <service>
        <engineName>Vox</engineName>
        <engineLink>http://www.vox.com/</engineLink>
        <homePageLink>http://mattn.vox.com/</homePageLink>
        <apis>
            <api name="Atom" preferred="true"
                apiLink="http://www.vox.com/services/atom" />
        </apis>
    </service>
</rsd>
このようなXMLが戻ります。ここまでは認証無しに参照出来ます。
このapiノードに記述されているapiLinkにX-WSSEヘッダを付けて要求すると、以下の様な登録/編集用URIが記述されたXMLが返されます。
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://purl.org/atom/ns#">
  <link rel="service.post" href="http://www.vox.com/services/atom/svc=post/collection_id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" title="matt'n roll" type="application/x.atom+xml"/>
  <link rel="alternate" href="http://mattn.vox.com/" title="matt'n roll" type="text/html"/>
  <link rel="service.feed" href="http://www.vox.com/services/atom/svc=asset/XXXXXXXXXXXXXXXXXX" title="matt'n roll" type="application/atom+xml"/>
  <link rel="service.upload" href="http://www.vox.com/services/atom/svc=asset" title="matt'n roll" type="application/atom+xml"/>
  <link rel="replies" href="http://www.vox.com/services/atom/svc=asset/XXXXXXXXXXXXXXXXXX/type=Comment" title="matt'n roll" type="application/atom+xml"/>
</feed>
service.feedにはAtomフィードURIが、service.postは新規エントリポスト用のURIが格納されています。
Voxの場合は画像ファイル等のアップロード(service.upload)に対応しているようですね。
また、service.feedから取得したフィード自身にはrel属性とtype属性で指定されたlink要素も付与されていますから <entry xmlns:default="http://www.sixapart.com/ns/atom/privacy" xmlns:default1="http://www.w3.org/1999/xhtml">
  <id>tag:vox.com,2007-11-03:asset-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</id>
  <title>スケスケ</title>
  <published>2007-11-03T09:25:46Z</published>
  <updated>2007-11-03T09:25:46Z</updated>
  <link rel="alternate" href="http://mattn.vox.com/library/post/%E3%82%B9%E3%82%B1%E3%82%B9%E3%82%B1.html" title="スケスケ" type="text/html"/>
  <privacy xmlns="http://www.sixapart.com/ns/atom/privacy">
    <allow policy="http://www.sixapart.com/ns/atom/permissions#read" name="Everyone" ref="http://www.sixapart.com/ns/atom/groups#everyone"/>
  </privacy>
  <link rel="alternate" href="http://www.vox.com/services/atom/svc=asset/XXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" type="application/atom+xml"/>
  <link rel="replies" href="http://www.vox.com/services/atom/svc=comment/xid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" type="application/atom+xml"/>
  <author>
    <name>mattn</name>
    <uri>http://mattn.vox.com/</uri>
  </author>
  <category term="携帯から" label="携帯から"/>
  <content xmlns:default="http://www.w3.org/1999/xhtml" type="xhtml">
    <div xmlns="http://www.w3.org/1999/xhtml">
      <p>今日、とある遊園地の横を通り過ぎた時に嫁が「この遊園地スケスケやなぁ」って言って来た。少し考えた後「うん」と答えた。どうやら嫁は「この遊園地スカスカやなぁ」と言いたかったらしい。ところで「スケスケ遊園地」って、ちょっとエッチ…</p>
    </div>
  </content>
</entry>
このエントリフィードの、type="application/atom+xml"であるlink要素のhrefに対してPOST(PUT)すれば更新、DELETEすれば削除となります。
POST時に送信する文書は、feedからentryのみを抜き取った、丁度上のようなXMLを送信する事になります。
前回、今回とブログサービスが提供するAPIについてお話して来ましたが、最近はAtomPubの方が活発だったりします。
XMLRPCの場合は特に決められたXMLネームスペースが存在していない為、貧祖なXMLパーサでもクライアントを実装でき、それ程敷居は高くないかと思います。
※但し、XMLRPCのパラメータは各サービスによって型が統一されていない場合があります。汎用的に作るのならば苦労するかもしれません。

それに比べAtomPubでは仕様が結構キッチリと決められている為、各サービス毎に異なる仕様で苦しめられる事はあまりありませんが、XMLネームスペース/スキーマを意識してXMLを操作しなければならなくなります。
幾分AtomPubを使ったクライアント実装の方が敷居が高い気もします。
※参考にするならばVoxが良いと思います。

今後、ブログAPIの主流としては、AtomPubがリードして行くと私は思っていますが、クライアントアプリがXMLRPCもAtomPubも対応しなければならない時代は、早く消え去った方が良いのでは?と切に願うばかりです。

ちなみに...
私のサイトではblosxomというブログツールを使用しています。blosxomをXMLRPCで操作しようというライブラリは既に存在しており私も使ってはいるのですが、AtomPubで実装した物はありませんでした。
昨日からですが、少しずつ作り始める事にしました。
ある程度出来上がったらCodeReposに上げる予定です。

追記
id:teahutさんから、ご指摘頂きました。
確かにAtomPub(app)という点で、Voxは参考にならないかもしれません。
app要素の入った新しいAtomPubについては、こちらに仕様書の日本語訳があります。
Posted at by




otsuneさんがやってたので、まねしー。

なるべくblosxom.cgi本体を弄りたくなかったのもあって、本来はETagとかを返す為に用意されたlastmodified2プラグインを使う事にした。otsuneさんと同じく、もそもろの編集をした後 「Posted at」の部分を Posted at <a href="$url$path/$fn.htm"><abbr class="updated" title="$lastmodified2::story_iso8601">$ti</abbr></a>
とした。とりあえずコノ辺で確かめてみたり、microformat Operatorで行けてそうだから、しばらく様子見。

ところで、microformat Operatorのプラグイン入れすぎで、ツールバーからはみ出してしまってるの、なんとかなりませんか...
↓コレ
microformat-operator-too-long
Posted at by




ソーシャルブックマークサービスと言えども数多くの物が登場してきている。代表的な物ならば、Wikipediaに挙がっている物でリストアップされているので、色々試して見てもいいだろう。
私の知識だけで言うならば、日本人が使ってる有名どころといえば
といったところだろうか。 上記の中でも私が使っている物は となる。なぜこれに絞っているか。それは人の集まりとAPI。

del.icio.us

del.icio.usは基本的にユーザインタフェースが英語の為、日本人向きではないかもしれない。しかし使用者は多い。これは使用者間でのコミュニケーションがあまりない事で逆に、コメントをソーシャルコメントではなくメモとして使う人が多い為。つまり個人の情報収集に向いているからと思われる。基本的にブックマーク登録は個人用の登録エリアか、ブラウザ拡張で行う為、ユーザは既にあるブックマークエントリページをほぼ見ない。これを見るのは被ブックマークエントリ投稿者。だからブックマークエントリページはほとんど検索エンジンからはヒットしない。さらに、はてなブックマークのようにユーザのブックマークひとつひとつにpermalinkが張られる訳では無いのでメタブクマも無く、ブックマークエントリを見て個々のユーザが周りを意識したコメントをする...という事も滅多に無い。
さらにブックマークエントリ毎に公開/非公開を設定出来るのが良い。私個人は技術情報等も合わせ全てdel.icio.usに登録してしまっており、実はブラウザ自身のブックマークにはBookmarkletしか入っていない。
※del.icio.usが死んでたらどうすんの?
なお、del.icio.usはマルチバイト文字が通るが、ブックマークエントリページにてIMEの確定ENTERキーを拾ってしまい、書きかけのエントリがポストされてしまうという不具合がある。これはFirefoxの拡張や、GreasemonkeyでENTERキーの動作を強制するスクリプト等で対応出来る。
(IMEの確定をENTERでなくCTRL+Mでやるのもアリ)
タグはスペース区切りで、ユーザの中にはdel.icio.usでマルチバイトのタグ名を付ける事を敬遠する人もいる。
また、モバイル端末で使うにはオフィシャルではないMobilicio.usを使う方法がある。
※ただし私は未だにMobilicio.usでブックマークを登録した事はない。

del.icio.usは登録照会系APIも提供しており、ブログパーツとしてもWidgetやJSONでエントリを出力するAPIもあれば、現在permalinkに幾らブックマークされているかを画像で返すAPIもある。このサイトも実際に使用しており
ブックマーク追加画面: http://del.icio.us/post?url=[perlmalnk]&title=[title]
ブックマークエントリ: http://del.icio.us/url/[md5_hash(permalink)]
被ブックマーク数画像: http://del.icio.us/feeds/img/savedcount/[md5_hash(permalink)]?aggregate
というリンク/画像をエントリ下部に表示しているので気になる方は試して頂きたい。
※ただし被ブックマーク数画像は他のサービスに比べ画像が数ピクセル大きい為、デザインしづらい。

はてなブックマーク

日本では最大級のソーシャルブックマークサービス。ユーザの集まりも多ければ、いざ人気が出るとブックマークされるスピードも半端ではない。私は以前、まぐれでホットエントリに入ってしまった記事を書いた事があるが、ブックマーク数が2日から3日で200まで到達した。500超えしている人等はもっとすごいんだろうな。
はてなブックマークはソーシャル性が強く、コメントひとつひとつにpermalinkが張られている事もあり、周りを意識したコメントが目立ったり、メタブクマも多く見られる。タグは[タグ名]という形式。[後で読む]タグを使った別サービスもある。
機能としては申し分無いが、公開/非公開が全体でしか設定出来ない事が唯一の難点だと思っている。しかしながら、はてなユーザ間でのメッセージ送信機能(IDコール)や、はてなスターという機能により、はてなの「はてなブックマークはソーシャルを極める」という意識が見えて良い。
時折、このソーシャル性がユーザに対して非難を受ける対象となるが、私個人としては「はてな」は好きだし、ユーザが固まり易いというのは「はてな」というサービスを使っている以上致し方ないと思っている。

私個人は、はてなブックマークをソーシャルな用途で使用している。
はてなブックマークはモバイル対応出来ており、はてなブックマークと連携したモバイル版ブラウザも使える。個人的にはdel.icio.usがモバイルに対応仕切れていない為、携帯からは「はてなブックマーク」に登録しておき、後でブックマーク同期を行う事にしている。
APIも豊富で、登録照会系APIに合わせ、IDコールやはてなスターとの連携機能も提供されている。このサイトでは
ブックマーク登録画面: http://b.hatena.ne.jp/append?[permalink]&h=[title]
被ブックマーク数画像: http://b.hatena.ne.jp/entry/image/[permalink]
というリンクが記事毎に張られている。なお、はてなブックマークはモバイル対応している為、本サイトでは携帯端末の場合だけ
ブックマーク登録画面: http://b.hatena.ne.jp/addmobile?mode=confirm&title=[title]&url=[permalink]
というリンクに変更するようになっている。

livedoorクリップ

個人的にはGoogle Readerを使っているので良く知らないが、livedoor readerと併用する方が多いらしい。ただし私のサイトにブックマークを置いていってくれる人を見る限り、livedoorクリップを使う方は大概他のサービスのミラーとして使っておられる事が多い。私個人はブログの被ブックマーク数表示にのみ使用している。
APIは登録照会系の他、被ブックマーク数画像も提供しており本サイトでも
ブックマーク登録画面: http://clip.livedoor.com/clip/add?jump=myclip&link=[permalink]&title=[title]
被ブックマーク数画像: http://image.clip.livedoor.com/counter/[permalink]
というリンクが記事毎に張られている。ただしモバイルアクセスの場合には
ブックマークエントリ: http://clip.m.livedoor.com/page/detail?link=[permalink]
というリンクに差し替えている。

なお、本サイトではBuzzurlもブックマークツールバーとして表示しているが、Buzzurlのブックマークエントリや登録画面はモバイルからアクセスするとモバイル専用ページが表示される為、上記の様な小細工は必要ない。
ブックマーク登録画面: http://buzzurl.jp/config/add/confirm?url=[permalink]&title=[title]
被ブックマーク数画像: http://api.buzzurl.jp/api/counter/[perlmalnk]

POOKMARK Airlines

個人的には、POOKMARK Airlinesを個人資料用途としてもソーシャル用途としても使っていない。POOKMARK Airlinesの設定でtwitterにも登録する機能があり、これだけの為に使っている。実際は使い込んでいない為、良し悪しが判断出来ていない。



以上が、私個人のソーシャルブックマークサービスの使い方。
結論から言ってしまうと、私はdel.icio.usと、はてなブックマークの2つしか本格的には使っていない。
本当は、他にも手を出して見たいがどうしても人のあつまる所に行き着いてしまっており、食わず嫌いな状態にある。
実際2つしか使っていないので、基本的に手作業で同期し、量が多い時のみPlaggerを使って同期している。

上記、私の様な使い方で他に良い物があれば、コメントやブックマークでも良いので教えて欲しい。
Posted at by