Livedoorのお天気WebサービスをJavaで使う

Livedoorのお天気Webサービス(REST)をJavaアプリケーションから利用する場合、以下のようなコードになる*1 *2 *3

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Main {
    public static void main(String[] args) {
        String urlstr =
            "http://weather.livedoor.com/forecast/webservice/rest/v1";
        String parameter = "city=70&day=tomorrow";
        try {
            URL url = new URL(urlstr + "?" + parameter);
            HttpURLConnection urlconn =
                (HttpURLConnection)url.openConnection();
            urlconn.setRequestMethod("GET");
            urlconn.connect();
            
            Document doc = DocumentBuilderFactory.newInstance()
                             .newDocumentBuilder()
                             .parse(urlconn.getInputStream());
            Element root = doc.getDocumentElement();
            System.out.println(root.getElementsByTagName("title")
                           .item(0).getFirstChild().getNodeValue());
            System.out.println(root.getElementsByTagName("telop")
                           .item(0).getFirstChild().getNodeValue());
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName())
                  .log(Level.SEVERE, null, ex);
        }
    }
}

【備考】
サーバーサイドのJava用のRESTフレームワークとしては、Restlet | API-First Success Made Easyというのがある模様。

*1:横浜市の明日の天気予報を取得する例

*2:イントラネット等からプロキシサーバ経由でアクセスする場合には、JVMの起動パラメータに-Dhttp.proxyHost=と-Dhttp.proxyPort=を指定する必要有。

*3:JRE5.0以降で動作すると思われる。JRE1.4でも動作するかも。