|
|
|
|
|
для: 1999
(11.03.2007 в 17:59)
| | Ну я с ним никогда не работал, так что помочь не могу. | |
|
|
|
|
|
|
|
для: Саня
(11.03.2007 в 17:50)
| | а нет варианта для DOM XML? | |
|
|
|
|
|
|
|
для: 1999
(11.03.2007 в 17:28)
| | В php4 можно использовать XML Parser и регулярные выражения.
<?php
$content = file_get_contents("http://news.yandex.ru/Russia/computers.rss");
preg_match_all("!<item>\s*<title>(.+)</title>\s*".
"<link>(.+)</link>\s*".
"<description>(.+)</description>\s*".
"<pubDate>(.+)</pubDate>.+</item>!isU", $content, $m);
for ( $i = 0; $i < count($m[0]); $i++ ) {
print '<h3><a href="'.$m[2][$i].'">'.$m[1][$i]."</a></h3>\n".
"<p>".htmlspecialchars_decode($m[3][$i]).
"</br>\n".$m[4][$i]."</p></br>\n\n";
}
|
| |
|
|
|
|
|
|
|
для: Саня
(11.03.2007 в 16:57)
| | а как лучше подстроить под 4 пхп? ведь DOM XML вроде отличается от DOM только названиями ф-ций.... | |
|
|
|
|
|
|
|
для: 1999
(11.03.2007 в 16:31)
| | Вот код с автоматическим преобразованием в cp1251:
<?php
$content = file_get_contents("http://news.yandex.ru/Russia/computers.rss");
$dom = DOMDocument::LoadXML($content);
$items = $dom->GetElementsByTagName("item");
for ($i = 0; $i < $items->length; $i++) {
$child = $items->item($i)->childNodes;
$link = $child->item(3)->nodeValue;
$title = iconv("UTF-8", "WINDOWS-1251", $child->item(1)->nodeValue);
$description = iconv("UTF-8", "WINDOWS-1251", $child->item(5)->nodeValue);
print '<h3><a href="'.$link.'">'.$title."</a></h3>\n".
"<p>".$description."<br/>\n".
$child->item(7)->nodeValue.
"</p></br>\n\n";
}
|
> и кстати еще момент... если на сервере стоит 4.4.2, то все это работать не будет, так?
не будет | |
|
|
|
|
|
|
|
для: Саня
(15.02.2007 в 00:50)
| | собственно хочу поднять тему из-за извечной проблемы кодировки
как сделать, чтоб результаты обработки RSS этим скриптом отображались не каракулями, а нормальными русскими буквами?
Просто не хочется извращаться так как указано было:
<?php
header('Content-type: text/html; charset=windows1251');
//...
$xml = iconv('windows-1251', 'urf-8', $xml);
//...
ob_start();
print_r($array)
$text = ob_get_contents();
ob_end_clean();
print iconv('utf-8', 'windows-1251', $text);
?>
|
и кстати еще момент... если на сервере стоит 4.4.2, то все это работать не будет, так? | |
|
|
|
|
|
|
|
для: 1999
(14.02.2007 в 22:28)
| |
<?php
$content = file_get_contents("http://news.yandex.ru/Russia/computers.rss");
$dom = DOMDocument::LoadXML($content);
$items = $dom->GetElementsByTagName("item");
for ($i = 0; $i < $items->length; $i++) {
$child = $items->item($i)->childNodes;
$link = $child->item(3)->nodeValue;
print '<h3><a href="'.$link.'">'.$child->item(1)->nodeValue."</a></h3>\n".
"<p>".
$child->item(5)->nodeValue."<br/>\n".
$child->item(7)->nodeValue.
"</p></br>\n\n";
}
|
http://softtime.ru/forum/read.php?id_forum=1&id_theme=30966
http://softtime.ru/forum/read.php?id_forum=1&id_theme=30985 | |
|
|
|
|
|
|
|
для: Loki
(14.02.2007 в 10:01)
| | а можно какой-нить пример простенький с ДОМом, а то там пхп.нет такое...
нру хотя бы разбор яндексовской какой-нить ленты | |
|
|
|
|
|
|
|
для: 1999
(14.02.2007 в 00:16)
| | 1 DOMXML работает в 4 версии, в пятой - domDocument. Утверждается что быстрее, но я замеров не проводил.
2. нет. регулярки тут не используются.
У метода есть два больших недостатка: на входе требуется валидный xml. Впрочем, при желании можно так с исходниками накосячить, что никакие регулярки не поймут. И требуется полностью загрузить документ (иначе не убедится в его валидности) | |
|
|
|
|
|
|
| Собственно навеяно этим - http://php.net/dom
Всегда думал, что RSS надо разбирать регулярками, но после поста Loki в предыдущей теме о разборе потока с яндекса поглядел это и.. офигел... это что за зверство?
собственно вопросов 3:
1) это все работает только в 5 версии пхп? и если нет, то вобще как оно все, быстрее регулярок? или нет?
2) в любом случае ругулярки используются и тут.. ну как я понял.. так имеет смысл переходить на этот способ?
3) а ф-ции xml_load_engine - вобще получается к разбору XML-документа не относятся? | |
|
|
|
|