Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Импорт " Телепрограмма в формате XMLTV" на сайт
 
 автор: Tycoon   (10.06.2009 в 15:06)   письмо автору
 
 

Имеется телепрограмма в формате 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("&nbsp;", $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("&nbsp;", $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 уж выглядело

  Ответить  
 
 автор: angelcorpc   (10.06.2009 в 19:38)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: l17l   (26.12.2009 в 08:59)   письмо автору
 
   для: angelcorpc   (10.06.2009 в 19:38)
 

где посмотреть можно как эта тв программа выглядит !

  Ответить  
 
 автор: ValeV   (26.12.2009 в 14:16)   письмо автору
 
   для: Tycoon   (10.06.2009 в 15:06)
 

Мне кажется, что там простая структура и можно читать построчно, а как выводить это дело творца.

  Ответить  
 
 автор: Лена   (26.12.2009 в 18:11)   письмо автору
 
   для: 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()

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования