20.06.2008Создание скриншотов сайтов
Хочу с вами поделиться, как я реализовал на своем сайте Веб-критик создание превьюшек для добавляемых сайтов. Превьюшки также создаются на многих других сайтах, в том числе сайтах социальных закладок mister-wong.ru, toodoo.ru и других. Но разработчики этих сайтов не открывают способ, как они это делают. Поэтому пришлось думать самому.
Поискав в интернете удовлетворяющую меня функцию или скрипт для получения скриншотов, я так ничего и не нашел. Всем известный сайт browsershots.org годится только для ручной работы, т.к. ставит ваш сайт в очередь и нужно ждать около 20-30 минут, прежде чем появится первый скриншот.
Решение нашлось благодаря сайту http://ipinfo.info/netrenderer/. Хоть он и делает сриншоты сайтов только для ie6-8, но этого достаточно.
Итак, посмотрев исходник этого сайта (назовем его сайт №1), находим форму, которую нужно заполнить, чтобы получить скриншот. А также адрес скрипта, которому передаются эти данные.
После того, как скрипт index.php выполнится, загружается другой сайт (№2), на котором выводится скриншот заданного нами сайта.
Смотрим адрес картинки-скриншота. Он выглядит примерно так: http://renderer.geotek.de/image.php?imgid=XXXXXXXXXX&browser=ie7. Все буквы в этом адресе всегда постоянные, кроме одного числа (вместо него я написал XXXXXXXXXX), ну и кроме версии браузера (это на наш выбор).
Осталось только выдрать этот адрес из страницы и скачать картинку себе на диск. Всё.
Примечание: адрес картинки всегда уникален и хранится недолго.
А вот и сам код скрипта для получения скриншота:
function GetShot($url, $msie)
{
$host = "ipinfo.info";
$fp = fsockopen($host, 80, $errno, $errstr, 30); //Коннектимся к сайту №1
if($fp) {
$data = array();
$temp = array(); //Формируем данные для POST запроса к скрипту index.php
$data[] = "browser"; $data[] = $msie;
$data[] = "url"; $data[] = "http://".$url;
$data[] = "go"; $data[] = "Render";
for ($ii=0; $ii<=count($data); $ii++)
{
$name = $data[$ii];
$value = $data[$ii+1];
$ii++;
$temp[] = urlencode($name)."=".urlencode($value);
}
$PostData=implode("&", $temp);$script_adress = "/netrenderer/index.php"; //Адрес скрипта на сайте №1
//Отсылаем запрос
fputs($fp, "POST $script_adress HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: http://".$host.$script_adress."\r\n");
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-Length: ".strlen($PostData)."\r\n");
fputs($fp, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
fputs($fp, "Keep-Alive: 300");
fputs($fp, "Connection: keep-alive");
fputs($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6\r\n\r\n");
fputs($fp, $PostData);//Считываем ответ. В ответе будет содержаться страница со скриншотом с сайта №2
$con = '';
while (!feof($fp)) {
$con .= fgets ($fp,200);
}
fclose($fp); //Выдираем (ищем, парсим) адрес картинки-скриншота
preg_match("/http:\/\/renderer\.geotek\.de\/image\.php\?imgid=(.*?)\&browser=".$msie."/is", $con, $matches);
$img = file_get_contents($matches[0]); //Скачиваем скриншот. Формат PNG
//Убеждаемся, что картинка скачана, т.е. имеет не нулевой размер
if (strlen($img) > 0)
{
//Сохраняем картинку на диск
$ff = fopen("screenshot.png", "wb");
fputs($ff, $img);
fclose($ff);
unset($con, $img);
return true; //Возвращаем TRUE - скриншот получен
} else return false; //Если картинка не скачалась, возвращаем FALSE
}
else return false; //Если сайт №1 не открылся, возвращаем FALSE
}
Функцию можно сделать универсальнее, добавив в ее параметры еще и имя файла, в который хотите сохранить скриншот. Тут уже решайте сами.
Пример вызова функции: GetShot ('http://lagerok.ru', 'ie7');
Постовой
-
Наверно все любят животных. Я тоже. А когда они заболевают, лучше немедленно обращаться в ветеринарную клинику
-
Если вы живете в Оренбурге и решили подстричься, то с легкостью можете узнать, где подстричься в Оренбурге. На сайте вы найдете адреса парикмахерских и салонов красоты в Оренбурге.



23.02.2009 в 12:03
Спасибо за статью! Вот еще проще способ нашел!
24.02.2009 в 8:24
спасибо, пригодится
08.02.2010 в 19:26
есть ошибка в коде — не знаю ,как может при ней работать в принципе ...
//Убеждаемся, что картинка скачана, т.е. имеет не нулевой размер
if (strlen ($img) < 0)
{
//Сохраняем картинку на диск
точно, длина МЕНЬШЕ нуля?
)))))
09.02.2010 в 9:50
Спасибо. Не понимаю, как так получилось. У меня в исходнике стоит знак >. Исправил
25.05.2010 в 23:46
— отличный сервис по созданию скриншотов сайтов online.
Быстро создает скрин шоты любого сайта в разных разрешениях с превью, есть ссылки на все картинки для использования на свое сайте, возможность показывать скрины в форумах например или для своего портфолио, можно просто сбросить другу ссылку на то, как Вы видите тот или иной сайт, или выдачу в поисковой системе.
26.05.2010 в 8:38
Спасибо. Классый сервис
14.06.2010 в 15:05
— быстро, бесплатно, удобно
21.06.2010 в 0:15
К чему все эти сложности когда есть ? Отправляем запрос вида и получаем картинку.
26.10.2010 в 15:59
Недавно создали новый сервис для создания скриншотов
веб-сайтов. Он не требует регистрации и позволяет делать
полноразмерные скриншоты разной ширины, все написано очень понятно, я сам несколько раз пробовал, мне понравилось.