[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс парсера/грабера картинок
Страницы: 1, 2
Игорь_Vasinsky
И снова я.

сам класс вот парсера

class ParserImage{
public $url;
//куда записываются/дописываются ссылки на картинки
public $file = 'imagelog.txt';
//Директория - куда сливаются картинки
public $path = 'downloads';

private $errors = null;

//Настройки по умолчанию - только при сохранении картинок в лиректорию
public $options = array(
'cond'=>'<', // "<" - меньше, ">" - больше, "==" - точный размер
'width'=>3000, // ширина в пиксилях
'height'=>3000,// высота в пикселях
'exp'=>array(
'jpg',
'jpeg',
'png',
'gif'
)
);

//Принимает url сайта - донора
public function __construct($url){
try{
$this->url = $url;
if(!filter_var($this->url, FILTER_VALIDATE_URL))
throw new Exception('Введён не коректный url адрес сайта<br/>');
}
catch(Exception $e){
echo $e->getMessage();
}
}

//Получает контент сайта донора в переменную
public function getContent(){
$curl = curl_init();
$options = array(
CURLOPT_URL=>$this->url,
CURLOPT_REFERER=>'http://google.com/',
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_USERAGENT=>'Parser Images',
);


curl_setopt_array($curl, $options);
$out = curl_exec($curl);
$info = curl_getinfo($curl);

try{
if(($info['http_code'] != 200))
throw new Exception('Сайт не доступен!<br/>');


$turl = parse_url($this->url);
$domen = $turl['scheme'].'://'.$turl['host'];

curl_close($curl);

$out = strtr($out, array('src="/'=>'src="'.$domen.'/'));

return $out;
}
catch(Exception $e){
echo $e->getMessage();
}
}

//Ручная установка опций - если собираетесь качать картинки себе
public function setOptions($options){
$this->options = $options;
}

//Проверит правильность указания параметров для сохранения картинок
private function validteOption(){
if(!is_array($this->options))
$this->errors = 'Не правильный формать options';
elseif(!is_array($this->options['exp']))
$this->errors = 'Форматы картинок, должны быть описаны в виде массива';
elseif(!is_numeric($this->options['width']) || !is_numeric($this->options['height'])){
$this->errors = 'Размеры картинок должны быть предоставлены в виде целых чисел';
}
elseif(!in_array($this->options['cond'], array('>','<','=='))){
$this->errors = 'Условия для поиска размеров указаны не верно';
}

return ($this->errors == null) ? true : false;

}

//Вернёт весь список статических картинок, игнорируя правила
public function getImageList(){
$content = $this->getContent();

preg_match_all("#<img.*src=\"(.*)\".*>#isU", $content, $images);

try{
if(!is_array($images[1]) || empty($images[1]))
throw new Exception('Картинок не нашёл...<br/>');

foreach($images[1] as $img){
if(!strpos($img, '?') && preg_match("#\.[a-z]{3,5}$#i", $img)){
$esList[] = $img;
}
}


$resList = array_unique($resList);
return $resList;
}
catch(Exception $e){
echo $e->getMessage();
}
}

//Сохраняет ссылки на картинки в файл, дописывая его
public function saveLinks(){
if(is_array($this->getImageList())){
if(file_put_contents($this->file, implode(PHP_EOL, $this->getImageList()), FILE_APPEND))
return true;
else
return
false;
}
}

//СОхраняет картинки по указанным критериям и возвращает мини отчёт
public function saveImages(){
$list = $this->getImageList();

$cond = $this->options['cond'];
$width = $this->options['width'];
$height = $this->options['height'];
$exp = $this->options['exp'];
$true = array();
$false = array();

foreach($list as $k=>$img){
if($temp_image = file_get_contents($img)){
$size = getimagesize($img);
$count_images = count($list);
$w = $size[0];
$h = $size[1];
$e = strtr($size['mime'], array('image/'=>''));

try{
if($this->validteOption()){

switch($cond){
case '==' :
if($w == $width && $h == $height && in_array($e, $exp))
$true[] = $img;
break;
case '>' :
if($w > $width && $h > $height && in_array($e, $exp))
$true[] = $img;
break;
case '<' :
if($w < $width && $h > $height && in_array($e, $exp))
$true[] = $img;
break;
}
}

throw new Exception($this->errors);
}
catch(Exception $e){
echo $e->getMessage();
}
}
}

if(!empty($true)){
foreach($true as $k=>$img)
file_put_contents($this->path.'/'.sha1(microtime()).'.'.$e, $img);

}

}
}




Работа с классом

    //Создаём объкт и указываем жертву
$p = new ParserImage('http://trinixy.ru/category/pics/');


далее есть 3 варианта работы

1.
    //Вернёт уникальный массив ссылок на картинки
$getList = $p->getImageList();
echo '<pre>' . print_r($getList, 1) . '</pre>';


2.
    //сохранит список url в файл - дописывая его и вернёт уникальный массив
$saveList = $p->saveLinks();
echo '<pre>' . print_r($saveList, 1) . '</pre>';


3.
    //Опции можно использовать и по умолчанию, можно указать
//только при сохранении картинок в лиректорию

$p->setOptions(
array(
'cond'=>'==',
'width'=>100,
'height'=>100,
'exp'=>array('jpeg','png')
)
);



echo $p->saveImages();


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.