torum

主に開発中のアプリにまつわる技術系の事。

はてなブログのAtom Publishing Protocolについて

 Atomというのを覚えている人はどれくらいいるか分からないけれど、Atom(エディタ)に名前を取られて検索で出てこなくなってしまった悲しい仕様がありましてですね。

Atom Syndication Format

Atom Publishing protocol

実は今、このAtomのクライアントをC#/WPFで作っています。

github.com

 

このはてなブログも、一応、対応してくれてます。

はてなブログAtomPub - Hatena Developer Center

素晴らしいですね!

 

ただ、現状、はてなブログAtom対応にはあと一歩の点がいくつかあって、クライアントとしてはてなブログのAtomPubに対応したとしても残念ながら第三者向けツールとしての提供に耐えません。

気が付いた点を、忘れないようにまとめておきたいと思います。

 

 

1.No Service discovery in HTML page

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://hoge.jp/ja/xmlrpc.php?rsd" />

上記のは、WordPressのものですが、HTML の Header内に、Linkタグで、サービス文書へのリンクを記載しています。これはXML-RPCなどのRSD(Really Simple Discovery)形式での例ですが、下記はAtomでの例になります。

<link rel="SERVICE" type="application/atomsvc+xml" href="https://hoge.jp/ja/app" />

これがあると、クライアントは、HTMLページをパースして、エンドポイントを自動で機械的にゲットできます。しかも、Type属性で、Atomプロトコルだという事がはっきりと分かりますので、ユーザーへは単に「ブログのアドレスを入力してください」と、するだけで、とても分かりやすくなります。

 

以上の仕組みは、Service discovery と言います。

しかし、はてなブログには、このリンクがありません。

はてなブログAtomPub - Hatena Developer Center

を読むと、

https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom

手動で入力するようになっているようですね。しかも、独自ドメイン機能もあって、ややこしい事になっています。

ユーザーは、手動で入力して、なおかつ、Atom Publishing Protocolであることを、明示的に指定しないと、クライアントはAPIプロトコルを認識できません。

本来は、ユーザーは裏で動いているプロコルの種類などは気にせずに使えるようにした方がエクスペリエンス的に良いですよね。

はてなブログでも、Service discovery の仕様をブログのHTML内に記述して欲しいですね!

 

2.No Picture Collection in the service document

 はてなブログのサービス文書は、下記のものが返却されます。

<service xmlns="http://www.w3.org/2007/app">
 <workspace>
  <atom:title xmlns:atom="http://www.w3.org/2005/Atom">hoge</atom:title>
  <collection href="https://127.0.0.1/atom/entry">
   <atom:title xmlns:atom="http://www.w3.org/2005/Atom">fuga</atom:title>
   <accept>application/atom+xml;type=entry</accept>
  </collection>
 </workspace>
</service>

 

エントリコレクションだけしか含まれていません。

<accept>application/atom+xml;type=entry</accept>

つまり、画像などは投稿できません。

これ、辛いですね!

<collection href="http://example.org/blog/pic" >
 <atom:title>Pictures</atom:title>
 <accept>image/png</accept>
 <accept>image/jpeg</accept>
 <accept>image/gif</accept>
</collection>

こんな風に、写真画像向けのコレクションを追加して欲しいです!

 

3.No Category Collection in the service document

はてなブログの実装では、サービス文書にないので、カテゴリ一覧を取得出来ません。コレクションに下記のように、カテゴリ文書へのリンク(またはインラインで)を記載して、一覧で取得できるようにして欲しいですね!

<categories href="http://example.com/cats/forMain.cats" />

 またはインラインで、

<categories>
 <atom:category term="category1" />
 <atom:category term="category2" />
</categories>

 

4.PubContrl draft "no"

エントリの下書きへ戻す、が出来ないです!公開済みのエントリに対して、

app:control/app:draft

を、"no"とかにしてPUTすると、

BadRequest 400 Cannot Change into Draft

とのお返事を頂きます。

困りましたね!

 

以上です!

 

運営さんには、連絡したのですが!。。。