トップページのニュース一覧に"はてブ数"を表示しようとしたら、
http://blog.suz-lab.com/2010/01/blog-post.html
意外と大掛かりで、RomeのFeedBurner用モジュールまで作ってしまいました。
トップページのニュース一覧はFeedBurnerのフィードを
Romeで読み込んで作っているのですが、FeedBurnerのフィードは
各記事のリンク先URLが、ブログ本体のものではなく、
http://feedproxy.google.com/~r/suz-lab-blog/~3/Ioq7XAQ4OMQ/blog-post.html
といったFeedBurnerのものになってしまっています。
当然、"はてブ数"を表示するには、ブログ本体のリンク先URLが必要になるのですが
それは、フィード中に以下のような形で記載されていました。
<feedburner:origLink>http://blog.suz-lab.com/2010/01/blog-post.html</feedburner:origLink>
当然、素のRomeでは上記の値を取得することはできないのですが、
FeedBurner用のモジュールを作成することで、取得できるようになります。
まず、モジュールクラスの作成です。ネームスペースのURIを定義して、
また、"origLink"をset/getできるようにしておきます。
--------【FeedBurnerModule.java】--------
...
@SuppressWarnings("serial")
public class FeedBurnerModule extends ModuleImpl {
public static final String URI = "http://rssnamespace.org/feedburner/ext/1.0";
private String origLink;
public FeedBurnerModule() {
super(FeedBurnerModule.class, URI);
}
@Override
public void copyFrom(Object object) {
FeedBurnerModule module = (FeedBurnerModule)object;
this.origLink = module.getOrigLink();
}
@Override
public Class<?> getInterface() {
return FeedBurnerModule.class;
}
...
}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-gae/src/suz/lab/gae/rome/FeedBurnerModule.java?r=112
次に、パーサークラスの作成です。parseメソッドで、実際にフェード中の"origLink"の内容を、
上記のモジュールクラスにセットしています。
--------【FeedBurnerParser.java】--------
...
public class FeedBurnerParser implements ModuleParser {
private static final Namespace NS
= Namespace.getNamespace("feedburner", FeedBurnerModule.URI);
@Override
public String getNamespaceUri() {
return FeedBurnerModule.URI;
}
@Override
public Module parse(Element element) {
FeedBurnerModule module = new FeedBurnerModule();
Element origLink = element.getChild("origLink", NS);
module.setOrigLink(origLink.getText());
return module;
}
最後に、プロパティファイルです。Atom(1.0)を読み込むときに、
FeedBurnerモジュールのパースもするように指定しておきます。
--------【rome.properties】--------
atom_1.0.feed.ModuleParser.classes=suz.lab.gae.rome.FeedBurnerParser
atom_1.0.item.ModuleParser.classes=suz.lab.gae.rome.FeedBurnerParser
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-gae/src/rome.properties?r=112
すると、下記のような感じで、モジュールを取得することができ、
モジュール内の情報を利用することができます。
--------【index.html】--------
...
#foreach($entry in $results.entries)
<dt>$date.format("yyyy/MM/dd", $entry.publishedDate)</dt>
<dd>
<a href="$entry.link">$entry.title</a>
#set($module = $entry.getModule("http://rssnamespace.org/feedburner/ext/1.0"))
<a href="http://b.hatena.ne.jp/entry/$module.origLink" target="_blank">
<img src="http://b.hatena.ne.jp/entry/image/$module.origLink" border="0"/>
</a>
</dd>
#end
...
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-apps/war/WEB-INF/vm/page/other/index.html?r=111
Romeモジュール、使えるね。

0 コメント:
コメントを投稿