ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Получаем полную карту с maps сайта
  #1  
Старый 24.05.2010, 05:29
SleepShadowWeb
Новичок
Регистрация: 02.02.2006
Сообщений: 28
Провел на форуме:
351198

Репутация: 54
Smile Получаем полную карту с maps сайта

Задача:
получить изображение всей карты нужного масштаба с сайта www.map.bryandex.ru (берём масштаб = 4)

Реализация:
запускаем сайт в Mozilla Firefox и включаем Firebug, в панели "Сценарий" должно быть отмечено галочкой "Декомпилировать исходники eval"
смотрим исходный код сайта, переходим на страницу, куда ведёт iframe.

из анализа кода:
36 - количество мини-картинок по ширине
24 - количество мини-картинок по высоте
256 - ширина и высота мини-картинки
'map' + scale + '/' + getimg(i, j) + '.gif' - путь к нашим картинкам

исходный, декомпилированный код функции getimg(i, j) находим в панели "Сценарий".

поскольку используется прямой путь к файлу-изображению, а не через скрипт, то остаётся убедиться, что нет других препятствий.
теперь проверим есть ли ограничения в файле .htaccess на использование картинок другими хостами - ограничений нет.
(просто разместить html код у себя на сервере <img src='http://www.map.bryandex.ru/map4/AAGDCGAGCHI.gif'>)
название картинки получаем с помощью Firebug.

вся необходимая информация получена.

Продолжаем:
для начала скачаем все мини-картинки к себе. конвертируем функцию getimg из JavaScript в PHP.
щедро раздаём каждой переменной по "баксу", и заменяем функции на аналоги.
PHP код:
function getimg($y$x
{
    
$xx $x 648 130 $y;
    
$yy $y 512 60 $x;
    
$imgstr $yy "7" $xx;
    
$imgstr1 "";
    
    for (
$i 0$i strlen($imgstr); $i++) 
    {
        
$char substr($imgstr$i1);
        
        switch (
$char
        {
        case 
"1":
            
$imgstr1 .= "A";
        break;
        case 
"2":
            
$imgstr1 .= "B";
        break;
        case 
"3":
            
$imgstr1 .= "C";
        break;
        case 
"4":
            
$imgstr1 .= "D";
        break;
        case 
"5":
            
$imgstr1 .= "E";
        break;
        case 
"6":
            
$imgstr1 .= "F";
        break;
        case 
"7":
            
$imgstr1 .= "G";
        break;
        case 
"8":
            
$imgstr1 .= "H";
        break; 
        case 
"9":
            
$imgstr1 .= "I";
        break;
        case 
"0":
            
$imgstr1 .= "O";
        break;
        default:;
        }
    }
    return 
$imgstr1;

кусочек по скачиванию картинок (вариант 1):
производительно выгоднее чем "вариант 2", поскольку использует 'memory mapping'
-------------------------------------------
PHP код:
set_time_limit(0);

for(
$j 1$j <= 24$j++)
for(
$i 1$i <= 36$i++)
{
    
$name getimg($j$i).".gif";

    
$data_file '';
    
$data_file = @file_get_contents("http://www.map.bryandex.ru/map4/".$name); // файл с указанным именем может не существовать (добавил @)
    
if($data_filefile_put_contents("pic/".$name$data_file);    // сохраняем с тем же именем к себе в папочку "pic"

кусочек по скачиванию картинок (вариант 2):
-------------------------------------------
PHP код:
set_time_limit(0);

for(
$j 1$j <= 24$j++)
for(
$i 1$i <= 36$i++)
{
    
$name getimg($j$i).".gif";

    
$buffer "";

    
$handle = @fopen("http://www.map.bryandex.ru/map4/".$name"rb");
    if(!
$handle) continue;
    while (!
feof($handle)) {
        
$buffer .= fgets($handle4096);
    }
    
fclose($handle);

    
$handle fopen("pic/".$name"wb");
    
fwrite($handle$buffer);
    
fclose($handle);



картинки уже скачаны и находятся у нас в папочке "pic" (получилось 798 штук, занимают 4494 Кб).

приступаем к склейке в одно большое изображение:
PHP код:
set_time_limit(0); // не будем себя ограничивать по времени

$w 256// ширина мини-картинки
$h 256// высота мини-картинки

$kol_w 36// количество мини-картинок по ширине
$kol_h 24// количество мини-картинок по высоте

$all_w $kol_w $w// подсчитываем ширину результирующего изображения
$all_h $kol_h $h// подсчитываем высоту результирующего изображения

$im imagecreatetruecolor($all_w$all_h); // создаём изображение нужных размеров

imagefill($im00"#000000"); // заливаем созданное изображение чёрным цветом (это так - для кучи, т.к. при создании изображения строкой выше - оно и так чёрное)

for($i 1$i <= $kol_h$i++)
for(
$j 1$j <= $kol_w$j++)
{
    
$name "pic/".getimg($i$j).".gif";
    
// ещё на этапе скачивания файлов с сайта выяснилось, что не все они там есть (т.е. карта с "дырами"). вот и приходится это контролировать
    
if(!is_file($name)) $name 'blank.gif'
    
// если файл с нужным именем не существует, то заменяю его на собственную картинку (размером $W x $H px) с нарисованными диагоналями на однотонном фоне
    // как вариант можно и ничего в этом случае не делать, а просто пропустить выполнение следующих трёх строк, тогда пропущенный участок будет цветом фона
    
    
@$im_1 imagecreatefromgif($name);
    
imagecopyresampled($im$im_1, ($j 1) * $w, ($i 1) * $h00$w$h$w$h);
    
imageDestroy($im_1);
}

imageJpeg($im'image_ready.jpg'); // записываем полученное изображение в файл
imageDestroy($im); 
небольшой нюанс: всё это дело по созданию большой картинки занимает много памяти, вот поэтому нужно в файл php.ini внести некоторые коррективы.
к примеру, вот так:
memory_limit = 999999M;

результатом всех этих действий получился файл-изображение "image_ready.jpg" весом 4524 Кб и габаритами 9216 х 6144 px
всё получилось, а дальше можно и в типографию отправлять...
 
Ответить с цитированием

  #2  
Старый 24.05.2010, 10:46
phpdreamer
Постоянный
Регистрация: 26.07.2009
Сообщений: 321
Провел на форуме:
444589

Репутация: 123
Отправить сообщение для phpdreamer с помощью ICQ
По умолчанию

зачем так извращаться?
есть же google API и Яндекс API
 
Ответить с цитированием

  #3  
Старый 24.05.2010, 11:29
Komyak
Участник форума
Регистрация: 15.01.2009
Сообщений: 158
Провел на форуме:
469704

Репутация: 26
По умолчанию

Цитата:
зачем так извращаться?
Тут самый финт- что можно сделать =)) А уж "законно" это больно легко. =))
Особенно вот это - memory_limit = 999999M; Понравилось =))
 
Ответить с цитированием

  #4  
Старый 24.05.2010, 11:40
phpdreamer
Постоянный
Регистрация: 26.07.2009
Сообщений: 321
Провел на форуме:
444589

Репутация: 123
Отправить сообщение для phpdreamer с помощью ICQ
По умолчанию

Цитата:
Сообщение от Komyak  
Тут самый финт- что можно сделать =)) А уж "законно" это больно легко. =)
опасный нарушитель....
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программы для сайта Вконтакте. Fruit Социальные сети 3 05.01.2010 22:59
Шпаргалки для сертификатов по Битрикс Liar PHP, PERL, MySQL, JavaScript 7 30.05.2009 10:13
Раскрутка сайта heks Статьи 15 15.02.2009 19:51



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ