【ニコニコ動画】動画情報取得

ログインしたセッションを維持して、
「http://flapi.nicovideo.jp/api/getflv/sm12345678」にGET通信し、
以下の動画情報を取得します。

  • 動画サーバURL
    APIのレスポンスボディ部のうち、
    「url=http%3A%2F%2Fsmile-pow64.nicovideo.jp%2Fsmile%3Fm%3D11111111.11111」を取得します。
    URLデコードしておく必要があります。
    「http://smile-pow64.nicovideo.jp/smile?m=11111111.11111」となります。
  • 動画拡張子
    動画サーバURLのパラメータから判断します。
    パラメータが「m」の場合、動画拡張子が「.mp4」、
    パラメータが「s」の場合、動画拡張子が「.swf」、
    パラメータが上記以外の場合、動画拡張子が「.flv」になります。
  • コメントサーバURL
    APIのレスポンスボディ部のうち、
    「ms=http%3A%2F%2Fnmsg.nicovideo.jp%2Fapi%2F」を取得します。
    URLデコードしておく必要があります。
  • ユーザID
    APIのレスポンスボディ部のうち、
    「user_id=11111」を取得します。
  • スレッドID
    APIのレスポンスボディ部のうち、
    「thread_id=1111111111」を取得します。
  • HTTP通信開始

    // HTTP通信を開始する。
    URL url = new URL("http://flapi.nicovideo.jp/api/getflv/sm12345678");
    HttpURLConnection http = (HttpURLConnection)url.openConnection();
    
  • リクエストヘッダ部設定

    // リクエストヘッダ部を設定する。
    http.setRequestMethod("GET");
    // セッションを設定する。
    http.setRequestProperty("Cookie", "user_session=" + userSession);
    
  • GET通信のため、リクエストボディ部の設定は不要です。

  • レスポンスボディ部取得

    // レスポンスボディ部を取得する。
    String str = null;
    String movieServer = null;
    String movieExtension = null;
    String commentServer = null;
    String userId = null;
    String threadId = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream()));
    while((str = br.readLine()) != null) {
        System.out.println(str);
        System.out.println();
    
        String[] responseBodyAry = str.split("&");
        for (String responseBody: responseBodyAry) {
            String[] elementAry = responseBody.split("=");
            if ("url".equals(elementAry[0])) {
                movieServer = URLDecoder.decode(elementAry[1], "UTF-8");
                String extensionChk = movieServer.substring(movieServer.indexOf("?")+1, movieServer.indexOf("?")+2);
                if ("m".equals(extensionChk)) {
                    movieExtension = ".mp4";
                } else if ("s".equals(extensionChk)) {
                    movieExtension = ".swf";
                } else {
                    movieExtension = ".flv";
                }
            }
            if ("ms".equals(elementAry[0])) {
                commentServer = URLDecoder.decode(elementAry[1], "UTF-8");
            }
            if ("user_id".equals(elementAry[0])) {
                userId = URLDecoder.decode(elementAry[1], "UTF-8");
            }
            if ("thread_id".equals(elementAry[0])) {
                threadId = URLDecoder.decode(elementAry[1], "UTF-8");
            }
        }
    }
    br.close();
    
  • レスポンスヘッダ部の取得は不要です。