Помогите оптимизировать скрипт (или указать другой путь) - парсинг RSS

serverok

Новичок
Помогите оптимизировать скрипт (или указать другой путь) - парсинг RSS

В общем пишу себе парсер RSS новостей (пишу свой так как есть некоторые свои требования + всегда знаеш, что от него ждать :D и пишу только те функции, которые мне нужны).

В общем разбираю рсс-ленту через preg_match_all (выбираю все item):

preg_match_all("/\<item>(.+?)\<\/item>/s", $rss, $items);

в результате получаю массив $items[0] в котором лежат все item из RSS.

Потом каждый item в цыкле аналогично разбираю на title, link, pubDate и description.

В результате получаю массив:
$rss[0]['title'], $rss[0]['link'], $rss[0]['pubDate'], $rss[0]['description']
$rss[1]['title'], $rss[1]['link'], $rss[1]['pubDate'], $rss[1]['description']
...
$rss[n]['title'], $rss[n]['link'], $rss[n]['pubDate'], $rss[n]['description']

Хотелось бы у всезнающего All спросить делаю ли я большую глупость или этот код более менее нормальный....

Или может можно как-то лучше разобрать переменную, такого типа:
<item>
<title>PHP homepage</title>
<link>http://php.net/</link>
<pubDate>01.01.2006</pubDate>
<description> This is PHP homepage</description>
</item>
 

serverok

Новичок
Автор оригинала: whirlwind
Ну а готовый XML-парсер чем не подходит?
смотрел я в стророну XML_parse. И меня ужаснул приведенный пример парсера для разбора БД на XML.

Вот сама БД:
<?xml version="1.0"?>
<moldb>

<molecule>
<name>Alanine</name>
<symbol>ala</symbol>
<code>A</code>
<type>hydrophobic</type>
</molecule>

<molecule>
<name>Lysine</name>
<symbol>lys</symbol>
<code>K</code>
<type>charged</type>
</molecule>

</moldb>

А вот код парсера (он меня убил):

<?php

class AminoAcid {
var $name; // имя aa
var $symbol; // трёхбуквенный символ
var $code; // однобуквенный код
var $type; // hydrophobic, charged или neutral

function AminoAcid ($aa) {
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}

function readDatabase($filename) {
// читать xml БД аминокислот
$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);

// цикл по этим структурам
foreach ($tags as $key=>$val) {
if ($key == "molecule") {
$molranges = $val;
// каждая пара вхождений массива это нижняя и верхняя
// границы диапазона для определения каждой молекулы
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);

?>
 

matross

Новичок
Да парсеров валом, нафига ж ты код сюда вылаживаешь... В гугле поищи, найди подходящий( на твое усмотрение) и юзай!
 

serverok

Новичок
Автор оригинала: matross
Да парсеров валом, нафига ж ты код сюда вылаживаешь... В гугле поищи, найди подходящий( на твое усмотрение) и юзай!
Не хочу я пользоваться теми, которых валом, когда могу сам написать свой и под свои требования.

Код привел, для того чтобы объяснить почему не пользуюсь XML_parse.
 

serverok

Новичок
Автор оригинала: white phoenix
serverok
А калькулятор ты тоже паял под свои требования?
Не повериш, но дома свой первый комп - ZX-Spectrum я вместе с отцом собирал с помощью паяльника.

2 Фанат Спасибо, развеял сомнения....
 
Сверху