記事本文
はてなブックマークの概要取得の処理を naoya さんが発表してくれた
はてなブックマークと <$MTEntryExcerpt$> やはてなブックマークと dc:description やはてなブックマークと RSS Auto-Discovery 、および Lucky bag::blog: はてなブックマークに概要が反映されなくなったなどで話題になっているっていうか自ら話題にしたはてなブックマークの概要取得についてですが、その処理がどのように行われているかを naoya さん ( naoyaのはてなダイアリー ) が直々に発表してくださいました。
処理の流れですが、
- 該当エントリーに Feed Auto-Discovery を実行する
- その中で最初に見つかった Feed (link タグで一番上にあるもの) を GET する
- Feed を parse して、ブックマークされた URI を link 要素にもつ要素を探す
- その要素に content 部分 (RSS 1.0 なら content:encoded、Atom なら content) があればそれを取得、なければ description を取得
という感じになっています。 このいずれかの流れでその取得に失敗した場合は、HTML コンテンツの中からそれっぽい部分を取得する、という感じになっています。
とのこと。
それなら、各記事のサマリだけを提供するような RSS ( 当然ながら content:encoded を含まないもの ) を記事ごとに
rel="alternate"
で提供すれば description を取得してくれるのでは !
と考えました。
その考えは naoya さん自身も記事中で
Permalink URI の中にはもう一つ別種類の、そのエントリーだけが格納されているフィードを探す Auto-Discovery な手段があるといいなと思いました。
はてなダイアリーみたいなフルに動的なコンテンツ管理ツールだと実装は結構簡単です。 Movable Type のような静的ファイルを作るものも、各エントリーごとにもう一つファイル(フィード)をはき出すようにして、一度全部 Rebuild してやれば ok だと思います。
と書いていますし、 nulog > 2005 > 12 > 03 - for Hatena::Bookmark でも
個別ページの alternate を設定して、個別ページ用の XSLT を書いといた。
という方法が提唱されていますので、間違ってはいないと思います。
けど微妙にうまくいってない気がする
と書かれているのが気になりますが。
Individual Entry Summary Feed Template ( RSS 1.0 )
ということで、個別記事のサマリを提供する Feed のテンプレートを作ってみました。
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="<$MTEntryPermalink$>">
<title><$MTBlogName encode_xml="1"$></title>
<link><$MTEntryPermalink$></link>
<description><$MTBlogDescription remove_html="1" encode_xml="1"$></description>
<dc:language><$MTDefaultLanguage$></dc:language>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="en"$><$MTBlogTimezone$></dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=<$MTVersion$>" />
<MTBlogIfCCLicense>
<cc:license rdf:resource="<$MTBlogCCLicenseURL$>" />
</MTBlogIfCCLicense>
<items>
<rdf:Seq>
<rdf:li rdf:resource="<$MTEntryPermalink$>" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="<$MTEntryPermalink$>">
<title><$MTEntryTitle encode_xml="1"$></title>
<link><$MTEntryPermalink$></link>
<description><$MTEntryExcerpt encode_xml="1"$></description>
<MTEntryTags case_sensitive="1">
<dc:subject><$MTTag encode_xml="1"$></dc:subject>
</MTEntryTags>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="en"$><$MTBlogTimezone$></dc:date>
<trackback:ping rdf:resource="<$MTEntryTrackbackLink$>" />
</item>
</rdf:RDF>
これを通常の Permalink の URI の末尾に _summary.rdf が付くようにアーカイブ・マッピングを設定して、かつ Individual Entry Archive にて、最新記事の情報を含む Feed を読み込む行より上にこの Feed を読み込むように書き換えて個別記事を再構築。
ちなみに、
<MTEntryTags case_sensitive="1">
から
</MTEntryTags>
までの部分は Tagwire Plugin を使用している前提での記述なので、 Tagwire Plugin を使用していない場合は
<dc:subject><$MTEntryCategory encode_xml="1"$></dc:subject>
と書き換えてください。
検証結果
再構築作業の後に投稿したビール日記 2005/12/01 - 金しゃち名古屋赤味噌ラガーという記事をブックマークしてみましたが、
の限定品赤味噌ラガービール。
アルコール度数は 6.0% と決して高くはないのですが、ハイアルコールビールのように泡がほとんど立ちません。
色は暗い赤褐色で、スタウトに似た感じ。
で、飲むと本当に味噌の味わいがあります。
しかしこれはこれで楽しく飲めました。 ちょっと苦みが強いので万人におすすめできるものではありませんが。
のように、やはりヒューリスティクスなサマリになっています、うーむ。
とりあえず検証結果だけは得られたので、ここで一旦締めて近所の寄り合いの忘年会に行ってきます。
トラックバック送信先
- Lucky bag::blog: はてなブックマークに概要が反映されなくなった
-
個別記事ごとに、その記事のサマリだけを提供する Feed のテンプレートを作成してみました。 hxxk.jp ではうまく description を取得してくれませんでしたが……。
- naoyaのはてなダイアリー - はてなブックマークの概要取得の処理
-
個別記事ごとに、その記事のサマリだけを提供する Feed を提供してみましたが、やはりヒューリスティクスなサマリになっています。
- nulog > 2005 > 12 > 03 - for Hatena::Bookmark
-
nulog の手法に倣って個別の Feed を提供してみましたが、こちらもうまくいきませんでした。

