Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсер картинок из fancybox
Форумы портала PHP.SU » » Работа с сетью » Парсер картинок из fancybox

Страниц (1): [1]
 

1. Slavk0 - 14 Ноября, 2012 - 11:35:17 - перейти к сообщению
Всем привет.
На сайте есть галерея. Если нажать на иконку фотографии то открывается всплывающее окно в которое подгружается большое фото. Задача: нужно в всплывающее окно с фото вставить кнопку. При нажатии на кнопку переходим на другой сайт и на нем выводим фото.

Сделал с помощью $_SERVER['HTTP_REFERER']. Но не учел один момент. Страница с иконками фотографий имеет адрес "http://site.ru/gallery/album.php?q=16332". Если нажать на иконку, то отрывается окно с большой фотографией, а адрес страницы остается такой же как на странице с иконками. В итоге парсер тянет изображения со страницы с иконками.

Возможно ли спарсить изображение из высплывающего окна?
2. armancho7777777 - 14 Ноября, 2012 - 12:57:09 - перейти к сообщению
Парсите ссылки с атрибутом rel, или ссылки, радительский элемент которых подключен к этой библиотеки.
3. Slavk0 - 14 Ноября, 2012 - 13:37:59 - перейти к сообщению
Цитата:
Парсите ссылки с атрибутом rel


Думал об этом. Но как передать парсеру информацию о том какую именно нужно спарсить ссылку? Нужна же только одна определенная ссылка из их множества.

Вот пример кода:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div class="image">
  3. <a class="fancy" data-id="7145796" href="/clubbergallery/photo.php?id=7145796&aid=16335&a1=01&a2=63&a3=35" rel="gallery">
  4. <img alt="" src="/hdd2/clubbergallery/01/63/35/170m7145796.jpg">
  5. </a>
  6. </div>
  7.  


Была еще одна мысль. Если взять путь к изображению, удалить из названия файла букву "m" и вставить эту ссылку в браузер, то открывается полноразмерное фото. Но опять таки загвоздка в том, как указать парсеру именно на эту ссылку...
4. Мелкий - 14 Ноября, 2012 - 14:03:43 - перейти к сообщению
Slavk0 пишет:
нужно в всплывающее окно с фото вставить кнопку

Так вместе с кнопкой и передавайте url картинки. Всё.
Полноразмерную версия расположена по ссылке в атрибуте href тега a.
5. Slavk0 - 16 Ноября, 2012 - 15:42:51 - перейти к сообщению
Можете на примере показать?

CODE (html):
скопировать код в буфер обмена
  1. <div id="photo_holder">
  2.      <img id="photo_img" src="/hdd2/clubbergallery/01/63/33/7145584.jpg">
  3. </div>
  4. <div id="btn">
  5.      <a href="http://test.com/parser.php">Спарсить</a>
  6. </div>
6. armancho7777777 - 16 Ноября, 2012 - 16:24:17 - перейти к сообщению
Slavk0 пишет:
Но как передать парсеру информацию о том какую именно нужно спарсить ссылку? Нужна же только одна определенная ссылка из их множества.

Спойлер (Отобразить)

PHP:
скопировать код в буфер обмена
  1.  
  2. if(
  3.         '~<a[\s]+class="fancy"[^>]+href="(?P<img_src>[^"]+)"[\s]+rel="gallery"[\s]*>~si',
  4.         $str,
  5.         $matсhes
  6.  
  7.    )
  8. )
  9. {
  10.         foreach($matсhes['img_src'] as $img_src)
  11.         echo '<img src="'.$img_src.'">';
  12. }
  13.  
7. Slavk0 - 19 Ноября, 2012 - 12:40:47 - перейти к сообщению
Спасибо за советы. Сделал немного подругому, но еще не до конца.

Появился еще вопрос. Если спарсить картинку, а потом изменить ссылку с помощью "str_replace", то она не выводится.

То есть вот так всё работает:
PHP:
скопировать код в буфер обмена
  1. include 'simple_html_dom.php';
  2.  
  3. require_once 'simple_html_dom.php';
  4. $url = $_SERVER['HTTP_REFERER'];
  5. $n = 1;
  6. $str = file_get_html($url);
  7. if(count($str->find('a.fancy'))){
  8.     $i = 1;
  9.     foreach($str->find('a.fancy img') as $img){
  10.         echo '<img id="image1" src="http://clubber.ru'.$img->src.'"/>';
  11.         file_put_contents('V:/home/localhost/www/prilip/uploads/'.($i++).'.jpg',file_get_contents('http://clubber.ru'.$img->src.''));
  12.         if($i>$n)break;
  13.     }
  14. }


Результат получается такой:
PHP:
скопировать код в буфер обмена
  1. <img id="image1" src="http://clubber.ru/hdd2/clubbergallery/01/63/51/170m7147469.jpg">


Если же добавить str_replace:
PHP:
скопировать код в буфер обмена
  1. foreach($str->find('a.fancy img') as $img){
  2.         $img = str_replace("170m","",$img);
  3.               echo '<img id="image1" src="http://clubber.ru'.$img->src.'"/>';


Результат будет такой:
PHP:
скопировать код в буфер обмена
  1. <img src="http://clubber.ru">


В чем косяк?
8. Мелкий - 19 Ноября, 2012 - 13:17:40 - перейти к сообщению
Slavk0 пишет:
Результат будет такой:

Уверены, что будет?
Я, честно говоря, даже представлений не имею, как из этого:
Slavk0 пишет:
$img = str_replace("170m","",$img);
echo '<img id="image1" src="http://clubber.ru'.$img->src.'"/>';

Можно не получить fatal error.

PHP:
скопировать код в буфер обмена
  1. $img = str_replace("170m","",$img->src);
  2.               echo '<img id="image1" src="http://clubber.ru'.$img.'"/>';



Добавление
Поигрался, теперь знаю, как не получить fatal error. Странно, я думал, что на обращение не к объекту будет fatal, а там всего лишь notice Однако

 

Powered by ExBB FM 1.0 RC1