英語辞書
あけたらしめる!!
という癖をつけよーと思い、
closeを追加しました。
あと、取得した過去エントリーの解析をしました。
はてなダイアリーAtomPubとは - はてなキーワードを参照すると
こんな感じで返ってきます↓↓
<?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom"> <id>tag:d.hatena.ne.jp,2008:diary-{はてなID}-{date}-{entry_id}</id> <link rel="edit" href="http://d.hatena.ne.jp/{はてなID}/atom/blog/{date}/{entry_id}"/> <link rel="alternate" type="text/html" href="http://d.hatena.ne.jp/{はてなID}/{date}/{entry_id}"/> <author> <name>はてなID</name> </author> <title>日記エントリータイトル</title> <updated>2008-01-01T00:00:00+09:00</updated> <published>2008-01-01T00:00:00+09:00</published> <app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-01T00:00:00+09:00</app:edited> <content type="text/html"> <div class="section"> <p>日記エントリー本文</p> <ul> <li> はてな</li> <li> 記法</li> </ul> <p> </p> </div> </content> <hatena:syntax xmlns:hatena="http://www.hatena.ne.jp/info/xmlns#"> 日記エントリー本文 - はてな - 記法</hatena:syntax> </entry>
欲しいのは
日記エントリー本文
- はてな
- 記法
の部分
タイトルは変えないし、べつにいいかなー
またまた力技で取り出しました
美しくないです
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class DiaryGetter { public static void main(String args[]) throws IOException { String certification = WSSE.getWsseHeaderValue("syoko_sasaki", "ぱすわーど"); URL url = new URL( "http://d.hatena.ne.jp/syoko_sasaki/atom/blog/20090617/1245222305"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.addRequestProperty("X-WSSE", certification); InputStream input = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8")); String res = ""; String line; while ((line = reader.readLine()) != null) { res += line; } input.close(); reader.close(); String mainText = res .split("<hatena:syntax xmlns:hatena=\"http://www.hatena.ne.jp/info/xmlns#\">")[1] .split("</hatena:syntax>")[0]; System.out.println(mainText); } }
とりあえず取り出すことはできたので、明日はwicketを使って投稿フォームを作ろうっと!
余裕があったら投稿部分までつくりたいなぁ
英語辞書
仕様書が一段落したのでブログ充
t_43zさんからコメントをいただき
Yamashiroさんに説明してもらい
さっきのコードのリファクタリングをしてもらいました!
どうもありがとうございます!
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class DiaryGetter { public static void main(String args[]) { BufferedReader reader = null; try { String certification = WSSE.getWsseHeaderValue("syoko_sasaki", "ぱすわーど"); URL url = new URL( "http://d.hatena.ne.jp/syoko_sasaki/atom/blog/20090617/1245222305"); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.addRequestProperty("X-WSSE", certification); reader = new BufferedReader(new InputStreamReader(connection .getInputStream(), "utf-8")); String res = ""; String line; while ((line = reader.readLine()) != null) { res += line; } String mainText = res .split("<hatena:syntax xmlns:hatena=\"http://www.hatena.ne.jp/info/xmlns#\">")[1] .split("</hatena:syntax>")[0]; System.out.println(mainText); } catch (Exception e) { // なんしか復帰処理 } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // どうしようもないので無視 } } } } }
finally節は例外がcatchされようとされまいと関係なく
絶対に行われる処理を書く
例外が発生されると以後の処理は行われないまま、つまり
try節でreader.close();を書いても、その前で例外が発生されたら
実行されない
だからclose系はfinallyに書く!
でもでも
} finally {
reader.close();
}
って直接書くと、もしなにか例外が発生してreaderがnullのとき、ぬるぽになってしまう
nullなものnullで、閉じられないので
} finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // どうしようもないので無視 } } }
でreader != nullの条件をつけてあげます
nullでないのに閉じられない場合はもうどうしようもないので無視!
なんしか復帰処理の部分は、例えば指定したURLや文字コードが
間違っていた場合の処理などを書くのだけど、省略します
今まであけたらしめるはおろか、finallyも使ったことがなかったのでとても勉強になりました
やっぱりブログは毎日書きたいなー