|
|
|
|
<?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($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
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 секунд, что не может радовать... еслть ли тогдла вобще смысл использовать разбор этих лент на своих страничках, или может быть есть способ побыстрей? | |
|
|
|
|
|
|
|
для: 1999
(29.03.2007 в 03:11)
| | Каков размер входнгого XML и размер сгенерированной страницы?
тройной вложенный цикл.... тяжеловато.... попроще никак нельзя?
Между прочим, причем тут RSS? | |
|
|
|
|
|
|
|
для: 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 же и есть формат ленты новостей | |
|
|
|
|
|
|
|
для: 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 же и есть формат ленты новостей
А причем там тогда все эти аминокислоты? | |
|
|
|
|
|
|
|
для: Trianon
(29.03.2007 в 10:28)
| | там используется CURL, которого к сожалению нет на хостинге, где будет стоять сайт...
дома CURL тоже не стоял (выводил что undefined function curl_init), потом включил CURL на уровне пхп.ини и эта страница просто-напросто не загрузилась (maximum time limit exceeded)
ЗЫ. Там просто пример на тему аминокислот, я не стал пока менять названия переменных | |
|
|
|
|
|
|
|
для: 1999
(29.03.2007 в 10:48)
| | При чем тут CURL ?
CURL - лишь средство достать файл. Замените вызов get_url на file_get_contents() - там даже строка в комментариях осталась. Процедура разбора от этого никак не зависит.
Давайте всё ж не будем смешивать вопросы "Как скачать файл из инета" и "Как разобрать xml-файл на элементы". | |
|
|
|
|
|
|
|
для: Trianon
(29.03.2007 в 11:41)
| | аа ступил я(( спасибо что раъяснили
а по скорости если пользоваться curl'овские доставания файла у file_get_contents выигрывают или нет? чем лучше пользоваться?
зы. в любом случае ваш скрипт использует 5 версию пхп, что пока не радует... (бывают еще динозавры.. боюсь что этот хостер такой) | |
|
|
|
|
|
|
|
для: 1999
(29.03.2007 в 14:43)
| | curl я применяю по двум причинам.
1. Эстетическая. Я всё же считаю file_get_contents функцией файловой, а не коммуникационной. И если url-wrapper к ней у какого либо хостера будет отключен - меня это совершенно не удивит. curl же заточен именно под то, что я от него требую. Взять удаленный документ.
2. Утилитарная. На работе у меня прямого интернета нет. Только прокси. Так что никакой file_get_content в принципе невозможен. Получение документа сокетами возможно, но код отличается от прямого изрядно. А Curl переключить на прокси - одну строку раскомментарить. Так что сам бог велел.
Никакую пятую версию мой скрипт не использует. Все средства, которыми я пользуюсь, есть в четвертой, я это специально подчеркнул. | |
|
|
|
|
|
|
|
для: Trianon
(29.03.2007 в 11:41)
| | и еще момент
> До блеска не вылизано
а что там не так?
P.S. получившаяся структура не радует... хоть по времени безусловно потрясно, но сами элементы нужные мне находятся на 6-7 уровне вложенности массива... как бы этого избежать? | |
|
|
|
|
|
|
|
для: 1999
(29.03.2007 в 14:44)
| | . | |
|
|
|
|
|
|
|
для: 1999
(29.03.2007 в 14:44)
| | >и еще момент
>
>> До блеска не вылизано
>а что там не так?
>
>P.S. получившаяся структура не радует... хоть по времени безусловно потрясно, но сами элементы нужные мне находятся на 6-7 уровне вложенности массива... как бы этого избежать?
вот в частности структура недолизана.
В принципе можно вообще сделать так, чтоб скрипт мог обрабатывать неограниченного размера XMLы.
Но если Вам ехать нужно, а не шашечки, то эти мелочи трогать Вас врядли будут.
массив со списком можно из всей структуры забрать одним присваиванием, сразу уменьшив вложенность раза в два-три.
Хотя сама по себе она не так уж страшна. По ней же рекурсии нет? Тогда что за страх? | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: 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?
Полагаю, что одинаково. Вы можете проверить сами. | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2007 в 10:12)
| | спасибо | |
|
|
|