Скриншот сайтаХочу с вами поделиться, как я реализовал на своем сайте Веб-критик создание превьюшек для добавляемых сайтов. Превьюшки также создаются на многих других сайтах, в том числе сайтах социальных закладок mister-wong.ru, toodoo.ru и других. Но разработчики этих сайтов не открывают способ, как они это делают. Поэтому пришлось думать самому.

Поискав в интернете удовлетворяющую меня функцию или скрипт для получения скриншотов, я так ничего и не нашел. Всем известный сайт browsershots.org годится только для ручной работы, т.к. ставит ваш сайт в очередь и нужно ждать около 20-30 минут, прежде чем появится первый скриншот.

Решение нашлось благодаря сайту http://ipinfo.info/netrenderer/. Хоть он и делает сриншоты сайтов только для ie6-8, но этого достаточно.

Итак, посмотрев исходник этого сайта (назовем его сайт №1), находим форму, которую нужно заполнить, чтобы получить скриншот. А также адрес скрипта, которому передаются эти данные.

Код сайта №1

После того, как скрипт index.php выполнится, загружается другой сайт (№2), на котором выводится скриншот заданного нами сайта.

Смотрим адрес картинки-скриншота. Он выглядит примерно так: http://renderer.geotek.de/image.php?imgid=XXXXXXXXXX&browser=ie7. Все буквы в этом адресе всегда постоянные, кроме одного числа (вместо него я написал XXXXXXXXXX), ну и кроме версии браузера (это на наш выбор).

Осталось только выдрать этот адрес из страницы и скачать картинку себе на диск. Всё.

Примечание: адрес картинки всегда уникален и хранится недолго.

А вот и сам код скрипта для получения скриншота:

Передаем два параметра - $url (адрес сайта, для которого хотим получить скриншот) и $msie (версию браузера IE. Возможные значения - ie6, ie7, ie8)
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');

Постовой

  • Наверно все любят животных. Я тоже. А когда они заболевают, лучше немедленно обращаться в ветеринарную клинику
  • Если вы живете в Оренбурге и решили подстричься, то с легкостью можете узнать, где подстричься в Оренбурге. На сайте вы найдете адреса парикмахерских и салонов красоты в Оренбурге.