▽1
●
Cherenkov ●200ポイント ベストアンサー |
うーん。一応動いてると思います。
urlをコマンドラインで渡すとかフォームからとか変える余地あるけど取り敢えず。
<?php function p($msg) { echo $msg.PHP_EOL; } function pr($var) { echo '<pre>'; print_r($var); echo '</pre>'; } set_time_limit(0); //mb_convert_encodingの第3引数をautoで使う場合に必要。 mb_language("Japanese"); $urls = array('http://imgb1.ziyu.net/bbs/nendoro2/index.cgi'); $pUrl = parse_url($urls[0]); $baseUrl = $pUrl['scheme'] . '://' . $pUrl['host']; preg_match('/\/bbs\/([^\/]+)/', $pUrl['path'], $siteId); $siteId = $siteId[1]; $baseBBSUrl = "$baseUrl/bbs/$siteId"; $newUrls = getPageUrls($urls[0]); $urls += $newUrls; foreach ($urls as $url) { $html = mb_convert_encoding(file_get_contents($url), 'UTF-8', 'auto'); preg_match_all('/href="(\/view\/.+?)"/im', $html, $imgPaths); $imgPaths = $imgPaths[1]; foreach ($imgPaths as $path) { $imgUrl = getImgUrl($baseUrl . $path); saveImg($imgUrl); } //sleep(3); } p('complete!'); function getPageUrls($url) { $html = mb_convert_encoding(file_get_contents($url), 'UTF-8', 'auto'); preg_match_all('/\[<a href="(index\.cgi\?page=\d+)/im', $html, $urls); $urls = $urls[1]; $urls = array_map(function($path) { global $baseBBSUrl; return $baseBBSUrl . '/' . $path; }, $urls); return $urls; } function getImgUrl($url) { global $baseUrl; $html = mb_convert_encoding(file_get_contents($url), 'UTF-8', 'auto'); preg_match("/<img src='(.+?)'/im", $html, $imgUrl); return $baseUrl . $imgUrl[1]; } function saveImg($url) { $fileName = basename($url); $data = file_get_contents($url); $imgDir = './download/'; if (file_exists($imgDir) || mkdir($imgDir)) { if ($data && file_put_contents($imgDir . $fileName, $data)) { p('success!'); } else { p('retry!'); saveImg($url); } } }