JavaでJSON

昨日の深夜の記事である、JavaでTwitterのJSON取得するにはどうしたらいいの?の続きとをやってみたいと思います。

昨日のTwitterでは面白みが無かったかなぁなんて思ったので、他のJSONを試してみます。何にしたらいいかわからないので、みんな大好きiTunesのJSONを試してみることに

スポンサードリンク

まずは「iTuens JSON」でググってみる。するとAppleのSearch APIってのが見つかると思うのでそこを参考に

これを読むと必要なパラメーターがたくさん書いてあります。これは必要に応じて各自で追加してください。今回は管理人が大好きなsupercellのアルバムでも取得してみようと思います。
ということで、与えるパラメーターは

https://itunes.apple.com/search?
term=supercell
&country=JP
&lang=ja_jp
&entity=album
が最低限必要そう。くっつけると
http://itunes.apple.com/search?term=supercell&country=JP&lang=ja_jp&entity=album

開いて整理すると中身はこんな(多いので1つだけ表示しています)


{
    "resultCount": 1, 
    "results": [
        {
            "amgArtistId": 482126, 
            "artistId": 631665100, 
            "artistName": "supercell", 
            "artistViewUrl": "https://itunes.apple.com/jp/artist/supercell/id631665100?uo=4", 
            "artworkUrl100": "http://a5.mzstatic.com/us/r30/Music/v4/55/d7/b1/55d7b14b-3a33-ba15-efc2-ce41d6f44d0f/jacket_SRCL07488B01A_600over.100x100-75.jpg", 
            "artworkUrl60": "http://a4.mzstatic.com/us/r30/Music/v4/55/d7/b1/55d7b14b-3a33-ba15-efc2-ce41d6f44d0f/jacket_SRCL07488B01A_600over.60x60-50.jpg", 
            "collectionCensoredName": "Today Is A Beautiful Day", 
            "collectionExplicitness": "notExplicit", 
            "collectionId": 570090803, 
            "collectionName": "Today Is A Beautiful Day", 
            "collectionPrice": 2000.0, 
            "collectionType": "Album", 
            "collectionViewUrl": "https://itunes.apple.com/jp/album/today-is-a-beautiful-day/id570090803?uo=4", 
            "copyright": "℗ 2011 Sony Music Records Inc.", 
            "country": "JPN", 
            "currency": "JPY", 
            "primaryGenreName": "Anime", 
            "releaseDate": "2011-03-16T07:00:00Z", 
            "trackCount": 13, 
            "wrapperType": "collection"
        }
    ]
}

ここからは昨日のコードを使いまわします!まだ見ていない方は一読お願いします(>_<)とりあえず昨日作ったTwitterJsonクラスを変えちゃえばよさ気。変えるというかこれはモウ消しちゃって新しく作り直します。ItunesJsonクラスを作ってみる。上で整理したJSONを見ると2階層に分かれていることがわかります。ItunesJsonクラスは上の階層を書いて上げる。こんな感じ


import java.util.List;
public class ItunesJson {
	int resultCount;
	List<Results> results;
}

次は下の階層のクラスを用意してあげます。ちなみにGsonはゲッターセッター不要です。必要あらば付け足しても構いませんが、今回は如何にラクにコードを書くかって感じで進めてみます。Resultsクラスを作りました。ぜーーんぶ書いてあげます。これは全部書かないとエラーになるわけではありません。必要な要素だけでもいいのですが、あるものは書いておいたほうが後々ラクだったりします。


public class Results {
	int amgArtistId;
	int artistId;
	String artistName;
	String artistViewUrl;
	String artworkUrl100;
	String artworkUrl60;
	String collectionCensoredName;
	String collectionExplicitness;
	String collectionId;
	String collectionName;
	int collectionPrice;
	String collectionType;
	String collectionViewUrl;
	String copyright;
	String country;
	String currency;
	String primaryGenreName;
	String releaseDate;
	int trackCount;
	String wrapperType;
}

後はメインをちょっと書き換えてあげれば完成。


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gson.Gson;
public class Itsokuhou{
	public static void main(String args[]){ 
		HttpURLConnection con = null;
		StringBuilder builder = new StringBuilder();
		try {
			URL url = new URL("http://itunes.apple.com/search?term=supercell&country=JP&lang=ja_jp&entity=album");
			con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			con.setInstanceFollowRedirects(false);
			//接続(´・ω・`)
			con.connect();
	
			BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
			String line;
			while ((line = reader.readLine()) != null) {
				builder.append(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//とりあえず表示してみる
		System.out.println(builder.toString());
		Gson gson = new Gson();
		//この下ちょっと手直し
		ItunesJson itj = gson.fromJson(builder.toString(),ItunesJson.class);
		System.out.println("名前とうらるを表示");
		System.out.println(itj.resultCount);
		for(int n =0;n < itj.results.size();n++){
		System.out.println(itj.results.get(n).collectionName);//アルバム名
		}
	}
}

実行結果
itunesjson

うーーーん。これじゃ昨日と対して変わらない。もうちょっと視覚的に楽しめるようにHTMLコードでも書き出してみます。artworkUrl100といのうが100×100の画像なのでそれとタイトルとリンクでも付けてみましょう。もうやっていることは上と同じなので急ぎ足で


for(int n =0;n < itj.results.size();n++){
    String ijcode = "<p>" + itj.results.get(n).collectionName + "</p>"
    + "<img src=\"" + itj.results.get(n).artworkUrl100  + "\"/>";
    System.out.println(ijcode);
}

これでコンソールに表示されたHTMLコードをブログなどに埋め込むと下記のようになります☆彡

Supercell - EP

JSONはこれを応用させると色々なことができます。例えば当ブログの
Macで捗るオススメのアプリひたすら書いてくわ
はスクショもアプリのバナーも全てJSONからデータを取得して埋め込んでいます。

今回はパラメータを固定にしていますが、入力フォームから受け取ったデータをパラメータに取り込めばプチ検索システムの完成です。たくさんのサービスがAPIを公開しているので面白そうなのを探してみてください☆彡