ダウンローダー

W-ZERO3[es]用のダウンローダーを探してみたけど、Googleの単純な検索では見つからなかった。
そこで、自分で作ろうと思ったのだけど、高速化サービスを利用している場合、そのままダウンロードすると画像の画質が劣化するんじゃないかと思ってPHPにした。というか、ほとんどSite Collectorのソースを流用したもの。ブックマークレットから利用すれば、多少は使えるのか。
セキュリティは考慮していないので、使用する場合は注意。

download.php

<?
define("SAVE_DIR",	"./data");
define("WGET_CMD",	"/usr/local/bin/wget");
define("RM_CMD",	"/bin/rm");
define("ZIP_CMD",	"/usr/local/bin/zip");

if( isset($_GET[url]) ){
	$src = urldecode($_GET[url]);
	$level = 1;
	if( isset($_GET[level]) ){
		$level = $_GET[level] - 0;
	}
	if( ereg("^http://", $src) ){
		wget( $src, $level );
		header("Location: ".zip($src));
		deldir( $src );
	}
}

function wget( $url, $level ){
	$domain = parse_url($url);
	$domain2 = parse_url(ereg_replace("~","%7E",$url));
	$dir = SAVE_DIR."/".$domain2[host]."/".$domain2[path];
	
	mkdir( SAVE_DIR."/".$domain2[host], 0755 );
	mkdir( SAVE_DIR."/".$domain2[host]."/".$domain2[path], 0755 );
	
	//$cmd = "cd ".$dir.";";
	$cmd = WGET_CMD." -r -l ".$level." -k -np -q -t 3 -a wget.log -nd -D".$domain[host]." -P ".$dir." ".$url;
	//$cmd .= "cd -;";
	exec($cmd, $ret, $retCode);
	
	return $ret;
}

function zip( $url ){
	$domain = parse_url($url);
	$dir = SAVE_DIR."/".$domain[host]."/".$domain[path];
	$dir = realpath(ereg_replace("~","%7E",$dir));
	if( !is_dir($dir) ){
		$dir = dirname($dir);
	}
	$file = ereg_replace("%7E","~",basename($dir));
	$dir = toRelative("./data",$dir);
	
	exec(RM_CMD." ".SAVE_DIR."/*.zip", $ret, $retCode);
	exec("cd ".SAVE_DIR.";".ZIP_CMD." -9 -r ".$file.".zip ".$dir.";cd -;", $ret, $retCode);
	if( $ret ){
		return SAVE_DIR."/".$file.".zip";
	}
	return "";
}

function deldir( $url ){
	$domain = parse_url($url);
	$dir = SAVE_DIR."/".$domain[host]."/".$domain[path];
	$dir = realpath(ereg_replace("~","%7E",$dir));
	if( !is_dir($dir) ){
		$dir = dirname($dir);
	}
	exec(RM_CMD." -rf ".$dir, $ret, $retCode);
	return $ret;
}

function toRelative( $base, $target ){
	if( is_file($base) ){
		$base = dirname($base);
	}
	$aryB = split( "/", realpath($base) );
	$aryT = split( "/", realpath($target) );

	while( $aryB[0] == $aryT[0] ){
		array_shift( $aryB  );
		array_shift( $aryT );
	}

	$path = "";
	while (list($key, $val) = each($aryB)) {
		$path .= "../";
	}
	if( strlen($path) == 0 ){
		$path = "./";
	}
	$path .= join("/",$aryT);

	return $path;
}
?>

設置方法

サーバにdownload.phpをアップロードし、同じディレクトリにSAVE_DIRの値(data)ディレクトリを作成するか、値を変更するだけ。

使用方法

「http://設置サーバ/download.php?url=ダウンロードページ」にアクセスすると、指定ページを圧縮したzipファイルのダウンロードが実行されます。

クエリ

url

ダウンロード対象のページ

level

リンクを辿る階層数。デフォルトは1。デフォルト値では、指定のページとそのページからリンクされているページ、画像、スクリプトをダウンロードします。

ブックマークレットの作成

Site Collectorにある「URLをクエリとする任意サイトへのブックマークレット」がそのまま使えます。