2010-01-31

OPML と Google カスタム検索

Japanese Bloggers Info に、登録ブログを記載した OPML 発行と、登録ブログ対象のカスタム検索の機能をつけた。
  • ブログ情報から自動的に OPML ファイルを生成するサーブレットを作成。
  • Google のカスタム検索を作成し、OPML を登録、検索対象サイトを自動的に更新させる。
ということをした。OPML の仕様は、次のサイトを参考に。 カスタム検索への OPML 登録は、Google カスタム検索エンジン「マイ検索エンジン > コントロールパネル > 詳細設定」から。

「アノテーションフィードの追加」という項目に、Custom Search XML という、アノテーション(検索対象サイトを指定するもの)を記載した XML を登録する必要があるが、OPML をこの XML に変換するツールが用意されているので、それを間にかませる。つまり、

www.google.com/cse/tools/makeannotations?url=(OPML の URL)&label=(カスタム検索の ID)

のような URL を、アノテーションフィードとして登録すれば OK。検索フォームについては、検索結果をページ内に出すために、カスタム検索「マイ検索エンジン > Custom Search Element」を利用した。うん、なかなかいい感じ。

2010-01-21

GAE/J で If-Modified-Since に対応

フィードを配信するようになったので、ついでに If-Modified-Since ヘッダに対応させてみた。フィードリーダーからのアクセスがよくなるのかどうなのか、わからないのだけれど。

コードはほとんど、こちらの丸写し。変えたのは、Last-Modified をブログのリストをキャッシュしたときの日時にしたことぐらい。 なんとなく、フィードリーダーでのデータ更新の反映が早くなった気がする…。

GAE/J で RSS フィードの配信

でフィード配信開始しました。それがこちら。 フィードリーダーに登録しておくと楽しいかも。

RSS フィード発行のためのコードはこんな感じ。いつも載せるコードよりちょっと長いけれど、まあ備忘録として。
Feed feed = new Feed();
feed.setTitle(TextConstruct.create(TextConstruct.Type.TEXT, "Japanese Bloggers Info", null));
feed.setSubtitle(TextConstruct.create(TextConstruct.Type.HTML, "日本語の Blogger ブログの更新情報を紹介しています。", null));
feed.setGenerator("1.0", "http://japanese-bloggers.appspot.com/", "Japanese Bloggers Info");
feed.setUpdated(new DateTime(now.getTime(), 540));
feed.addLink("alternate", "text/html", "http://japanese-bloggers.appspot.com/");
feed.addLink("self", "application/rss+xml", "http://japanese-bloggers.appspot.com/feed");
feed.getAuthors().add(new Person("Kuribo", "http://www.kuribo.info/", "kurikuribo@gmail.com"));

ArrayList<Entry> entries = new ArrayList<Entry>();

Entry entry = new Entry();
entry.setTitle(TextConstruct.create(TextConstruct.Type.TEXT, blogtitle + ": " + posttitle, null));
entry.setContent(TextConstruct.create(TextConstruct.Type.HTML, summary, null));
entry.setPublished(DateTime.parseDateTime(postPublished));//postPublished は Blogger のフィードから得た発行日時
entry.addLink("alternate", "text/html", posturl);
entry.getAuthors().add(new Person(author));
entries.add(entry);

feed.setEntries(entries);

StringWriter sw = new StringWriter();
try {
 feed.generateRss(new XmlWriter(sw), new ExtensionProfile());
} catch (IOException e) {
 //省略
}
String rss = sw.getBuffer().toString();
ちょっとはまったのが、8 行目と 17 行目の author 項目。Feed.setAuthors(List<Person>) みたいなメソッドがないので焦ったのだけれど、上掲のように get した List(要素なし)に Person を追加するのでいいみたい。

あと 14 行目 content の項目は、アプリケーションでエスケープするので、text でいいやと思って指定してみるとフィードリーダーに本文が表示されず。タイトルは text、内容は html というのがよさそう。

Zenback - Everyone's Related Posts