GoogleBlog検索とRSSとJava

GoogleAPIからGoogleBlog検索を利用することはできない。でも使いたい。ということで無理やり使ってみた。

GoogleBlog検索は、検索結果をRSSで取得することができる。RSSを取得して、Javaでパースしてあげれば、検索結果を扱うことができる。

RSSライブラリにinforma、URLエンコーダにCommonsCodecを使って実装してみた。


import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Collection;

import org.apache.commons.codec.net.URLCodec;

import de.nava.informa.core.ChannelIF;
import de.nava.informa.core.ItemIF;
import de.nava.informa.core.ParseException;
import de.nava.informa.impl.basic.ChannelBuilder;
import de.nava.informa.parsers.FeedParser;

public class GoogleRssUtil {

public String readGoogleBlogRss(String keyword) {

String rssStr = "";

try {

URLCodec encode = new URLCodec();

// 文字列をエンコードする
String enStr = encode.encode(keyword);

// GoogleBlog検索のURLを作る
URL url = new URL("http://blogsearch.google.co.jp/blogsearch_feeds?hl=ja&q="
+ enStr + "&lr=lang_ja&ie=utf-8&num=10&output=rss");

// RSSを取得する
ChannelIF channel = FeedParser.parse(new ChannelBuilder(), url);

// RSSのタイトルを取得する
rssStr = rssStr + channel.getTitle();

// RSSの各内容をCollectionに格納する
Collection list = channel.getItems();

// RSSの各内容を取得する
ItemIF[] items = (ItemIF[]) list.toArray(new ItemIF[0]);

String itemStr = "";

// くるくる回して内容を取ってくる
for (int i = 0; i < items.length; i++) {
String title = items[i].getTitle();
String urlStr = items[i].getLink().toString();
String desc = items[i].getDescription();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy'/'MM'/'dd'/ 'HH':'mm");
String date = sdf.format(items[i].getDate());


itemStr = itemStr +
"title" + title +
"desc " +desc +
"desc " +date ;
}

rssStr = rssStr + itemStr;

return rssStr;

} catch (IOException e) {

e.printStackTrace();
return rssStr;
} catch (ParseException e) {

e.printStackTrace();
return rssStr;
} catch(Exception e){
e.printStackTrace();
return rssStr;
}
}

}

わざわざinformaやCommonsCodecを使った理由はまた今度。