m-namikiの日記

おもしろき こともなき世を おもしろく

goo.glを利用する

いま作ってみようと思っているアプリで短縮URLが必要となりそうなので、goo.glの使い方を調べてみました。goo.glの公式サイトはこちらです。
goo.glは短縮したいURLをAPIにポストすると、結果をJSON形式で返却してきますが、それをイチイチ解析するのもアレなので、JSONICを利用してPOJOに変換するようにしました。JSONICは依存ライブラリもなく、使い方もシンプルなので使い易いですね。

/**
 * GoogleのURL短縮サービス「goo.gl」を利用するクラスです。
 * 
 * @author m_namiki
 * 
 */
public class Googl {

	private static final String API_URL = "https://www.googleapis.com/urlshortener/v1/url";

	/**
	 * 指定されたURLの短縮URLを返却します。
	 * 
	 * @param target
	 *            対象URL
	 * @return 短縮URL
	 */
	public static String shortener(String target) {
		try {
			URL url = new URL(API_URL);
			URLConnection urlConn = url.openConnection();
			urlConn.setDoOutput(true);
			urlConn.setRequestProperty("Content-Type", "application/json");

			PrintStream ps = new PrintStream(urlConn.getOutputStream());
			ps.print("{\"longUrl\": \"" + target + "\"}");
			ps.close();

			GooglJSON json = JSON.decode(urlConn.getInputStream(),
					GooglJSON.class);
			return json.getId();
		} catch (Exception cause) {
			throw new RuntimeException(cause);
		}
	}
}

APIにポストするときに、Content-Typeをapplication/jsonと指定することと、ポストの内容を以下のようなJSON形式とするだけです。

{“longUrl”: “http://www.google.com/”}

で、goo.glからの結果は以下のようなJSON形式です。

{
 "kind": "urlshortener#url",
 "id": "http://goo.gl/fbsS",
 "longUrl": "http://www.google.com/"
}

これをJSONICでPOJOに変換しているのがJSON#decode()の部分です。変換先のGooglJSONはkind,id,longUrlというプロパティとそれぞれのGetter/Setterを持ったPOJOとなります。