Archive for 6月, 2005

広島市民球場に行ってきました。

月曜日, 6月 27th, 2005

 一年中、携帯電話の待受け画面を虎にしていた私ですが、浮気をして、他球団の応援をしてしまいました。
 6月25日(土曜日)、中日ドラゴンズ広島東洋カープ戦を観戦してきました。
 席はバッターボックスの裏で一塁側の結構良い席。ファウルボールがいっぱい飛んでくるところです。友達の会社が年間指定席で取っているらしく、羨ましく思う。
 奇遇ですが、この日は、私の地元の少年野球チームも見学にきてたようです。
 広島の先発は長谷川で、永川、高橋と豪華投手陣でした。5回裏の二死満塁で二日前に2000本安打を達成した野村選手(大分県出身)が代打で3点適時二塁打!かなりおいしい試合を見てしまった…。
 前田とか、緒方とか、新井とかも数十メートル先で動いてます。実は公式戦を観るのは初めてでした。7回には風船もとばしました。
あと、福留がバッターボックスに立ったときの後姿に惚れました。あと、友達が谷繁のことを「たにしげる」と読んでいて面白かったです。
とにかく、点がいっぱい入った試合で、終わってみると、12対16でカープの勝利でした。
 帰りに、友達が広島駅の「野球鳥」という焼き鳥屋さんに連れて行ってくれました。このお店はメニューの全部に選手の名前がついています。前田→砂肝とか。ビール→スライダーなので、「とりあえず、スライダーで。」とかいう会話が広島では日常茶飯事なんだなぁ、と思うと羨ましいです。焼き鳥美味しいし。
 今回は思わず応援してしまいましたが、カープには阪神の次に頑張って欲しい次第であります。

ラッキーセブン ぶっかきごおり 前田?
これがテレビでよく見るやつ ロゴ入りカキ氷、200円也。この日は凄い炎天下だったので、買ってしまいました。 携帯カメラの画素が少ないので、ぼやけていますが、背番号1です。


RSSを書いてみたり読んでみたり

木曜日, 6月 16th, 2005

 このごろ、コンピュータ雑誌以外でもblogの記事を見かけることがちょくちょくあります。blogの認知度が7割を超えた、というニュースを昨日見ました(うろ覚え)。
blogで使われている特長的な機能としてRSSがあります。RSSはblogやニュースサイトなどのサイト情報、記事情報のサマリをXML形式で各サイトに配置されているものです。それを閲覧者がRSSリーダーで読込み、新着情報を取得できます。こちらのサイトに詳しくかかれています。RSS -- サイト情報の要約と公開

漠然とRSSリーダを作りたいなーと思っていたので、RSSを書き出したり、読込んだりする方法を探してました。WEB+DB PRESS Vol.20,24とかに詳しく載っていました。

Javaで読み書きできるライブラリに RSS4j というのがあったので、それを今回は使ってみます。ChurchillObjects.comのサイトからrss4j092.jarをダウンロードして解凍すると、ドキュメントとソースともろもろが入っています。これをEclipseか何かでビルドするなり、コンパイルしてクラスをjarファイルに固めるなりします。この際、ビルドパスに xerces2 を設定しないと、実行したときに例外が起こります。作成するクラスにRSS4jのライブラリやクラスをimportします。

まずはこのblogの情報を適当に書き出してみます。

JAVA:
  1. import java.io.File;
  2. import churchillobjects.rss4j.RssChannel;
  3. import churchillobjects.rss4j.RssChannelItem;
  4. import churchillobjects.rss4j.RssDocument;
  5. import churchillobjects.rss4j.generator.RssGenerationException;
  6. import churchillobjects.rss4j.generator.RssGenerator;
  7.  
  8. public class WriteRss {
  9. public static void main (String[] args) {
  10. try {
  11. RssDocument doc = new RssDocument();
  12. doc.setVersion(RssDocument.VERSION_10);
  13. RssChannel channel = new RssChannel();
  14. channel.setChannelTitle("NAKAYA Log");
  15. channel.setChannelLink("http://s9727.jugem.jp/");
  16. channel.setChannelUri("http://s9727.jugem.jp/mode=rss");
  17. channel.setChannelDescription("I dere to differnt");
  18. doc.addChannel(channel);
  19. for (int i=1; i<=2; i++) {
  20. RssChannelItem item = new RssChannelItem();
  21. item.setItemTitle("記事 " + i);
  22. item.setItemLink("http://s9727.jugem.jp/?eid=" + i);
  23. item.setItemDescription("記事の説明" + i);
  24. channel.addItem(item);
  25. }
  26. File file = new File("rss.xml");
  27. RssGenerator.generateRss(doc, file);
  28. } catch (RssGenerationException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }

これを実行すると

XML:
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes">
  2. <rdf>
  3. xmlns="http://purl.org/rss/1.0/"
  4. xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  5. <channel rdf:about="http://s9727.jugem.jp/mode=rss"></channel></rdf>
  6.  
  7. <description>I dere to differnt</description>
  8. <link />http://s9727.jugem.jp/ <items>
  9. <rdf>
  10. </rdf><rdf rdf:resource="http://s9727.jugem.jp/?eid=1">
  11. </rdf><rdf rdf:resource="http://s9727.jugem.jp/?eid=2">
  12. </rdf>
  13.  
  14.  
  15. <item rdf:about="http://s9727.jugem.jp/?eid=1"></item></items>
  16. <link />http://s9727.jugem.jp/?eid=1 <description>記事の説明1</description>
  17.  
  18. <item rdf:about="http://s9727.jugem.jp/?eid=2"></item>
  19. <link />http://s9727.jugem.jp/?eid=2 <description>記事の説明2</description>

と出力されます。実環境では、新着記事が書き込まれた時にRSSを出力します。
これをRSSリーダーで読込むと、サイトの概要や最新xx件のサマリを取得できたりします。試しに、このblogのRSSを読込んでみます。

JAVA:
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.net.URL;
  4. import java.util.Enumeration;
  5. import churchillobjects.rss4j.RssChannel;
  6. import churchillobjects.rss4j.RssChannelItem;
  7. import churchillobjects.rss4j.RssDocument;
  8. import churchillobjects.rss4j.parser.RssParseException;
  9. import churchillobjects.rss4j.parser.RssParser;
  10.  
  11. public class ReadRss {
  12. public static void main(String[] args) throws IOException {
  13. try {
  14. URL url = new URL("http://s9727.jugem.jp/?mode=rss");
  15. InputStream is = url.openStream();
  16. RssDocument doc = RssParser.parseRss(is);
  17. Enumeration enum = doc.channels();
  18. while (enum.hasMoreElements()) {
  19. RssChannel channel = (RssChannel) enum.nextElement();
  20. System.out.println(channel);
  21. Enumeration enumItem = channel.items();
  22. while (enumItem.hasMoreElements()) {
  23. RssChannelItem item = (RssChannelItem) enumItem.nextElement();
  24. System.out.println(item);
  25. }
  26. }
  27. } catch (RssParseException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }

これを実行すると、

RssChannel: [title='NAKAYA Log' description='タバコを与えないでください。' link='http://s9727.jugem.jp/']
dublinCore: []
item: [title='Skypeを使ってみたい。', link='http://s9727.jugem.jp/?eid=40, description=' 先月、先輩のセキュリティについてのプレゼンテーションを拝見しました。その際に福岡オフィスにもプレゼンの資料を配布し、音声はSkypeを使用して中継していました。最近、何かと話題になっているんで気になっていたのですが、実際に使用しているのを見たのは初めてで...']
item: [title='連結リストについて驚いたこと。', link='http://s9727.jugem.jp/?eid=41, description=' 先日、Javaのコードを書いている際に、隣の席のFさんと話題になったことがあります。Java.util.iteratorクラスについてです。']

………… 以下略

と出力されます。取得した情報をSWTを使ってテーブルウィジェットにに書き出して…とか想像するだけで、実行していません。

EclipseでRssChannelクラスやRssChannelItem のメソッドをコード補完させようとすると、getXXX()というのメソッドがいくつかあって、それを全部出力してみたのですが、jugemのblogでは扱っていないプロパティがあるみたいで、そういうのはnullが返って来ました。