« 楽天の XML Web サービス その2 | トップページ | 今週のお買い物 (2006.09.10~09.16) »
2006.09.15
Vox の Atom API
昨日(というか、この記事を書いている途中で日付が変わってしまったので、一昨日ですね)は、「Blog クライアントを使って Vox に投稿できるのかと思いきや……」という記事を書きましたが、その後、引き続き、自作のBlogクライアントをいじりつつ、Vox の Atom API (Atom Publishing Protocol) がどこまで利用可能なのか、調べてみました。
「ここうさぎ」がエンドポイントURLの発見に失敗していた原因は、auto-discovery の過程で取得、解析する(ブログのトップページ直下に存在する) atom.xml の中身が想定しているものと微妙に違っていたからでした。
「ここうさぎ」では
<link rel="service.post" type="application/x.atom+xml" ……
というのを想定しているのですが、Vox の atom.xml の中身は
<link rel="service.post" type="application/atom+xml" ……
のようになっています。 x.atom+xml と atom+xml の違い。 x. が付いているか、付いていないか。これは、(少なくともクライアント側というか、受信側は)どちらでもいいように作っておいた方がいいんでしょうね。ちなみに、blogger.com の Atom API は送信時、受信時とも、x. 付きの方を使います。x. を付けずにリクエストを送信すると、「x. を付けろ!」と怒られてしまいます(投稿に失敗します)。Vox は x. があってもなくても、ちゃんとリクエストを受け付けてくれます。なので、「ここうさぎ」の方も両方とも受け入れるように直すことにしました(受信時はどちらでも受け入れ、送信するときは相手側に合わせます)。
この修正で、Vox のエンドポイントURLの自動取得、ブログ一覧(ブログ名、ブログURL)の取得は問題なくできるようになりました。
次に、投稿済み記事一覧の取得。要するに、「ブログ一覧取得時に提示されたエンドポイントURL」のうち svc=post が含まれる URL に GET リクエストを出せば「記事一覧の取得」になるんですが、このリクエストに対する応答が、何と 501 Not Implemented でした。まだ、実装されてないんですね!! BlogWrite が「ブログの中身がない」とエラーダイアログを出した原因はこれでしょう。
その次。カテゴリ一覧の取得。Vox ではカテゴリに相当するのはタグなんですが、「ブログ一覧取得時に提示されたエンドポイントURL」の中に、カテゴリ取得用のもの(svc=categories が含まれる URL)は見当たりません。実装されてないということでしょう。
そして、いよいよ記事の投稿。これは、「ブログ一覧取得時に提示されたエンドポイントURL」のうち svc=post が含まれる URL に POST リクエストを出せば OK。POST リクエストのボディ部分に、投稿しようとしている記事の題名、内容、カテゴリ(タグ)などを Atom 準拠の形式で埋め込みます。
投稿に成功すると、記事のIDを含む応答がサーバから返ってきます。記事のID は id 要素の属性として格納されています。Vox 以外の Atom API 対応 blog では、他にも rel="service.edit" な属性をもつ link 要素の entry_id 属性として格納されています。「ここうさぎ」では、entry_id 属性から記事IDを取り出しているのですが、Vox ではこの方法が使えません。entry_id が見つからない場合は、id 要素から抽出するようにすることで、Vox にも対応しました。
で、この「記事のID」を使って、記事の編集(上書き投稿)[PUTリクエスト]や削除[DELETEリクエスト]を行なうことができる訳ですが、Vox には、まだ編集や削除の API は用意されていないようです。試しにそれっぽいリクエストを組み立てて送信してみましたが、なぜか常に 200 OK が返ってくるだけで、編集も削除も全く実行されませんでした。
まとめ
結局、Vox で現時点で使える API は
- blog 一覧の取得
- 記事の投稿 (タグの指定が可能)
の2つだけのようです。
投稿者: tsupo 2006.09.15 午前 12:03
| 固定リンク
|
|
| ![]()
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: Vox の Atom API:



