PHP+Linuxで指定URLのWhoisを取得するためのスクリプトです。

手順としては、

① 指定URLのホスト部分だけ抜き出し
② Linuxのwhoisコマンドを使ってwhois情報取得
③ 取得できなかった場合、ホストをいじって再取得
④ 繰り返し

です。

実際に書きます。
相変わらず適当なので、コンパイルエラーとか出たらすみませんw

<?php

// whoisを取りたいURL
$url = "http://example.com/dir/";

// ホスト部抜き出し
$host = split_host($url);

// ホストを「.」できっておく
$sep = split("\.", $host);

for($i=0; $i<count($sep); $i++){
// LinuxコマンドにてWhois取得
$whois = shell_exec("whois " . $host);

// 「No match!!」が含まれてたら取得失敗
$flag = strstr($whois, "No match!!");

if($flag){
// ホストを前から順番に1オクテットずつ消していく
$host = str_replace($sep[$i] . ".", "", $host);
}else{
// ループ終了
break;
}
}

// 出力
echo $whois;

/**
* URLからホスト部を抜き出す
*/
function split_host($url){
$host = "";

$pattern = '/(http|https):\/\/([-._a-z\d]+)/';

if(preg_match($pattern, $url, $matche)){
$host = $matche[2];
}

return $host;
}
?>

こんな感じですね。

全くエラー処理とかしてないので、
split_host()のトコでhostが見つからなかったりしたら
処理止めたりしてください。


よくある記事ですが、

①PHPを使ってWEBサイトのキャプチャ取得
 ↓
②DB保存
 ↓
③表示

の一連の方法を書きます。


①PHPでキャプチャ取得

WEBブラウザなんかで表示されたページを、
プログラム使ってダイナミックに表示したい
みたいな話しってよくあると思います。

でもframe使いたくなくて、キャプチャ取って
サムネイルで表示したい。。。

という方は、下記APIがオススメです。

「websnapr」
http://www.websnapr.com/

ここで提供されているAPIに、キャプチャを取りたいURLを投げると、
数秒後にサムネイルとして返してくれるというなんとも便利なAPIです。

まあPHPと書いてはみたものの、
全然PHPじゃなくても大丈夫みたいなw

使い方は非常に簡単。

まずサイト上で無料で取得できるdeveloper keyを取得。
そして、下記のようにリクエストを投げてやれば終了です。

<?php

$key = "取得したデベロッパーKEY";
$url = "http://example.com/";

$imgdata = file_get_contents("http://images.websnapr.com/?key=" . $key . "&url=" . $url);

?>

②DB保存

まずはMySQLでバイナリデータを保存できるカラムを作りましょう。
ここではmidiumblobで十分でしょう。

create table tb_thumb(
capture midiumblob
);

そして、先ほど取得した画像データを保存します。

<?php

$key = "取得したデベロッパーKEY";
$url = "http://example.com/";

$imgdata = file_get_contents("http://images.websnapr.com/?key=" . $key . "&url=" . $url);

$query = "insert into tb_thumb (capture) values ('" . addslashes($imgdata) . "')";
mysql_query($query);

?>
※1 本来はmysql_real_escape_stringを使うべきなのでしょうが、
何故かうまく行かない場合があり。。。
※2 DB接続部は省略してます。(mysql_connect)

これでDBへの格納は完了です!


③表示

で、表示です。
今回は非常に簡単なサンプルを。。。


<?php

$sql = "select capture from tb_thumb limit 1";
$result = mysql_query($sql);
while($rs = mysql_fetch_assoc($result)){
$imgdata = $rs['capture'];
}

$size = filesize($imgdata);
header("Content-Length: " . $size);
header("Content-type: image/jpeg");

echo $imgdata;

?>
※DB接続部は省略してあります。(mysql_connect)

このPHPをブラウザから実行してあげれば、
②で格納した画像データがページに表示されます。

簡単ですね。

※ここに書いてあるサンプルソースは適当に書いたので、
動作保証無しです。
何か疑問ある方は、コメント欄にお願いいたします。
一応、アメブロを再開したきっかけとして、
iPhoneアプリを購入したタイミングで
Amebaのアプリがリリースされたというのがあります。

2010年になってから何かと世間を騒がしている
Amebaブログ事業ですが、
このiPhoneアプリもなかなかのもので。

とりあえずダウンロード初日に大ハマリしたのが、
記事を送信中に通信が途切れたパターン。

再送を試みるものの、何故か再送が成功せず、
何度やっても再送できないうえ、

未送信ブログの取り消しが出来ない仕様になっていて
延々とアラートが出る状態。

じゃあ次のブログを試しに書いてみよう!

と思って書いてみて送信してみると、
ちょっと時間をかけて送信成功。

で、ブログを見てみると。。。

なんと記事が10件ぐらいアップされている。
そのうち、1件を除いて1つ前に書いた記事になっていました。

つまり、未送信記事をリトライした分が、
ここにきてリトライした回数だけアップされたという
わけのわからない出来事が起こったんです。

Amebaの技術者は前々からレベルが低いなーと思っていたのですが、
それを裏付けるかのようなアプリでしたとさ。