Войти

Показать полную графическую версию : Выявление изменений Web-Site


schumi
02-05-2005, 19:22
Всем привет!
Хотелось бы узнать у профи как написать и на чём (РНР, Java Script, Java) такую маленькую программку, которая могла бы сравнивать содержимое определенного сайта на определенные изменения. Попробую точнее. Думаю что лучше написать ее на PHP, чтобы не быть привязанным к локальной машине. Обладаю знаниями в PHP и Java, но к сожалению неглубокими. Позабывал уже все.

Vlad Drakula
02-05-2005, 22:18
schumi
ну.... а по подробнее?

schumi
03-05-2005, 02:15
есть сайт такой по продаже автомобилей www.mobile.de. Я хочу сделать так, чтобы как только новая машина появится программа давала бы мне сигнал. Т.е. сравнивала бы эту страничку с предыдущей, ну скажем, каждый час.

vadimiron
03-05-2005, 03:09
Может сделать проще: у них есть Suchauftrag, то есть вам на почту будут приходить все новые интересующие вас модели. Лучше того, как работает их система оповещения, всё равно сделать нельзя.

schumi
03-05-2005, 11:25
vadimiron
Да есть, но почта от них приходит не как раньше, сразу, а только раз в день. :-(

vadimiron
03-05-2005, 13:52
Вообще такой скрипт представляет, для меня по крайней мере, большую сложность, и вот почему:
во первых, данные у них хранятся естественно не в виде статических ХТМЛ страниц, а в базе данных, то есть надо как то самому симулировать запрос, то есть скрипт должен как бы "виртуально" заполнять форму поиска и отправлять эти данные скрипту обработчику. Скрипт найти не сложно, в коде страницы поиска видим следущее:

<FORM enctype="application/x-www-form-urlencoded" method="GET" action="http://www.mobile.de/SIDweksNCWCgNA2xmi69O7uDA-t-vaNexlCsAsCsK%F3P%F3R~BmSB11LsearchPublicJ1115116865A1LsearchPublicD1100CCarS-t-vpLtt~BmPA1B20A0k-t-vSeVb_X_Y_x_y~BSRA6CPKWHinPublicA2A0A0A0/cgi-bin/searchPublic.pl" name="search">
<INPUT value="search" name="_form" type="HIDDEN">


Значение action дано, здесь надо только уметь выделить номер сессии, который даётся каждому "зашедшему"
Единственно, что тут приятное, так это метод GET, то есть данные передаются скрипту поиска через адресную строку, что значит, что мы с большой долей вероятности можем генерировать правильные запросы, только как строятся запросы через адресную строку у них-надо сначало изучить, но это делается простым пробыванием.

Вторая проблема: предположим мы научились строить запросы, теперь же надо обрабатывать результаты, а это значит использование в большом количестве медленных функций по работе со строками, то есть искать типичные куски кода (при этом при даже небольшом изменении дизайна нужно также подправлять код скрипта), и в них искать описание машины (надо ещё учесть, что все результаты поиска никогда не выводятся на одной странице, но номер страницы, который сейчас отображается, я думаю, также передаётся через адресную строку)

В качестве заключения: мне кажется это работа очень большая - но вполне реализуемая, было бы желание

возможно, всё подругому....надеюсь кто нибудь ещё выскажется

schumi
03-05-2005, 14:26
(при этом при даже небольшом изменении дизайна нужно также подправлять код скрипта),
в принципе, думаю, можно не сравнивать страничку целиком, а только определенную часть кода, чтобы от дизайна сильно не зависеть?

А может можно как-нибудь к стандартной функции в IE прикрутить, пусть локально работает.

Vlad Drakula
03-05-2005, 15:21
schumi
А может можно как-нибудь к стандартной функции в IE прикрутить, пусть локально работает.
что и куда вы собираетесь прикручивать?

schumi
03-05-2005, 16:57
Vlad Drakula
Я имел ввиду если занести ее в избранное и сделать доступной автономно. Там есть "при изменении сообщить на e-mail"

Vlad Drakula
03-05-2005, 18:23
schumi
честно говоря я не силен в настройках и фичах эксплорера...

я бы сел и написал скрипт на php...

schumi
03-05-2005, 20:00
Vlad Drakula
я бы тоже :) Только вот даже не знаю с чего начать.
Значит на РНР все-таки?! За это уже спасибо! :beer: Не подскажешь где почитать описания функций PHP на русском?

Vlad Drakula
03-05-2005, 20:50
schumi
на сайте http://php.net можно скачать офичиальное русское руководство!

E-mail
11-05-2005, 00:13
<?php
// Подключаем PEAR::Cache_Lite
require_once 'Cache/Lite.php';

// Определяем настройки Cache_Lite
$options = array(
'cacheDir' => './cache/'
);



// Инициализируем Cache_Lite
$cache = new Cache_Lite($options);



// Некоторые фиктивные данные для хранения
$id = 'MyCache';



// Инициализируем кэш, если страница запрошена впервые
if (!$cache->get($id)) {
$cache->save('Dummy', $id);
}



// Рандомизатор…
$random = array(0, 1, 1);
shuffle($random);



// Произвольное обновление кэша
if ($random[0] == 0) {
$cache->save('Dummy', $id);
}



// Получаем время последней модификации кэш-файла
$lastModified = filemtime($cache->_file);



// Выдаём заголовок HTTP Last-Modified
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');



// Получаем заголовки запроса клиента – только для Apache
$request = getallheaders();



if (isset($request['If-Modified-Since'])) {
// Разделяем If-Modified-Since (Netscape < v6 отдаёт их неправильно)
$modifiedSince = explode(';', $request['If-Modified-Since']);



// Преобразуем запрос клиента If-Modified-Since в таймштамп
$modifiedSince = strtotime($modifiedSince[0]);
} else {
// Устанавливаем время модификации в ноль
$modifiedSince = 0;
}



// Сравниваем время последней модификации контента с кэшем клиента
if ($lastModified <= $modifiedSince) {
// Разгружаем канал передачи данных!
header('HTTP/1.1 304 Not Modified');
exit();
}


echo 'Сейчас ' . gmdate('H:i:s') . ' по Гринвичу<br />';
echo '<a href="' . $_SERVER['PHP_SELF'] . '">Обновить</a><br />';
?>


Vlad Drakula ты меня откровенно радуешь -lol-




© OSzone.net 2001-2012