Gson

999:名無しのプログラマー 2099/99/99 99:99:99 ID:ItSoKuHou

Javaの宿題を解いてあげるスレから。とんでもないスレということは置いておいて、けっこう面白い。
VIPやなんJが転載禁止になったことで当ブログはネタが減っています。現在のような人の少ない深夜の時間帯は様々な方向性の記事をうpしていこうかと思っています。


スポンサードリンク

964: デフォルトの名無しさん 2013/12/11 22:44:38

よろしくお願いします
【 課題 】 JSONを綺麗に表示させよ(ツイートの)
【 形態 】1. Javaアプリケーション(main()で開始)
【 期限 】12/25

どんなツイートでもいいのでJSONで取得して
中身を表示できればおkみたいです

どのライブラリを使えばいいかもわからずjarの使い方もわからないので泣いてます
お願いします


966: デフォルトの名無しさん 2013/12/12 08:26:55

>>964
難しいな
おれも興味あるわ
誰か頼む


968: デフォルトの名無しさん 2013/12/12 16:01:20

>>966
たしかに難しいですわね
私も興味あるのでどなたか御機嫌麗しゅう


999:名無しのプログラマー 2099/99/99 99:99:99 ID:ItSoKuHou

と、このようにこの宿題は解かれずに流れていました。Javaでjson(ツイートの)を表示することができればいいとのこと。

んーーー意図がちょっとわからないので、正解かわかりませんが解いてみます。

とりあえずツイートのjsonを引っ張ってくるためにTwitter Developers読むφ(..)メモメモ
どうやら、
「https://api.twitter.com/1/statuses/oembed.json?id」
で返してくれるらしい。調度良く厨二なツイートをしていたのでこれで試してみます


このツイートのjsonを表示するとこんな感じ


{"cache_age":"3153600000","url":"https:\/\/twitter.com\/itsoku2ch\/statuses\/438183889027084288","height":null,"provider_url":"https:\/\/twitter.com","provider_name":"Twitter","author_name":"IT\u901F\u5831","version":"1.0","author_url":"https:\/\/twitter.com\/itsoku2ch","type":"rich","html":"\u003Cblockquote class=\"twitter-tweet\"\u003E\u003Cp\u003E\u201DStay hungry, Stay foolish.\u201D
\u306A\u3093\u3066\u3044\u3044\u8A00\u8449\u306A\u3093\u3060\u308D\u3046\u003C\/p\u003E— IT\u901F\u5831 (@itsoku2ch) \u003Ca href=\"https:\/\/twitter.com\/itsoku2ch\/statuses\/438183889027084288\"\u003EFebruary 25, 2014\u003C\/a\u003E\u003C\/blockquote\u003E\n\u003Cscript async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"\u003E\u003C\/script\u003E","width":550}

汚いから綺麗に整形する


{
	"cache_age": "3153600000",
	"url": "https://twitter.com/itsoku2ch/statuses/438183889027084288",
	"height": null,
	"provider_url": "https://twitter.com",
	"provider_name": "Twitter",
	"author_name": "IT速報",
	"version": "1.0",
	"author_url": "https://twitter.com/itsoku2ch",
	"type": "rich",
	"html": "\u003Cblockquote class=\"twitter-tweet\"\u003E\u003Cp\u003E”Stay hungry, Stay foolish.”
なんていい言葉なんだろう\u003C/p\u003E— IT速報 (@itsoku2ch) \u003Ca href=\"https://twitter.com/itsoku2ch/statuses/438183889027084288\"\u003EFebruary 25, 2014\u003C/a\u003E\u003C/blockquote\u003E\n\u003Cscript async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"\u003E\u003C/script\u003E",
	"width": 550
}

たいした情報が入ってないjsonですが、頑張る!このjsonをJavaで取ってこなきゃいけない。HTTP通信を行わないといけないのでHttpURLConnectionを使うことに。ここらは本題じゃないので割愛。詳しくはこのあたりを参考に
HttpURLConnectionを使用してHTTP通信を行う

とりあえず書いてみた。余談ですがプログラミングでは先人がブログに貴重な情報を残しているのが常です。今回はここを参考にしました。
http://d.hatena.ne.jp/seinzumtode/20130426/1366934641


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Itsokuhou{
	public static void main(String args[]){ 
		HttpURLConnection con = null;
		StringBuilder builder = new StringBuilder();
		try {
			URL url = new URL("https://api.twitter.com/1/statuses/oembed.json?id=438183889027084288");
			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());
	}
}

やっとこさ本番。jsonを扱うためにライブラリを利用したいところ。別に何を使ってもいいのですが、今回は「google-gson」を使ってみることに(´・ω・`)
https://code.google.com/p/google-gson/

超大雑把に説明すると「Gson gson = new Gson();」でオブジェクトを作成してfromJsonを使えばよさげ。まずはクラスを用意


public class TwitterJson {
	String cache_age;
	String url;
	String height;
	String provider_url;
	String provider_name;
	String author_name;
	String version;
	String author_url;
	String type;
	String html;
}

ここからは超簡単。ライブラリって本当に便利ですよね☆彡オブジェクトを作って、中身を呼び出してあげるだけ。セッターゲッター無しでおk。たとえば下記のように書くとユーザー名と該当ツイートのURLが表示されます


Gson gson = new Gson();
TwitterJson twj = gson.fromJson(builder.toString(),TwitterJson.class);
System.out.println("名前とうらるを表示");
System.out.println(twj.author_name);//ユーザー名
System.out.println(twj.url);//ツイートのうらる

結果
twgson

これじゃよくわからない。htmlに入ってるものを取ると


<blockquote class="twitter-tweet"><p>”Stay hungry, Stay foolish.”&#10;なんていい言葉なんだろう</p>&mdash; IT速報 (@itsoku2ch) <a href="https://twitter.com/itsoku2ch/statuses/438183889027084288">February 25, 2014</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

うーーん。ただの埋め込みコードだ(´;ω;`)

てな感じで終わりです。ツイートのjsonに使い道があるのかは疑問ですが、他のjsonでも同じように取得できるのでお試しあれ。今回どうしてgoogle-gsonを使ったかというと、使ったことがなかったからです。せっかくなら自分の勉強にもなったほうがいいなぁと。デシリアライズだけで言えばgoogle-gsonはイケてると思う。シリアライズは微妙。Jacksonのがいいかなぁ

VIPやなんJが転載禁止になり、IT速報は路頭に迷っています(´;ω;`)今回の内容が簡単すぎるとか、難しすぎるとか、長くてくどいとか、省きすぎてるとか、他の言語がいいとか意見があればコメントにでも書いていただけると有難いです。今後も深夜の時間帯は様々な内容を取り入れながら試行錯誤する予定ですので、よろしくお願いします。

元スレ:http://toro.2ch.net/test/read.cgi/tech/1337692704/