ログインしたセッションを維持して、
「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);
-
レスポンスボディ部取得
// レスポンスボディ部を取得する。 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();
GET通信のため、リクエストボディ部の設定は不要です。
レスポンスヘッダ部の取得は不要です。