Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

リンク先を取得する。階層を指定して。

昨日でとあるURLを指定して、

そのURLの発リンクを取得するのはできた。

 

1 今日は上記で取得した発リンクのリンク先から、

さらに発リンクを取得したい。

できた。

実験台「http://www.linksyu.com/p25.htm」に対して、

そのページの発リンク数は20個だった。

 

その各発リンクから発リンクを拾ったら、

264個取得できた。


 

2 それをどれだけの階層掘るか指定して、

好きなだけどんどん発リンクを追えるようにしたい。

期限切れドメインの取得可否って何でチェックできるのかな?

URLにリクエストを送って、

HTTPステータス・コードで判別するんじゃないのかな~?

 

HTTPステータス・コードを取得しWebページの存在を確認するには?[C#、VB] − @IT

 

まずは実際に期限切れドメインを見つけて、

それにリクエスト送ってみて、

どんなレスポンスが返ってくるか調査だね。

 

調査1 ヤフー

ヤフーにリクエスト送ったら何が返ってくるか。

[HTTP/1.1 200 OK, nginx, Sat, 10 Jan 2015 14:54:59 GMT, text/html; charset=UTF-8, chunked, close, policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV", private, no-cache, no-store, must-revalidate, -1, no-cache, https://open.login.yahooapis.jp/openid20/www.yahoo.co.jp/xrds, Accept-Encoding, SAMEORIGIN, null, null, null]

 

 

調査2 適当文字列ドメイン

適当文字列ドメインは取得可能なはず。

それが返ってくるのが取得可能なドメインステータスコードだよね。

 

とりあえず「http://aoerignalekjlnkjvas.com」としてみた。

しばらく応答がありませんね。

 

ってことは、ステータスは返ってこないですね。

返ってくるわけないねんから。

それをこっちが勝手になんかに変換してんのかもね。

 

そしてなんと、

「理由はjava.net.UnknownHostException: aoerignalekjlnkjvas.com」

ということでExceptionが投げられてしまった。

 

Exception投げる前に、応答期限となる時間を設定せなあかんのやろな。

3秒すぎたらHOSTなしと判定せよ的な。

 

今、リクエストにはHttpURLConnectionクラスを使っている。

HttpURLConnection (Java Platform SE 6)

見つけた。

多分これ「setConnectTimeout」メソッド

クラス java.net.URLConnection から継承されたメソッドらしい。

 

connection.setConnectTimeout(3000);

としてやってみよう。

 

結果。

設定したはいいけど、3000ミリ秒(3秒)超えると、

同じUnknownHostExceptionを投げるようだ。

 

キャッチしたらなあかんの?

APIには接続が確立される前にタイムアウトが過ぎた場合は、java.net.SocketTimeoutException が発行されます。

って書いてるけど。

 

よくみたら、

requestUrl.openConnection()

↑この結果が既にnullになっている。

こいつからステータスを取り出せないものか?

 

でも逆にUnknownHostExceptionが投げられた=取得可能ドメイン

ってことになるよね。

ホストの IP アドレスが判定できなかった場合にスローされます。

なるほど。

 

IP アドレスに変換する前にNGになってるパターンなんや。

これも取得可能ドメインの1つのパターンだよね。

 

でも中古ドメインなんかは、

IP アドレスに変換した後でNGになるんちゃうかな。

そっちのパターンも調べたいね。

 

※ちょっと役立ちそうな記事発見。

Android の java.net.HttpURLConnection - たていすのメモ

SAStrutsプロジェクトで確かにJARはあるのにjava.lang.NoClassDefFoundError

SAStrutsプロジェクトで確かにJARはあるのにjava.lang.NoClassDefFoundErrorが出て、

困ってしまいました。

 

何度ビルドし直してもダメ。

コンパイルエラーも出ていない。

 

原因はJARの置き場所でした。

WEB-INF下に置かないといけないみたいです。

それで解決できました。

 

適当な場所において、「外部JAR」の追加や「JARの追加」

で追加しても、一見追加できたように見えてもNoClassDefFoundError。

 

ちゃんとWEB-INF下に置いてあげて下さい。

 

開発はやってないと忘れてしまいますね。

SEになって出世しても、自分でプログラミングできる人になります。

JSZipでZIPの中身のファイル名を日本語にできない。

JSZipでZIPの中身のファイル名を日本語にできない。

どうすればいいのだろうか。

 

回避策としては、

ファイル名、別に日本語にせんでええやん。

って話です。

 

数字かローマ字かでやってもらおう。

仕事現場ではさ、要求全部飲み込んでたら、

いくら工数あっても足りないです。

 

だから折れてもらうこともあります。

それと同じで、別にファイル名日本語じゃなくてええやん。

 

という挫折でした^^

JSZipはfunction fileではなくfunction add を使うべし。

・なぜか

zip.file()

を呼ぶとエラーになる。

なぜ?

 

・zip.file(i + ".txt", "aiueo");

にしてみた。

でもやっぱり動いていない。

第2引数が悪いわけじゃないみたい。

 

・そもそもファイルをインポートできてないのか?

いや、var zip = new JSZip();のとこは動いている。

とりあえずデバッグしてみる。

デバッグしても分からなかった。

 

JSZip


ここのサンプルは動いているから、

ブラウザが対応してないとも思えへんし・・・。

 

・zip.file()関数がないようだ。

インポート不足なのかもしれない。

 

・どう見てもjszip.jsにfile関数がなかった。

よく見たらusage(使用例)のところに、

jszipをnewした後、file関数ではなく、

add関数を使っている。

 

add関数を使うようにしたら動いた。

できてるか分からないけど。

 

JavaScriptでできることを、いちいちJavaではしたくないよね。

Strtusになれてくると、

ちょっとしたアプリでもJavaで書こうとしてしまいます。

 

でもちょっとまった。

JavaScriptでできることなら、

絶対にJavaは使いたくないよね。

 

今、ファイルを読み込んで、

別のファイルの内容で置換するっていうアプリ作ろうとしています。

 

HTML5なるものがFile APIっていうのを実装していて、

それを使えばいろいろできそうなことが分かってきました。

 

ちょっとやってみます。

参考にしたのはこれ↓


HTML5のFile APIでローカルファイル情報取得してやんよ!!! | ときどきWEB