Подскажите хороший RSS парсер

SlayerR
На сайте с 21.07.2007
Offline
43
1457

Здравствуйте! Подскажите пожалуйста хорошенький RSS парсер с инструкцией по установке на русском языке. Спасибо.

Уникальный контент по приятным ценам (http://www.textsale.ru/team26170.html)
Terys
На сайте с 28.03.2007
Offline
137
#1

Бесплатных нет.

GR (https://rs.grnet.ru/add/) - реклама от 99 р.
SlayerR
На сайте с 21.07.2007
Offline
43
#2

Может я неправильно выразился:) Мне нужен скриптик, который бы транслировал RSS новости с других сайтов по заданной тематике. Такой можно найти бесплатно?

Terys
На сайте с 28.03.2007
Offline
137
#3

Ну разве что WP+плагин.

mescalito88
На сайте с 04.11.2006
Offline
41
#4

Код rss.php :


<?
// Класс для работы с RSS
// Alexander S Kostestky ( alexk-at-flashmaster-ru )

class rss{
// Переменные класса
var $sUrl;
var $sBuff;
var $rXml_parser;
var $aParentField;
var $aCurrrentField;
var $aCurrentNamespace;
var $aRss;
var $aItems;
var $aChannel;
// Конструктор класса
function rss($url=""){
if(!isset($url) || empty($url)){
echo "no RSS url";
exit();
}
// Инициализация переменных
$this->aChannel = array();
$this->aItems = array();
$this->aRss = array($this->aChannel, $this->aItems);
$this->aParentField = array();
$this->xml_parser = undef;
$this->sUrl = strval($url);
// Метод запроса RSS документа
$this->GetUrl();
// Метод разбора RSS документа
$this->ParseRss();
}
// Метод запроса RSS документа
function GetUrl(){
set_time_limit(0);
$this->sBuff = join ("", file($this->sUrl));
//echo $this->sBuff."\n\n<hr>";
}
// Метод разбора RSS документа
function ParseRss(){
$this->rXml_parser = xml_parser_create();
xml_set_object($this->rXml_parser, &$this);
xml_set_element_handler($this->rXml_parser, "starttag", "endtag");
xml_set_character_data_handler($this->rXml_parser, "cdata");
if (!xml_parse($this->rXml_parser, $this->sBuff)) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($this->rXml_parser)),
xml_get_current_line_number($this->rXml_parser))
);
}
xml_parser_free($this->rXml_parser);
$this->aRss = array("channel" => $this->aChannel, "items" => $this->aItems);
}
/*
/ Метод GetArrayRss
/ @return массив с данными - результат разбора всего RSS документа
*/
function GetArrayRss(){
return $this->aRss;
}
/*
/ Метод GetChannelVal
/ @return строка с данными одного поля из ветки channel
*/
function GetChannelVal($sVal){
return $this->aChannel[$sVal];
}
/*
/ Метод GetArrayChannel
/ @return массив с данными ветки channel
*/
function GetArrayChannel(){
return $this->aChannel;
}
/*
/ Метод GetArrayItem
/ @return массив с данными ветки item
*/
function GetArrayItem(){
return $this->aItems;
}
/*
/ Метод starttag
/ Метод разбора открывающихся тегов в RSS документе
/ @return void
*/
function starttag($rXml_parser, $tag, $attributes){
$tag = strtolower( $tag );
$namespace = false;
if ( strpos( $tag, ':' ) ) {
list($namespace, $tag) = split( ':', $tag, 2);
}
$this->aCurrrentField = $tag;
if ( $namespace and $namespace != 'rdf' ) {
$this->aCurrentNamespace = $namespace;
}
if ( $tag == 'channel' ) {
array_unshift( $this->aParentField, 'channel' );
}elseif ( $tag == 'items' ) {
array_unshift( $this->aParentField, 'items' );
}elseif ( $tag == 'item' ){
array_unshift( $this->aParentField, 'item' );
}elseif ( $tag == 'cdatainput' ) {
array_unshift( $this->aParentField, 'cdatainput' );
}elseif ( $tag == 'image' ) {
array_unshift( $this->aParentField, 'image' );
}
}
/*
/ Метод endtag
/ Метод разбора закрывающихся тегов в RSS документе
/ @return void
*/
function endtag($rXml_parser, $tag){
$tag = strtolower($tag);
if ( $tag == 'item' ) {
$this->aItems[] = $this->current_item;
$this->current_item = array();
array_shift( $this->aParentField );
}elseif ( $tag == 'channel' or $tag == 'items' or $tag == 'cdatainput' or $tag == 'image' ) {
array_shift( $this->aParentField );
}
$this->aCurrrentField = '';
$this->aCurrentNamespace = false;
}
/*
/ Метод cdata
/ Метод разбор данных между открывающимися и закрывающимися тегами
/ @return void
*/
function cdata($rXml_parser, $cdata){
if ( $this->aParentField[0] == $this->aCurrrentField || !$this->aCurrrentField ){
return;
}elseif ( $this->aParentField[0] == 'channel') {
if ( $this->aCurrentNamespace ) {
$this->aChannel[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata;
}else{
$this->aChannel[ $this->aCurrrentField ] .= $cdata;
}
}elseif ( $this->aParentField[0] == 'item' ){
if ( $this->aCurrentNamespace ) {
$this->current_item[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata;
}else{
$this->current_item[ $this->aCurrrentField ] .= $cdata;
}
}elseif ( $this->aParentField[0] == 'cdatainput' ) {
if ( $this->aCurrentNamespace ) {
$this->cdatainput[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata;
}else{
$this->cdatainput[ $this->aCurrrentField ] .= $cdata;
}
}elseif ( $this->aParentField[0] == 'image' ) {
if ( $this->aCurrentNamespace ) {
$this->image[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata;
}else{
$this->image[ $this->aCurrrentField ] .= $cdata;
}
}
}
}
?>

Код вывода текста:


<?
require("rss.php");
$rssurl = "http://news.yandex.ru/software.rss";
$cRss = new rss($rssurl);
$item = $cRss->GetArrayItem();
for($i=0;$i<count($item);$i++)
{
if(!$item[$i]) break;
$url = $item[$i]['link'];
echo "<a href=\"/news/".($i+1)."/\" title=\"".$item[$i]['title']."\"><B>".$item[$i]['title']."</B></a><BR>";
}
?>
Питайся сырой растительной пищей (http://livelymeal.ru/my-bezzashhitny/) и не нужна будет никакая медицина
Mad Cat
На сайте с 29.01.2006
Offline
89
#5

Можете подзаточить SimplePie или MagpieRSS.

Профессиональное тестирование ПО и web-сервисов (http://www.testlab2.com)
BrokenBrake
На сайте с 03.03.2007
Offline
194
#6

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

A
На сайте с 12.01.2006
Offline
61
#7
Terys:
Ну разве что WP+плагин.

а что за плагин?

ГЛАВная фарма-партнерка. Удобные аптеки, детальная статистика, высокий конверт! (http://www.glavmed.com/) | 150$ Бонус всем новичкам в ПОКЕРЕ (http://ru.pokerstrategy.com/u1XCQ7) $$$ на дороге (http://www.sape.ru/r.b17970ce21.php)
mescalito88
На сайте с 04.11.2006
Offline
41
#8
Apalon:
а что за плагин?

http://codex.wordpress.org/Plugins/Syndication

A1
На сайте с 05.10.2006
Offline
12
#9

lastrss.oslab.net

с примерами его использования.

SlayerR
На сайте с 21.07.2007
Offline
43
#10

Спасибо всем откликнувшимся:)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий