|
|
|
| Здравствуйте.
1) Есть сайт и на нем нужно выводить каталог продукции (все довольно стандартно - цена, описание, фотография и т.д.).
2) Есть xml-файл в котором содержится вся эта информация. Сам файл находится на другом сервере, все пароли и логины, которые необходимы - есть.
Собственно вопрос:
Что именно нужно делать, чтобы выводить данный каталог?
Как я понял - нужно задать частоту парсинга (к примеру парсить новые данные раз в неделю), сделать таблицу где хранить эти данные и уже из таблицы их выводить. Я правильно все понял?
P.S. прошу отнестись с пониманием - такая задача передо мной впервые.
И собственно - если саму суть я понял правильно, то прошу накидать сюда линков с материалом по теме - как все это реализовать.
Если еще практическими примерами поможете - то вообще будет супер. | |
|
|
|
|
|
|
|
для: Dizels
(05.03.2010 в 14:56)
| | Прошу помочь с моим вопросом. | |
|
|
|
|
|
|
|
для: Dizels
(05.03.2010 в 19:06)
| | Пока, единственное что нашел - это вот такой код:
<?php
function startElement($parser, $name, $attrs) // $parser - уникальный идентификатор парсера
// (т.к. мы можем использовать несколько парсеров)
// $name - имя обнаруженного элемента
// $attrs - массив атрибутов обнаруженного элемента
{
global $depth;
echo str_repeat(" ", $depth * 3); // отступы
echo "<b>Element: $name</b><br>"; // имя элемента
$depth++; // увеличиваем глубину, чтобы браузер показал отступы
foreach ($attrs as $attr => $value)
{
echo str_repeat(" ", $depth * 3); // отступы
// выводим имя атрибута и его значение
echo 'Attribute: ' . $attr . ' = ' . $value . '<br>';
}
}
function endElement($parser, $name)// $parser - уникальный идентификатор парсера
// $name - имя обнаруженного элемента
{
global $depth;
$depth--; // уменьшаем глубину
}
function stringElement($parser, $str) {
if (strlen(trim($str)) > 0) {
global $depth;
echo str_repeat(" ", $depth * 3); // отступ
echo 'String: '.$str.'<br>'; // выводим строку
}
}
$depth = 0;
$file = "name.xml";
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, 'stringElement');
if (!($fp = fopen($file, "r")))
{
die("could not open XML input");
}
while ($data = fgets($fp))
{
if (!xml_parse($xml_parser, $data, feof($fp)))
{
echo "<br>XML Error: ";
echo xml_error_string(xml_get_error_code($xml_parser));
echo " at line " . xml_get_current_line_number($xml_parser);
break;
}
}
xml_parser_free($xml_parser);
?>
|
Файл считывается. Но вот что дальше делать - никак не пойму. (Я саму теорию решения поставленной задачи (см. первое сообщение) понять не могу - что к чему и какова последовательность)/ | |
|
|
|
|
|
|
|
для: Dizels
(05.03.2010 в 19:29)
| | А зачем хранить в базе? Вы можете выводить прямо из xml-файла, Соответственно информация будет изменяться вместе с данными из файла. | |
|
|
|
|
|
|
|
для: vadimka
(05.03.2010 в 22:49)
| | Зачем постоянно перезапрашивать чужой сервер? А если он временно недоступен? Читать из XML это лишние телодвижения. Каталог продукции меняется не так часто, чтобы поддерживать его актуальность такой ценой.
для: Dizels (05.03.2010 в 14:56)
Вы рассуждаете правильно. Создавайте таблицу и перезаписывайте ее каждый раз новой информацией из файла XML. Частоту обновления таблицы выбирайте в зависимости от частоты изменения самого каталога. И сохраняйте дату последнего обновления таблицы (при выводе можно указывать от какой даты этот каталог). | |
|
|
|
|
|
|
|
для: Dizels
(05.03.2010 в 14:56)
| | Вот это посмотрите - http://softtime.ru/forum/read.php?id_forum=6&id_theme=67587. Там разные способы, может, Вам хотя бы принцип подойдет.
>Как я понял - нужно задать частоту парсинга
Скрипт повесить на крон.
Вам надо или парсить и сразу же внутри функции startElement складывать в базу, или то, что напарсили, складывать в массив, а потом уже после парсинга складывать все в базу.
>P.S. прошу отнестись с пониманием - такая задача передо мной впервые.
Ну все когда-нибудь тянут что-то чужое... Все равно воровать - некрасиво. | |
|
|
|
|
|
|
|
для: Лена
(06.03.2010 в 00:47)
| | >Ну все когда-нибудь тянут что-то чужое... Все равно воровать - некрасиво.
Автор утверждает, что права доступа у него наличествуют. | |
|
|
|
|
|
|
|
для: Dizels
(05.03.2010 в 14:56)
| | >Как я понял - нужно задать частоту парсинга (к примеру парсить новые данные раз в неделю),
Было бы неплохо, чтобы вещи назывались своими именами.
В частности, парсинг - это синтаксический анализ. И не более того. | |
|
|
|
|
|
|
|
для: Trianon
(06.03.2010 в 00:53)
| | Было бы еще лучше, если бы на этом форуме суть ответов соответствовала сути вопроса, а не его формулировке. | |
|
|
|
|
|
|
|
для: buldovsky
(06.03.2010 в 14:45)
| | По поводу "парсинга" - извините, Trianon - прав, я не сильно пока владею всеми этими определениями и формулировками, поэтому могу что-то напутать.
По поводу воровства - полная чушь - я написал, что имеется доступ. Поэтому я НИЧЕГО НЕ ВОРУЮ.
За ссылки и подсказки большое спасибо, сегодня буду разбираться. | |
|
|
|
|
|
|
|
для: Dizels
(09.03.2010 в 09:22)
| | В приведенном выше коде - проблема с кодировкой - отображаются кракозяблики, как это поправить?
сам xml документ в кодировке windows-1251 | |
|
|
|
|
|
|
|
для: Dizels
(09.03.2010 в 13:36)
| | Все еще не решена проблема с кодировкой.
Попробовал вот так:
echo '<h3>' , iconv("windows-1251", "UTF-8", $tov_name) , '</h3>';
|
Но почему-то не переводит :( | |
|
|
|
|
|
|
|
для: Dizels
(09.03.2010 в 14:15)
| | Проблема решена, на всякий случай для тех у кого возникла такая жеп роблема, нужно писать не:
iconv("windows-1251", "UTF-8", $tov_name)
|
a
iconv("UTF-8", "windows-1251", $tov_name)
|
| |
|
|
|