|
|
|
| Имеется телепрограмма в формате XMLTV http://www.teleguide.info/download/new3/xmltv.xml.gz
требуется выводить на сайте эту программу, сам файл весит 9,48 МБ (9 946 177 байт) , пытаюсь написать скрипт для парсинга , получается типа того:
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 = "xmltv.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);
|
в браузер выводится дерево элементов типа :
Element: TV
Attribute: GENERATOR-INFO-NAME = TVH_W/1.0
Attribute: GENERATOR-INFO-URL = http://www.teleguide.info/
Element: CHANNEL
Attribute: ID = 1
Element: DISPLAY-NAME
Attribute: LANG = ru
String: Первый канал
Element: CHANNEL
Attribute: ID = 2
Element: DISPLAY-NAME
Attribute: LANG = ru
String: Россия
Element: CHANNEL
Attribute: ID = 3
Element: DISPLAY-NAME
Attribute: LANG = ru
String: ТВЦ
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
и.т.д. до конца
|
вопрос первый, как мне нормально вывести это для отображения в ХТМЛ т.е. в нормальный вид чтобы на сайте отображалось
вопрос второй т.к. фал весит почти 10 МБ браузер гибнет во время парсинга
вопрос третий есть ли альтернативный способ вывод этой программы в ХМЛ формате на сайте чтобы примерно ка кна tv.mail.ru уж выглядело | |
|
|
|
|
|
|
|
для: Tycoon
(10.06.2009 в 15:06)
| | Может быть я не до конца понял что требуется, но на всякий случай даю свой скрипт, правда он для погоды, но поблем с переводом под свой файл не должно возникнуть:)
$town = $_GET['town'];
$file = 'http://informer.gismeteo.ru/xml/'.$town.'_1.xml';
$xml = simplexml_load_file($file);
$dats = array();//массив с датами
$osad = array();//массив с осадками
$davl = array();//массив с давлением
$temp = array();//массив с температурой
$wind = array();//массив с ветром
$vlag = array();//массив с влажностью
$komf = array();//массив с комфортной температурой
$txto = array();//массив с выводимой инфой.
$mnth = array ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');//месяц
$ned = array ('Воскресение', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота');//День недели
$sut = array ('ночь', 'утро', 'день', 'вечер');//Врамя суток
$obl = array ('ясно', 'малооблачно', 'облачно', 'пасмурно');//Облачность
$tosad = array ('дождь', 'ливень', 'снег', 'снег', 'гроза', '-', 'без осадков');//Осадки
$nwnd = array ('серевный', 'северо-восточный', 'восточный', 'юго-восточный', 'южный', 'юго-западный', 'западный', 'северо-зепедный');//напрвление ветра
$sname = $xml->REPORT->TOWN[0]['sname'];//Название города
$shir = $xml->REPORT->TOWN[0]['latitude'];//Широта
$dolg = $xml->REPORT->TOWN[0]['longitude'];//Долгота
for ($i = 0; $i <= 3; $i++)
{
$dats[$i]['day'] = $xml->REPORT->TOWN[0]->FORECAST[$i]['day'];
$dats[$i]['month'] = $mnth [(int)$xml->REPORT->TOWN[0]->FORECAST[$i]['month'] - 1];
$dats[$i]['year'] = $xml->REPORT->TOWN[0]->FORECAST[$i]['year'];
$dats[$i]['tod'] = $sut [(int)$xml->REPORT->TOWN[0]->FORECAST[$i]['tod']];
$dats[$i]['weekday'] = $ned [(int)$xml->REPORT->TOWN[0]->FORECAST[$i]['weekday'] - 1];
$osad[$i]['cloud'] = $obl [(int)$xml->REPORT->TOWN[0]->FORECAST[$i]->PHENOMENA['cloudiness']];
$osad[$i]['osad'] = $tosad [(int)$xml->REPORT->TOWN[0]->FORECAST[$i]->PHENOMENA['precipitation'] - 4];
$osad[$i]['vozmo'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->PHENOMENA['rpower'];
$osad[$i]['vozmg'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->PHENOMENA['spower'];
$davl[$i]['max'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->PRESSURE['max'];
$davl[$i]['min'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->PRESSURE['min'];
$temp[$i]['max'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->TEMPERATURE['max'];
$temp[$i]['min'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->TEMPERATURE['min'];
$wind[$i]['max'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->WIND['max'];
$wind[$i]['min'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->WIND['min'];
$wind[$i]['napr'] = $nwnd [(int)$xml->REPORT->TOWN[0]->FORECAST[$i]->WIND['direction']];
$vlag[$i]['max'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->RELWET['max'];
$vlag[$i]['min'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->RELWET['min'];
$komf[$i]['max'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->HEAT['max'];
$komf[$i]['min'] = $xml->REPORT->TOWN[0]->FORECAST[$i]->HEAT['min'];
}
|
а дальше работаешь уже с массивами.
Правда я не знаю как он будет везти себя при 10мб файле...
P.S. на всякий случай для наглядности сам xml файл:
<?xml version="1.0" encoding="UTF-8"?>
<MMWEATHER>
<REPORT type="frc3">
<TOWN index="27612" sname="%CC%EE%F1%EA%E2%E0" latitude="56" longitude="38">
<FORECAST day="17" month="1" year="2009" hour="3" tod="0" predict="18" weekday="7">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="752" min="750"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="3" max="6" direction="2"/>
<RELWET max="97" min="92"/>
<HEAT min="-4" max="-2"/>
</FORECAST>
<FORECAST day="17" month="1" year="2009" hour="9" tod="1" predict="24" weekday="7">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="754" min="752"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="5" max="9" direction="2"/>
<RELWET max="95" min="90"/>
<HEAT min="-8" max="-6"/>
</FORECAST>
<FORECAST day="17" month="1" year="2009" hour="15" tod="2" predict="30" weekday="7">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="754" min="752"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="5" max="9" direction="2"/>
<RELWET max="95" min="90"/>
<HEAT min="-9" max="-7"/>
</FORECAST>
<FORECAST day="17" month="1" year="2009" hour="21" tod="3" predict="36" weekday="7">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="754" min="752"/>
<TEMPERATURE max="-4" min="-6"/>
<WIND min="5" max="9" direction="2"/>
<RELWET max="96" min="91"/>
<HEAT min="-10" max="-8"/>
</FORECAST>
</TOWN>
</REPORT>
</MMWEATHER> | |
|
|
|
|
|
|
|
для: angelcorpc
(10.06.2009 в 19:38)
| | где посмотреть можно как эта тв программа выглядит ! | |
|
|
|
|
|
|
|
для: Tycoon
(10.06.2009 в 15:06)
| | Мне кажется, что там простая структура и можно читать построчно, а как выводить это дело творца. | |
|
|
|
|
|
|
|
для: Tycoon
(10.06.2009 в 15:06)
| | >вопрос первый, как мне нормально вывести это для отображения в ХТМЛ т.е. в
>нормальный вид чтобы на сайте отображалось
Парсите и сразу же выводите, в примере из мануала, который вы использовали, так и делается через echo. Если по каким-то причинам(например, для использования в шаблоне) не хотите сразу выводить, - собирайте в массив и потом уже выводите.
>вопрос второй т.к. фал весит почти 10 МБ браузер гибнет во время парсинга
Можно попробовать поставить вначало скрипта системную переменную:
ini_set('max_execution_time',0);
Но если хостер захочет ограничить время, это работать не будет.
Можно отредактировать файл php.ini,если к нему есть доступ.
>вопрос третий есть ли альтернативный способ вывод этой программы в ХМЛ формате
>на сайте чтобы примерно ка кна tv.mail.ru уж выглядело
альтернатива - simplexml_load_string(), simplexml_load_file() | |
|
|
|
|