130 likes | 275 Views
Автоматическая загрузка и обработка данных для. веб-порталов. Автоматическая загрузка данных на сайт. Для чего это необходимо:. $. сайт. Новости. Автоматическая загрузка данных на сайт. Для чего это необходимо:. $. сайт. Новости. Более глобальные задачи:.
E N D
Автоматическая загрузка и обработка данных для веб-порталов
Автоматическая загрузка данных на сайт • Для чего это необходимо: $ сайт Новости Company Logo
Автоматическая загрузка данных на сайт • Для чего это необходимо: $ сайт Новости • Более глобальные задачи: Головная организация поставщик поставщик поставщик HTML 1С Company Logo
Скачивание каталога продукциив html-формате 1. Получение данных с указанного URL 2. Извлечение содержимого из полученной страницы 3. Дополнительная обработка и вывод на сайте Company Logo
Скачивание каталога продукциив html-формате • 1. Получение данных с указанного URL Для этого в РНР существует несколько возможностей: Соединение через сокеты fsockopen fopen file_get_contents БиблиотекаcURL Открываем сокет Log Сервер $fp = fsockopen($host, 80, $errno, $errstr, 20); Строка заголовка для пакета Пакет Ответ $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); Company Logo
Скачивание каталога продукциив html-формате • 2. Извлечение содержимого из страницы … <div class="content"> Мама мыла раму </div> <div class="footer"> … Регулярные выражения Мама мыла раму Company 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. Сохранение обработанного текста во временное хранилище Company Logo
Скачивание каталога продукциив html-формате • 4. Отображение на сайте подразделения Company Logo
Обновление каталогов продукцииот разных поставщиков • О проекте поставщик поставщик поставщик аналог бронь заказ запрос Покупатель Company Logo
Обновление каталогов продукцииот разных поставщиков • Способы загрузки данных Поставщики передают свои данные разными способами: • HTTP c Basic-авторизацией $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); • FTP Устанавливаем соединение $conn_id = ftp_connect($server_); Передаем логин и пароль Log $result = ftp_login($conn_id, $login_, $pass_); Скачиваем server_file и сохраняем в local_file ftp_get($conn_id, $local_file, $server_file, FTP_ASCII); Company Logo
Обновление каталогов продукцииот разных поставщиков • Архивы с данными ZIP-файл PCLZip $archive = new PclZip('archive.zip');$list = $archive->extract(PCLZIP_OPT_BY_NAME, "data/archive.xml", PCLZIP_OPT_EXTRACT_AS_STRING); XML-данные Company Logo
Обновление каталогов продукцииот разных поставщиков • Варианты обработки XML В PHP существует несколько встроенных вариантов обработки XML - SimpleXML, DOM, SAX. • SimpleXML $xml = simplexml_load_file($file); foreach($arr as $k=>$atr) $goods[]=Array( “articul”=>$atr->articul, ”name”=>$atr->name, “price”=>$atr->price, “descr”=>$atr->description); $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 Company Logo
Обновление каталогов продукцииот разных поставщиков • Отображение на сайте Company Logo