3. www.thmemgal Company Logo
Автоматическая загрузка данных на сайт
Для чего это необходимо:
сайт
Более глобальные задачи:
Головная
организация
HTML
поставщик
поставщик
поставщик
1С
4. www.thmemgal Company Logo
Скачивание каталога продукции
в html-формате
Получение данных с указанного URL
Извлечение содержимого из полученной страницы
Дополнительная обработка и вывод на сайте
1.
2.
3.
5. www.thmemgal Company Logo
Скачивание каталога продукции
в html-формате
1. Получение данных с указанного URL
Для этого в РНР существует несколько возможностей:
fopen
file_get_contents
Библиотека cURL
Соединение через
сокеты
fsockopen
$fp = fsockopen($host, 80, $errno, $errstr, 20);
Открываем сокет
Log
$out = "GET $path HTTP/1.0rn";
$out .= "Host: $hostrn";
$out .= "User-Agent: Opera/8.01 (J2ME/MIDP; ".
"Opera Mini/2.0.4509/1716; ru; U; ssr)rn";
$out .= "Cache-Control: no-cachern";
$out .= "Connection: Closernrn";
Строка заголовка для пакета
Сервер
fwrite($fp, $out);
Пакет
$body = "";
while (!feof($fp))
$body .= fgets($fp);
Ответ
6. www.thmemgal Company Logo
Скачивание каталога продукции
в html-формате
2. Извлечение содержимого из страницы
…
<div class="content">
Мама мыла раму
</div>
<div class="footer">
…
Регулярные
выражения
Мама мыла раму
7. www.thmemgal Company Logo
Скачивание каталога продукции
в html-формате
3. Обработка и отображение на сайте
1. Поиск ссылок и формирование массива
function parseLinks( $data ) {
$pattern = "/<as+[^>]*hrefs*=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. Сохранение обработанного текста во временное хранилище
9. www.thmemgal Company Logo
Обновление каталогов продукции
от разных поставщиков
О проекте
поставщик поставщик поставщик
Покупатель
заказ
бронь аналог
запрос
10. www.thmemgal Company Logo
Обновление каталогов продукции
от разных поставщиков
Способы загрузки данных
Поставщики передают свои данные разными способами:
HTTP c Basic-авторизацией
FTP
$out = "GET $uri HTTP/1.1rn";
$out .= "Host: ".$host."rn";
$out .= "Connection: Closern";
$out .= 'Authorization: Basic '.base64_encode($user.':'.$pwd)."rn";
$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
11. www.thmemgal Company Logo
Обновление каталогов продукции
от разных поставщиков
Архивы с данными
ZIP-файл
PCLZip
XML-данные
$archive = new PclZip('archive.zip');
$list = $archive->extract(PCLZIP_OPT_BY_NAME, "data/archive.xml",
PCLZIP_OPT_EXTRACT_AS_STRING);
12. www.thmemgal Company 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);