PHPで画像まとめサイトから一括で画像をダウンロード

公開日: : 最終更新日:2011/10/02 ウェブ

画像のまとめサイトから1枚ずつ保存するのが面倒な時に一括保存できます。

exe版→Pythonでまとめサイトから画像を一括保存

「index.php」

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>image downloader</title>
<style>
body {font-family: sans-serif;}
#container {width: 580px;margin: 10px auto 0;padding: 10px 20px;}
#content {padding: 20px;border: 5px solid #f1f1f1;}
#url,#num {width: 380px;padding: 10px;border: 1px solid #ddd;}
#num {width: 30px;text-align: center;}
#url:focus,#num:focus {border-color: #bbb;}
#submit {cursor: pointer;padding: 10px;border: 1px solid #ddd;background: #f1f1f1;}
#submit:hover {background: #ddd;}
#msgBox {max-height: 200px;padding: 10px;border: 1px solid #ddd;overflow: auto;}
#msgBox ul {font-size: 14px;margin: 0;padding: 0;list-style: none;}
#msgBox ul li {word-wrap: break-word;}
.atn {color:#f00;}
</style>
</head>

<body>
<div id="container">
<div id="header">
<h1>image downloader</h1>
</div>

<div id="content">
<p>[サイトURL][連番開始番号]</p>
<form action="index.php" method="post">
<p>
<input type="text" name="url" id="url" placeholder="URLを入力">
<input type="text" name="num" id="num" placeholder="1">
<input type="submit" name="submit" id="submit" value="収集">
</p>
</form>
<?php
error_reporting(1);
if ($_POST["submit"] && !empty($_POST["url"])) {
	$url = h($_POST["url"]);
	$num = 1;
	if (is_numeric($_POST["num"])) {
		$num = h(floor($_POST["num"]));
	}
	//↓保存先
	$dir = "c:\Downloads/image_downloader/";
	$fileName = $dir."source.html";
	if (!file_exists($dir)) {
		mkdir($dir,0777);
		chmod($dir,0777);
	}
	$siteData = file_get_contents($url);
	//↓ソースコードを保存
	$sourceCode = file_put_contents($fileName, $siteData);
	//↓猶予は2分間
	set_time_limit(120);
	//↓リンク先に指定されている画像を抽出
	preg_match_all("/\<a href=\"http:\/\/[0-9a-zA-Z_\/\.\%\&\?-]+\.(jpg|png|gif)\"(\>|[0-9a-zA-Z_=\"\[\]\(\)\,\%\&\?\s-]+\>)/",$siteData,$imgUrl);
	if (!empty($imgUrl[0])) {
		print "<div id=\"msgBox\">\n<ul>\n";
		foreach ($imgUrl[0] as $val) {
			$val = preg_replace("/\<a href=\"/","",$val);
			$val = preg_replace("/\"(\>|[0-9a-zA-Z_=\"\[\]\(\)\,\%\&\?\s-]+\>)/","",$val);
			$ext = substr($val,-4);
			//↓連番で保存
			file_put_contents($dir.$num.$ext,file_get_contents($val));
			print "<li>{$val}を保存しました。</li>\n";
			$num++;
		}
		print "</ul>\n</div>\n";
	} else {
		print "<p class=\"atn\">※保存出来る画像がありません。</p>\n";
	}
}

function h($str) {
	return htmlspecialchars($str,ENT_QUOTES,"utf-8");
}
?>
</div>
<div id="footer">
<p><small>&copy; calitemono</small></p>
</div>
</div>
</body>
</html>

デフォルトでの保存先は「c:\Downloads\image_downloader\」です。

1つ目の枠にウェブページのアドレス、2つ目の枠に保存する画像の1枚目に付ける番号。
連番を26から始める場合は半角数字の26を入力、入力しなかった場合は1から。

保存する画像はimgタグではなく、aタグでリンク先に指定されているやつなのでサムネイルは保存されません。

ただし、正規表現がちゃんと書けていないので「<a href=”http://calitemono.com/img/01.jpg class=”highslide” rel=”highslide”>」のように属性が2つ以上ある場合は取得できませんが、
大抵のまとめサイトではtarget属性だけの場合がほとんどなので問題ないと思います。

使い方が分からない人はPHPが使えるサーバにUPするか、XAMPPを使えばいいんじゃないでしょうか。

というかダウンロードソフトを使えばいいよね。

関連記事

no image

2chまとめサイトのまとめサイト

公開しました。2ちゃんねる(2ch)のまとめサイトのまとめサイト | matoLin 独自ドメ

記事を読む

no image

ニコニコのオススメ動画

2010年版 【ニコニコ動画】MAFIA Part01 【ニコニコ動画】【UTAU】 Goo

記事を読む

no image

matoLinをiPhoneに対応させた

jQuery-mobileを使っただけだけど。

記事を読む

no image

WordPress4.7のREST APIで記事を取得する

記事がある前提で、サムネイルなしのリスト。 リファレンス:https://develope

記事を読む

no image

ニコニコ動画で動画が再生出来ない時の対処法

下のようなメッセージが出て再生出来ない場合は、ブラウザのキャッシュを削除すれば再生出来ます。

記事を読む

no image

WordPress用の予定表プラグイン

WordPressで予定表を表示させようと思って探していたらmy calendarというのを見つ

記事を読む

Message

メールアドレスが公開されることはありません。

no image
タイプウェル国語Rの基本常用語ノーミス達成

やり始めてから約10年かかって達成。

no image
WordPress4.7のREST APIで記事を取得する

記事がある前提で、サムネイルなしのリスト。 リファレンス:h

Macbook Late 2009をSSDに換装してメモリ増設

Macbook Late 2009をHDDからSSDに換装して

no image
運指表作成ファイルを修正

運指表作成ファイルを修正しました。 ダウンロードサンプル 作成する

no image
TWOの数字を更新

数字の最高記録更新は4年5ヶ月1日ぶり。 キーは上段。 オリジ

→もっと見る

PAGE TOP ↑