Google App Engine/Java (以下 GAE/J) のアプリケーションから、URL Fetch Java API (以下 URLフェッチAPI)を使って、Web上の他のリソースにアクセスできます。

今回は、とりあえずGETでリモートのページ内容を取得してみます。

URLフェッチAPIの利用には、2つの方法があります。

1) Java標準ライブラリ java net を使用

2) GAEの 低レベルAPI を使用

1) は 2) のラッパーの様です。

  • * *まずは、 1) java net を使用の方から。

public String fetchUrl(String urlStr) throws IOException{
    StringBuilder sb = new StringBuilder();
    BufferedReader reader = null;
    URL url = new URL(urlStr);
    reader = new BufferedReader(new InputStreamReader(url.openStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
    reader.close();
    return sb.toString();
}

これで一応動きますが、エンコーディングがUTF-8のページを表示する際に文字化けしてしまいました。


次に、2) 低レベルAPIのサンプルです。

public static String fetchUrl(String urlStr, String encoding) throws IOException {  
    URLFetchService urlFetchSrv = URLFetchServiceFactory.getURLFetchService();
    HTTPResponse res = null;
    URL url = new URL(urlStr);
    res = urlFetchSrv.fetch(url);
    return new String(res.getContent(), encoding);

    //上記をインラインで書くとこんな感じ
    //return new String(URLFetchServiceFactory.getURLFetchService().fetch(new URL(urlStr)).getContent(), encoding);  
}  

エンコーディングを指定して適宜変換しています。

この方法で、文字化けが解消されました。

実際には、さまざまなクウォータを気にしながらになると思いますが、うまく使えば色んな事が出来そうです。

サイトをGAEに移行する際に、旧コンテンツをしばらく残したい場合に使えないかな、と思っています。

あと、決済ASPなどとの連携にも活躍しそうですね。

色々試してみたいと思います。