LOGO
Автоматическая загрузка и обработка данных для
Автоматическая загрузка и обработка данных для
веб-порталов
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Автоматическая загрузка данных на сайт
Для чего это необходимо:
сайт
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Автоматическая загрузка данных на сайт
Для чего это необходимо:
сайт
Более глобальные задачи:
Головная организация
HTML
поставщикпоставщик
поставщик
1С
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Скачивание каталога продукциив html-формате
Получение данных с указанного URL
Извлечение содержимого из полученной страницы
Дополнительная обработка и вывод на сайте
1.
2.
3.
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Скачивание каталога продукциив html-формате
1. Получение данных с указанного URL
Для этого в РНР существует несколько возможностей:
fopen
file_get_contentsБиблиотека cURL
Соединение черезсокеты
fsockopen
$fp = fsockopen($host, 80, $errno, $errstr, 20); Открываем сокет
Log
$out = "GET $path HTTP/1.0\r\n";
$out .= "Host: $host\r\n";
$out .= "User-Agent: Opera/8.01 (J2ME/MIDP; ".
"Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n";
$out .= "Cache-Control: no-cache\r\n";
$out .= "Connection: Close\r\n\r\n";
Строка заголовка для пакета
Сервер
fwrite($fp, $out); Пакет
$body = "";
while (!feof($fp))
$body .= fgets($fp);
Ответ
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Скачивание каталога продукциив html-формате
2. Извлечение содержимого из страницы
…
<div class="content">
Мама мыла раму
</div>
<div class="footer">
…
Регулярные выражения Мама мыла раму
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Скачивание каталога продукциив html-формате
3. Обработка и отображение на сайте
1. Поиск ссылок и формирование массива
function parseLinks( $data ) {
$pattern = "/<a\\s+[^>]*href\\s*=\s*[\"']?([^\"'>]+)[\"'][^>]*>(?:(?U)(.*)<\\/a>)/i";
$a = preg_replace_callback($pattern, array(&$this, 'linkRender'), $data );
} function linkRender( $matches ) {
if ( strpos($matches[1], 'http:/') || strpos($matches[1], 'ftp:/')) return;
$link_key = 'http://'.$this->domain.$matches[1];
if ( strpos($matches[1], '/products') && !array_key_exists ($link_key, $this->links) ){
$this->links[ $link_key ] = '-1';
}
}
2. Исключение стилей и классов
3. Абсолютные ссылки и абсолютные пути для картинок
4. Сохранение обработанного текста во временное хранилище
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Скачивание каталога продукциив html-формате
4. Отображение на сайте подразделения
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Обновление каталогов продукцииот разных поставщиков
О проекте
поставщик поставщик поставщик
Покупатель
зака
збронь аналог
запр
ос
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Обновление каталогов продукцииот разных поставщиков
Способы загрузки данныхПоставщики передают свои данные разными способами: HTTP c Basic-авторизацией
FTP
$out = "GET $uri HTTP/1.1\r\n";$out .= "Host: ".$host."\r\n";$out .= "Connection: Close\r\n";$out .= 'Authorization: Basic '.base64_encode($user.':'.$pwd)."\r\n";
$sock = @fsockopen($host, 80, $errno, $errstr, 10);fwrite($sock, $out);
$conn_id = ftp_connect($server_); Устанавливаем соединение
Log$result = ftp_login($conn_id, $login_, $pass_);
Передаем логин и пароль
ftp_get($conn_id, $local_file, $server_file, FTP_ASCII);Скачиваем server_file и сохраняем в local_file
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Обновление каталогов продукцииот разных поставщиков
Архивы с данными
ZIP-файл
PCLZip
XML-данные
$archive = new PclZip('archive.zip');$list = $archive->extract(PCLZIP_OPT_BY_NAME, "data/archive.xml", PCLZIP_OPT_EXTRACT_AS_STRING);
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Обновление каталогов продукцииот разных поставщиков
Варианты обработки XML
В PHP существует несколько встроенных вариантов обработки XML - SimpleXML, DOM, SAX.
SimpleXML
$xml = simplexml_load_file($file);
$arr = $xml->Xpath(”/document/products/*”);
Array – массив объектов
Примеры использования Xpath
$result = $xml->Xpath(”//*”); - найдет вообще все объекты;$result = $xml->Xpath(”//div”); - найдет все объекты div;$result = $xml->Xpath(”//div[@id='head']”); - найдет объект div c id = head
foreach($arr as $k=>$atr) $goods[]=Array( “articul”=>$atr->articul, ”name”=>$atr->name, “price”=>$atr->price, “descr”=>$atr->description);
www.thmemgallery.comwww.thmemgallery.com Company LogoCompany Logo
Обновление каталогов продукцииот разных поставщиков
Отображение на сайте