はてなダイアリーのRSSをカテゴリ毎に配信(受信)する裏技!



はてなダイアリーの各ブログが配信するRSSフィードは、任意のキーワードでフィルタリングすることができます。フィードの拡張と呼ばれるこの機能を応用すれば、全ての記事が配信される現状のRSSフィードとは別に、任意のカテゴリ毎のフィードも配信することができるんです。

仕組みはいたって簡単。はてなダイアリーRSSフィードURLの最後にwordキーワードを指定するだけでOKです。

http://d.hatena.ne.jp/(username)/rss?word=xxx
または
http://d.hatena.ne.jp/(username)/rss2?word=xxx

といった具合です。
ただし、xxxの部分に記号や日本語を用いる場合は、URLエンコードされた文字列を指定しなければいけない点に注意してください。
以下のオンラインサービスを利用すれば、簡単にURLエンコードされた文字列を取得できます。(多分、UTF-8エンコードすればOKです)
Web便利ツール/URLエンコード・デコードフォーム - TAG index
例えば、"[webservice]" は "%5bwebservice%5d" に変換し、「〜?word=%5bwebservice%5d」と指定しなければなりません。

Forgot the Milk.ブログの例

Forgot the Milk.ブログのRSSを例にすると、こんな感じです。

通常のRSSフィードURL
http://d.hatena.ne.jp/hmiyaza1/rss2

"google" を含む記事のみのRSSフィードURL
http://d.hatena.ne.jp/hmiyaza1/rss2?word=google

"ガジェット" を含む記事のみのRSSフィードURL
http://d.hatena.ne.jp/hmiyaza1/rss2?word=%e3%82%ac%e3%82%b8%e3%82%a7%e3%83%83%e3%83%88

"[webservice]" を含む記事のみのRSSフィードURL
http://d.hatena.ne.jp/hmiyaza1/rss2?word=%5bwebservice%5d

"[lifehacks]" を含む記事のみのRSSフィードURL
http://d.hatena.ne.jp/hmiyaza1/rss2?word=%5blifehacks%5d

"[other]" を含む記事のみのRSSフィードURL
http://d.hatena.ne.jp/hmiyaza1/rss2?word=%5bother%5d

注意点が2点あります!

全体で最新5日分しかフィードが生成されないようなので、最新5日分に検索語句に該当する記事がなかった場合、フィードは0件になります。
また、なぜか絞り込んだRSSフィードは必ず全文掲載になります。受信する側にとってはおいしい話しかもしれませんが、はてなの改行されない全文掲載フィードは美しくありません。。(これさえなければ積極的に活用したところだったのですが・・)

カテゴリ毎にフィード配信する手順

それでは、このフィードの拡張を利用して、はてなブログでカテゴリ毎のフィードを配信する手順の一例を紹介します。

カテゴリ名を記事に埋め込む

記事中の文字列と区別するため、中括弧で囲ったカテゴリ名([webservice]など)を記事に埋め込みます。その際、埋め込んだカテゴリ名を日記検索結果にリンクすると、ユーザビリティが向上すると思います。
[webservice]の場合、http://d.hatena.ne.jp/hmiyaza1/archive?word=%5Bwebservice%5D にリンクを貼ります。
※当エントリ下部のタグ欄を参考にしてください。

カテゴリごとのRSSフィードURLを取得する

先ほどの[webservice]カテゴリーであれば、RSSのURLは
http://d.hatena.ne.jp/hmiyaza1/rss2?word=%5bwebservice%5d
となります。

RSSフィードを公開する

はてなダイアリーのヘッダやフッタなどで、それぞれのRSSフィードを公開してください。

まとめ

このブログみたいに、複数のカテゴリに言及するブログなどでは、RSSフィードを分離することで、読者に効率的な情報提供が行えるかもしれませんね。はてなダイアリーユーザでなくとも、はてなダイアリーRSSを購読している人には便利な機能ではないでしょうか。
ただ、やはり、はてなフィードの改行なし全文掲載は美しくないですよね。。これを解決する方法を知っている人がいたら、ぜひご一報ください!

タグ

[webservice]