ニコニコapiで、Javaからコメント鯖にソケット接続できない。【バイトデータだけ受け取れた編】

だいぶ前に投稿した、 ニコニコapiで、Javaからコメント鯖にソケット接続できない。に、検索で辿り着いている方がそこそこいらっしゃるので、とりあえずバイトデータだけ受信で来たソースを貼っておきます。


private String[] connectCommentServer(String address,int port,String thread) {

 try {
 Socket connectSocket = new Socket(address,port);
 //InetSocketAddress socketAddress = new InetSocketAddress(address, port);
 //connectSocket.connect(socketAddress, timeoutSocket);
 System.out.println("接続しました" + connectSocket.getRemoteSocketAddress());

 // 出力ストリームを取得
 PrintWriter out = new PrintWriter(connectSocket.getOutputStream(), true);
 out.println("<thread thread=\"" + thread + "\" version=\"20061206\" res_from=\"-1\" />\0");
 // 入力ストリームを取得
 InputStreamReader ipr = new InputStreamReader(connectSocket.getInputStream());
 BufferedReader in = new BufferedReader(ipr);

 int line;
 String xmlData = "";
 while(0 != (line = in.read())) {
 in.read();
 xmlData += line;
 System.out.println(line);
 }

 // 入出力ストリームを閉じる
 out.close();
 in.close();
 // ソケットを閉じる
 connectSocket.close();

 } catch (IOException e) {
 e.printStackTrace();
 }
 return null;
 }

自分はバイトデータが一体何なのか、というところから勉強する必要があるので、これ以上のソースは貼れません・・・;;


iGoogle晒し

iGoogleって知ってます?
2年くらい前から自社のアドセンス広告でも宣伝してるみたいですが、使ってる人多いのかな?

iGoogleというのは、”自分自身のスタートページ”を作ることができるサービスです。
簡単にいえば、“MyYahoo!のGoogle版”です。
僕はこれを使い始めてから、ガラッと情報収集のスタイルが良い方向へ変わりました。

まず、読みたい新聞社のニュース記事のヘッドラインが並べられる。
ヤフーをスタートページにしていた頃と同じ感覚で、ニュースを漁れます。

次に、RSSリーダーにアクセスしなくても、新着記事のヘッドラインを見ることができる。
RSSリーダーはそもそも使ったこと無いんですが、なにせスタートページに並べられるのは最高。

僕は使ってないんですが、Gmailの新着情報なんかもおけますし、Yahoo!⇒Googleへとシフトしている方は是非使うべきです。
確認すべき情報のすべてが、スタートページに集められ、1クリックまたは2クリックで情報収集ができるようになります。

あと最近、タブの便利さに気が付きました。
これがあると、情報収集の優先順位が付けられるんですよね。
時間が無い時は1枚目のタブのみ、暇なときは2枚目も、とか。

ということで、一つの例として僕のiGoogleを晒してみます。

1枚目


2枚目

そういえば、Googleは遂に電話事業にも手を出したみたいですね。
って、気づくの遅いか。GMailから使えるようになってやっと気付きました。

IMGタグに閉じタグ付けてるのにW3Cでエラーが出るって方

閉じタグの無いHTMLタグは、その開始タグの末尾にスペーススラッシュを付けると良いとか聞いてわざわざ付けたのに、
W3Cのチェックで “NET-enabling start-tag requires SHORTTAG YES” とエラーが出てしまうって方。

エラー文によると、この書き方はXHTMLの書き方みたいですね。
よって、DocutypeではHTML4.01ではなくXTML1.0を指定する必要があります。
詳しくは⇒HTML to XHTML « WordPress Codex:

今日使ったubuntuコマンド

どうしても root権限で作業がしたかったので、Linuxの醍醐味?と言われるコマンド操作をしてみた。

sudo su – : ルート権限に乗り換える。
mv [元フォルダ] [移動先フォルダ] : フォルダまるまる移動。
rm -r [フォルダ] : フォルダまるまる削除。(ファイルの場合は -r オプションはなし。)

JFrameを任意のボタンで閉じる

SwingのクラスであるJFrameは、リファレンスをよく見ると クラス java.awt.Window から メソッド dispose() が継承されてます。

JavaでHTMLのFieldSetタグみたいなことをする

日本語の情報が全くなかったのでここで紹介しておきます。

設定画面なんかで主にWINDOWS向きのデスクトップアプリケーションを組んでるとやりたくなることです。

JavaのSwingコンポーネントの中に、TitledBorderというクラスがあります。

これで実現できました。
リファレンスはこちら。javax.swing.border.TitledBorder

情報源: http://www.tek-tips.com/viewthread.cfm?qid=973106&page=117

ニコニコapiで、Javaからコメント鯖にソケット接続できない。

誰か続きやってください。


private String[] connectCommentServer(String address,int port,String thread) {

 try {
 Socket connectSocket = new Socket(address,port);
 //InetSocketAddress socketAddress = new InetSocketAddress(address, port);
 //connectSocket.connect(socketAddress, timeoutSocket);
 System.out.println("接続しました" + connectSocket.getRemoteSocketAddress());

 // 出力ストリームを取得
 PrintWriter out = new PrintWriter(connectSocket.getOutputStream(), true);
 // 入力ストリームを取得
 BufferedReader in = new BufferedReader(new InputStreamReader(connectSocket.getInputStream()));

 out.println("<thread thread=\"" + thread + "\" version=\"20061206\" res_from=\"-1\" />");

 String line;
 String xmlData = "";

 while(null != (line = in.readLine())) {
 System.out.println(in.readLine());
 xmlData += line;
 }

 // 入出力ストリームを閉じる
 out.close();
 in.close();
 // ソケットを閉じる
 connectSocket.close();

 } catch (IOException e) {
 e.printStackTrace();
 }
 return null;
 }

バイトデータだけ受け取れた編 でとりあえずソース公開しました。

Vistaで焼いたUDF形式のCD-RをXPで読み取る

先日、ある人から画像の入ったCD-Rをもらったのだが、それはどうやらVistaで焼いたものらしくXPでは読み取ることができなかった。

原因は、そのディスクがパケットライトと呼ばれる方式で焼かれていて、ファイルシステムがUDF2.01であったこと。
XPはいくつかのUDF形式のCD-Rをサポートしているようだが、少しでもバージョンが違うと読めないものがあるよう。

そこで・・・

解決策

  1. RoxioUDF リーダー を入れてみる

    これが一般的に取られる手段のようです。
    僕の場合は、これを入れても見ることができませんでした。

    ダウンロード : RoxioUDF リーダー

  2. VOB InstantReadを入れてみる

    前者が無効だったので、これを入れてみたところ無事に読み取ることができました。

    ダウンロード : VOB InstantRead
    (このソフトは現在は公式サイトで配布されておらず、このダウンロードリンクは公式リンクではありません。)

Vistaは互換性に劣るという噂を出た当初から聞いていましたが、こんなところで痛い目に遭うとは思いませんでした。

感謝 : Travellers Tales UDF Volume の中身をコピーする (Windows編)

Java ニコニコAPIで認証 POST

JavaでPOSTをニコニコに送信するときは、演算子を & にしませう。。。 ;;


final String USER_AGENT = "Niconico Checker";
 final String auth_URL = "https://secure.nicovideo.jp/secure/login?site=nicolive_antenna";

 private int loginApp(String mail,int pass){
 PrintStream ps    = null;
 BufferedReader br = null;
 URL loginURL;

 try {
 loginURL = new URL(auth_URL);
 URLConnection con = loginURL.openConnection();
 con.setDoOutput(true);
 //con.setRequestProperty("User-Agent", USER_AGENT);

 // 送信する
 OutputStream os = con.getOutputStream();
 ps = new PrintStream(os);
 ps.print("mail=" + mail + "&" + "password=" + pass + "");

 // 受信する
 InputStreamReader    ir1 = new InputStreamReader(con.getInputStream());
 BufferedReader    br1 = new BufferedReader(ir1);

 String line;
 while((line=br1.readLine()) != null) {
 System.out.println(line);
 }

 br1.close();
 ir1.close();

 } catch (MalformedURLException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 } finally {
 if (null != ps) {
 ps.close();
 }
 if (null != br) {
 try {
 br.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }

 }

 return 0;
 }

Javaで正規表現を使ってURLをチェック

めんどくさいのでクラスにした簡単なのがありました。

public static void main(String[] args) {
String regex = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
System.out.println(IsMatch(url,regex));
}
private static boolean IsMatch(String s, String pattern) {
 try {
 Pattern patt = Pattern.compile(pattern);
 Matcher matcher = patt.matcher(s);
 return matcher.matches();
 } catch (RuntimeException e) {
 return false;
 }
 }