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

Форум PHP

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

 

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

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

тема: разбор RSS. Вопрос времени
 
 автор: 1999   (29.03.2007 в 03:11)   письмо автору
 
 


<?php

class AminoAcid {
    var 
$name;  // aa name
    
var $symbol;    // three letter symbol
    
var $code;  // one letter code
    
var $type;  // hydrophobic, charged or neutral
    
    
function AminoAcid ($aa
    {
        foreach (
$aa as $k=>$v)
            
$this->$k $aa[$k];
    }
}

function 
readDatabase($filename
{
    
// read the XML database of aminoacids
    
$data implode(""file($filename));
    
$parser xml_parser_create();
    
xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
    
xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
    
xml_parse_into_struct($parser$data$values$tags);
    
xml_parser_free($parser);

    
// loop through the structures
    
foreach ($tags as $key=>$val) {
        if (
$key == "molecule") {
            
$molranges $val;
            
// each contiguous pair of array entries are the 
            // lower and upper range for each molecule definition
            
for ($i=0$i count($molranges); $i+=2) {
                
$offset $molranges[$i] + 1;
                
$len $molranges[$i 1] - $offset;
                
$tdb[] = parseMol(array_slice($values$offset$len));
            }
        } else {
            continue;
        }
    }
    return 
$tdb;
}

function 
parseMol($mvalues
{
    for (
$i=0$i count($mvalues); $i++) {
        
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
    }
    return new 
AminoAcid($mol);
}

$db readDatabase("moldb.xml");
echo 
"** Database of AminoAcid objects:\n";
print_r($db);

?> 


все делал по этому принципу. так вот, поблемка в том, что страница с отформатированными ссылками итд. грузится от 4 до 10 секунд, что не может радовать... еслть ли тогдла вобще смысл использовать разбор этих лент на своих страничках, или может быть есть способ побыстрей?

   
 
 автор: Trianon   (29.03.2007 в 09:43)   письмо автору
 
   для: 1999   (29.03.2007 в 03:11)
 

Каков размер входнгого XML и размер сгенерированной страницы?
тройной вложенный цикл.... тяжеловато.... попроще никак нельзя?
Между прочим, причем тут RSS?

   
 
 автор: 1999   (29.03.2007 в 10:15)   письмо автору
 
   для: Trianon   (29.03.2007 в 09:43)
 

Входной поток весит 11,61 КБ (http://news.yandex.ru/Russia/sport.rss). Страница на выходе - 11,56 КБ (ипользую только все description, pubDate и link'и потока). А как можно проще???

ЗЫ. Пришлось использовать все это пришлось после неудачи с DOM'ом и DOM XML'ем (http://softtime.ru/forum/read.php?id_forum=1&id_theme=34820&page=1) - проблема была в позициях всех этих элементов (description итд).

> Между прочим, причем тут RSS?
всмысле? RSS же и есть формат ленты новостей

   
 
 автор: Trianon   (29.03.2007 в 10:28)   письмо автору
 
   для: 1999   (29.03.2007 в 10:15)
 

>Входной поток весит 11,61 КБ (http://news.yandex.ru/Russia/sport.rss). Страница на выходе - 11,56 КБ (ипользую только все description, pubDate и link'и потока).

Это кошмарно долго для такого объема.

>А как можно проще???
Я же Вам показал, здесть - http://softtime.ru/forum/read.php?id_forum=1&id_theme=34820&page=1 .
До блеска не вылизано, но работает мгновенно практически. От порядка (позиции) тегов не зависит. Памяти лишней почти не тратит. Никакого DOM там нет. Совместимость на уровне PHP4 (и может быть даже 3) .

>ЗЫ. Пришлось использовать все это пришлось после неудачи с DOM'ом и DOM XML'ем (http://softtime.ru/forum/read.php?id_forum=1&id_theme=34820&page=1) - проблема была в позициях всех этих элементов (description итд).
>
>> Между прочим, причем тут RSS?
>всмысле? RSS же и есть формат ленты новостей

А причем там тогда все эти аминокислоты?

   
 
 автор: 1999   (29.03.2007 в 10:48)   письмо автору
 
   для: Trianon   (29.03.2007 в 10:28)
 

там используется CURL, которого к сожалению нет на хостинге, где будет стоять сайт...
дома CURL тоже не стоял (выводил что undefined function curl_init), потом включил CURL на уровне пхп.ини и эта страница просто-напросто не загрузилась (maximum time limit exceeded)

ЗЫ. Там просто пример на тему аминокислот, я не стал пока менять названия переменных

   
 
 автор: Trianon   (29.03.2007 в 11:41)   письмо автору
 
   для: 1999   (29.03.2007 в 10:48)
 

При чем тут CURL ?
CURL - лишь средство достать файл. Замените вызов get_url на file_get_contents() - там даже строка в комментариях осталась. Процедура разбора от этого никак не зависит.

Давайте всё ж не будем смешивать вопросы "Как скачать файл из инета" и "Как разобрать xml-файл на элементы".

   
 
 автор: 1999   (29.03.2007 в 14:43)   письмо автору
 
   для: Trianon   (29.03.2007 в 11:41)
 

аа ступил я(( спасибо что раъяснили
а по скорости если пользоваться curl'овские доставания файла у file_get_contents выигрывают или нет? чем лучше пользоваться?

зы. в любом случае ваш скрипт использует 5 версию пхп, что пока не радует... (бывают еще динозавры.. боюсь что этот хостер такой)

   
 
 автор: Trianon   (30.03.2007 в 01:21)   письмо автору
 
   для: 1999   (29.03.2007 в 14:43)
 

curl я применяю по двум причинам.
1. Эстетическая. Я всё же считаю file_get_contents функцией файловой, а не коммуникационной. И если url-wrapper к ней у какого либо хостера будет отключен - меня это совершенно не удивит. curl же заточен именно под то, что я от него требую. Взять удаленный документ.

2. Утилитарная. На работе у меня прямого интернета нет. Только прокси. Так что никакой file_get_content в принципе невозможен. Получение документа сокетами возможно, но код отличается от прямого изрядно. А Curl переключить на прокси - одну строку раскомментарить. Так что сам бог велел.

Никакую пятую версию мой скрипт не использует. Все средства, которыми я пользуюсь, есть в четвертой, я это специально подчеркнул.

   
 
 автор: 1999   (29.03.2007 в 14:44)   письмо автору
 
   для: Trianon   (29.03.2007 в 11:41)
 

и еще момент

> До блеска не вылизано
а что там не так?

P.S. получившаяся структура не радует... хоть по времени безусловно потрясно, но сами элементы нужные мне находятся на 6-7 уровне вложенности массива... как бы этого избежать?

   
 
 автор: 1999   (29.03.2007 в 23:31)   письмо автору
 
   для: 1999   (29.03.2007 в 14:44)
 

.

   
 
 автор: Trianon   (30.03.2007 в 01:26)   письмо автору
 
   для: 1999   (29.03.2007 в 14:44)
 

>и еще момент
>
>> До блеска не вылизано
>а что там не так?
>
>P.S. получившаяся структура не радует... хоть по времени безусловно потрясно, но сами элементы нужные мне находятся на 6-7 уровне вложенности массива... как бы этого избежать?

вот в частности структура недолизана.
В принципе можно вообще сделать так, чтоб скрипт мог обрабатывать неограниченного размера XMLы.
Но если Вам ехать нужно, а не шашечки, то эти мелочи трогать Вас врядли будут.
массив со списком можно из всей структуры забрать одним присваиванием, сразу уменьшив вложенность раза в два-три.
Хотя сама по себе она не так уж страшна. По ней же рекурсии нет? Тогда что за страх?

   
 
 автор: 1999   (30.03.2007 в 02:01)   письмо автору
 
   для: Trianon   (30.03.2007 в 01:26)
 

> массив со списком можно из всей структуры забрать одним присваиванием, сразу уменьшив вложенность раза в два-три
не понял где именно это нужно сделать...

> Тогда что за страх?
по сути мне нужны всего 10 последних событий. Т.е. 10 description'ов итд. Боюсь что придется к ним обращаться после всего этого так:

$desc1 = $out['ref']['sub']['RSS'][0]['SUB']['ITEM'][$i]


> Никакую пятую версию мой скрипт не использует. Все средства, которыми я пользуюсь, есть в четвертой, я это специально подчеркнул.
simplexml_load_string работает только с 5 версией пхп. Курлы тоже работают не всегда.

И кстати Вы не ответили на вопрос - что будет быстрей работать - курлы или file_get_contents?

   
 
 автор: Trianon   (30.03.2007 в 10:12)   письмо автору
 
   для: 1999   (30.03.2007 в 02:01)
 

>по сути мне нужны всего 10 последних событий. Т.е. 10 description'ов итд. Боюсь что придется к ним обращаться после всего этого так:
>

>$desc1 = $out['ref']['sub']['RSS'][0]['SUB']['ITEM'][$i]
>

Вы издеваетесь, наверное....

   $item = $out['ref']['sub']['RSS'][0]['sub']['CHANNEL'][0]['sub']['ITEM'];
   unset($out);
   $item = array_slice($item, max(0, count($item)-10));
   foreach($item as $k => $v)
   {
      $r = array();
      foreach($v['sub'] as $tag => $val) $r[$tag] = $val[0]['data'];
      $out[$k] = $r;
   }
   unset($item);
   echo '<pre>';
   print_r($out);


>
>> Никакую пятую версию мой скрипт не использует. Все средства, которыми я пользуюсь, есть в четвертой, я это специально подчеркнул.
>simplexml_load_string работает только с 5 версией пхп.

Ну точно издеваетесь. simplexml_load_string там не использовалась. Она осталась под комментарием со времени черновой отладки. xml_parse же реализован еще в PHP 3.0.6

>курлы тоже работают не всегда.

curl реализован с 4.0.6. И вообще curl - лишь транспорт, выкиньте его вообще, раз он Вам так не нравится. Тащите RSS-поток хоть силой мысли - спич не о том.
file_get_contents реализован с 4.3 и Вы вполне можете столкнуться с тем, что такой функции нет, а curl - есть.

>
>И кстати Вы не ответили на вопрос - что будет быстрей работать - курлы или file_get_contents?

Полагаю, что одинаково. Вы можете проверить сами.

   
 
 автор: 1999   (30.03.2007 в 10:54)   письмо автору
 
   для: Trianon   (30.03.2007 в 10:12)
 

спасибо

   
Rambler's Top100
вверх

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