April 2015

ニコニコ生放送のコメントをJavaで取得

昔ニコニコ生放送のコメントを取得してごにょごにょするプログラムをJavaで書いてた時は、NicoAPIWrapperというのを使わせてもらってたのですが、久しぶりに昔書いたプログラムを使おうと思っても、ニコニコ生放送のログイン仕様などが変わったせいか、動きませんでした。

なんかないかなぁ、と探してみたのですがそのまま動くものがありませんでした。残念。
ブラウザのコンソールでニコ生側とブラウザとのやりとりを眺めてみると、どうやらログイン時のパラメータの渡し方などが違うようです。
これだけだったら簡単に直せそうなので、やってみましょう。

元のコードとして、今回は、
ニコ★リブというプロジェクトの中の、Nico-Lib-Java-Hal というのを使ってみることにしました。(Nico-Lib-Java-Talisker@ZQNというのでも、改良すればいけました)

ここからNico-Lib-Java-Halをダウンロード:
http://sourceforge.jp/projects/nicolib/scm/svn/tree/head/Java/

変更するのは、nicolib.api.Common.java だけで良さそうです。
loginメソッドの中のプログラムを、下記のように変えます。



// オリジナル
//String param = String.format("mail=%s&password=%s&next_url=", mail,password);

// takuroが直した
String
param = String.format("mail_tel=%s&password=%s&next_url=", mail,password);

/**
* オリジナル
* HttpURLConnection http = null;
* try {
*
* http = Http.postConnection(LOGINPAGE_URL, param, null); String
* cookies = http.getHeaderField("Set-Cookie"); String userSession =
* NicoText.getUserSession(cookies); if(userSession != null){
* Http.setUserSession(userSession); return true; }
**/

// ここからtakuroがなおした
HttpsURLConnection
http = null;
try {

http = (HttpsURLConnection) Http.postConnection(LOGINPAGE_URL,
param, null);

String
userSession = "";

Map headers = http.getHeaderFields();
Iterator it = headers.keySet().iterator();
while (it.hasNext()) {
String
key = (String) it.next();
System.
out.println(key + ":" + headers.get(key));
if (key != null && key.equals("Set-Cookie")) {
userSession = headers.get(key).toString();
}
}
userSession = NicoText.getUserSession(userSession);
System.
out.println("ユーザセッションをゲットなう" + userSession);

// ここまでtakuroがなおした。あとはそのまま・・



たぶんこれで動くと思います。(私の環境では動きました)