動画データを取得する その2

Javaニコニコ動画をゴニョゴニョする計画 第1.7弾。
前回のバケラッタ状態をなおした。

前回は文字コードそんなの関係ねぇ!!な状態で出力していた粗悪仕様*1から、
きちんとエンコードして正しく出力されるように修正。

というわけで早速ソース晒し

HttpConnect.java

package nicoAPIRapper;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpConnect {

  public void getVideoInfo(String videoId){
    //URL
    StringBuilder urlStrBuilder = 
       new StringBuilder("http://www.nicovideo.jp/api/getthumbinfo/").append(videoId);
    String urlStr = urlStrBuilder.toString();
    try{
      URL url = new URL(urlStr);

      System.out.println("URL: " + urlStr);

      HttpURLConnection http = (HttpURLConnection)url.openConnection();

      // GETで繋ぐ
      http.setRequestMethod("GET");

      // 接続
      http.connect();
      
      //エンコード
      InputStreamReader isr = new InputStreamReader(http.getInputStream(),"UTF-8");
      // コンテンツの取得と表示
      int data;
      while ( (data = isr.read()) != -1 ){
        System.out.print((char)data);
      }
      
      // 応答コード
      System.out.println("");
      System.out.println("【レスポンスコード】 " + http.getResponseCode()
          + " " + http.getResponseMessage() );


    }catch( IOException e ){
      e.getStackTrace();
    }
  }
}

前回からの修正点はデータをInputStreamで取得したものをBufferedInputStreamでラップして
いたものを、今回はInputStreamReaderでラップした。
InputStreamReaderはコンストラクタを複数持っていてその中で文字コードUTF-8)を指定。

というわけで出力結果。

URL: http://www.nicovideo.jp/api/getthumbinfo/sm4005866
<?xml version="1.0" encoding="UTF-8"?>
<nicovideo_thumb_response status="ok">
<thumb>
<video_id>sm4005866</video_id>
<title>【MAD】時をかける少女 ガーネット【H.264】</title>
<description>以前UPしていたMADをH.264でエンコードし、MAD自体も微調整をして再UPしてみました! H.264エンコは初めてなので、試行錯誤の結果、できるかぎり高画質にUPしたつもりです(^^;</description>
<thumbnail_url>http://tn-skr1.smilevideo.jp/smile?i=4005866</thumbnail_url>
<first_retrieve>2008-07-19T09:54:07+09:00</first_retrieve>
<length>5:22</length>
<view_counter>89819</view_counter>
<comment_num>8685</comment_num>
<mylist_counter>4520</mylist_counter>
<last_res_body>字幕カオスwwww 泣いた FF9かと思って 赤字つまんね いいなあ 字幕はみんな死ねばい </last_res_body>
<watch_url>http://www.nicovideo.jp/watch/sm4005866</watch_url>
<thumb_type>video</thumb_type>
<tags>
<tag>アニメ</tag>
<tag>時をかける少女</tag>
<tag>ガーネット</tag>
<tag>跨越時空的中年</tag>
<tag>AMV</tag>
<tag>The_Girl_Who_Leapt_Through_Time</tag>
<tag>Time_waits_for_no_one</tag>
<tag>sm3723821</tag>
<tag>←(゚Д゚)ハァ?</tag>
<tag>細田守</tag>
<tag>感受性のある人間なら理解できる感動モノ</tag>
<tag>←感受性無くても理解できるYO</tag>
<tag>そんなことよりウチの妹がバカでさー</tag>
<tag>奥華子</tag>
<tag>sm266921</tag>
</tags>
</thumb>
</nicovideo_thumb_response>
【レスポンスコード】 200 OK

出力結果をみてちょっと気がついたこと。
プログラムを実行したときの状態のニコ動の画面がこちら

・タグのところをみると海外タグも国内タグも一緒に表示されている模様。
 attributeでも付いていれば判別できそうだけど今のとこはそういう実装では
 ない模様。

・時間はGMTだと思っていたらJSTだった。
 じゃぁ+9:00:00はなに?と思ってしまうが無視でおkなかんじ。

TwitterみたいにAPI制限ないよね?よね?
 ガンガンリクエスト投げてるけどBANされないよね?よね?
 プレミアとか関係あるのかな?かな?
 でもログインしてないからどうなんだろう?

とりあえずXMLが取れるとこまでいったので後はパースする処理をつくる。

そんなかんじでーす

*1:神奈川痛車業界重鎮 takky社長にマフラー取付けを頼むとマフラーが落ちるというそんな粗悪な状態