Захватить / загрузить изображения с нескольких страниц, используя php preg_match_all & cURL - PullRequest
4 голосов
/ 13 октября 2011

Поэтому я пытаюсь получить изображения с другого сайта, проблема в том, что каждое изображение находится на отдельной странице

IE: id / 1, id / 2, id / 3 и т. Д. И т. Д.

пока у меня есть код ниже, который может получить изображение с одного URL, указанного с помощью:

$returned_content = get_data('http://somedomain.com/id/1/');

но нужно, чтобы строка выше стала массивом (я полагаю), поэтому он будет захватывать изображение со страницы 1, а затем автоматически переходить к следующему изображению на странице 2, затем к странице 3 и т. Д.

function get_data($url){
 $ch = curl_init();
 $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
 $data = curl_exec($ch);
  curl_close($ch);
 return $data;
}

$returned_content = get_data('http://somedomain.com/id/1/');

if (preg_match_all("~http://somedomain.com/images/(.*?)\.jpg~i", $returned_content, $matches)) {

$src = 0;
      foreach ($matches[1] as $key) {

if(++$src > 1) break;

          $out = $key;
      }

      $file = 'http://somedomain.com/images/' . $out . '.jpg';


$dir = 'photos'; 

$imgurl = get_data($file);

file_put_contents($dir . '/' . $out . '.jpg', $imgurl);

echo  'done';
}

Как всегда, вся помощь приветствуется и спасибо заранее.

1 Ответ

4 голосов
/ 13 октября 2011

Это было довольно странно, потому что казалось, что вы заинтересованы только в сохранении одного изображения на страницу.Но затем код создает видимость того, что вы на самом деле пытаетесь сохранить каждое изображение на каждой странице.Так что вполне возможно, что я полностью неправильно понял ... Но вот так.

Цикл на каждой странице не так уж и сложен:

$i = 1;
$l = 101;

while ($i < $l) {
    $html = get_data('http://somedomain.com/id/'.$i.'/');
    getImages($html);
    $i += 1;
}

Далее предполагается, что вы пытаетесь сохранить все изображения на этой конкретной странице:

function getImages($html) {
    $matches = array();
    $regex = '~http://somedomain.com/images/(.*?)\.jpg~i';
    preg_match_all($regex, $html, $matches);
    foreach ($matches[1] as $img) {
        saveImg($img);
    }
}

function saveImg($name) {
    $url = 'http://somedomain.com/images/'.$name.'.jpg';
    $data = get_data($url);
    file_put_contents('photos/'.$name.'.jpg', $data);
}
...