A quick-n-dirty RSS parser that does not require that XML support be compiled into PHP. It does require PHP v4 with PCRE support.
WebsiteBy : Matt
<?php
/*******************************************************************
* $Id: class.RSS.php3,v 0.91 2001/06/11 06:54:07 cdi Exp $
*
* class.RSS.php3
* Version: 0.91 (natch!)
* Author: Joseph Harris (CDI)
* Copyright (C) 2001, Joseph Harris
* cdi@thewebmasters.net
* http://www.thewebmasters.net/
*
*******************************************************************
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*******************************************************************
*
* I use a tab stop of (4) in my editor, so this file may look weird
* if you have your tab stop set differently.
*
* This class will completely parse RSS 0.91 compliant data.
* Reference the 'rss-0.91.dtd' included with this distribution
* or visit 'http://my.netscape.com/publish/formats/rss-0.91.dtd'
* or 'http://www.webreference.com/authoring/languages/xml/rss/1/'
*
* Requires: PHP4 w/PCRE support
*
* Basic usage is extremely simple:
*
* $rss = new RSS ($data);
*
* // The call to 'new' results in the data being parsed.
* // Data needs to be raw RSS data already obtained from a file or URL.
* // Data needs to be one big string, no pre-processing of the data is needed.
*
* $allItems = $rss->getAllItems();
* $itemCount = count($allItems);
* for($y=0;$y<$itemCount;$y++) {
* print "\nItem [$y] has data\n";
* print "[$y]: Title: " . $allItems[$y]['TITLE'];
* print "\n[$y]: Link : " . $allItems[$y]['LINK'];
* print "\n[$y]: Desc : " . $allItems[$y]['DESCRIPTION'];
* }
*
*/
class RSS
{
var $CHANNELS = array(); // Array, holds individual channel data
var $CHANNELINFO = array(); // Array that holds NON-ITEM channel data
var $COUNT = 0; // Number of channels found
function RSS ( $data = "", $simple = 0)
{
if($simple) {
// Ignore channel information, just grab <items>. Useful for
// RDF files, rss-0.9-simple and non-compliant RSS
$temp = array();
$temp[0][0] = $data;
$this->COUNT = 1;
$this->parseItems($temp);
} else {
$this->assignDATA($data);
}
}
/*
* void error ( string msg )
*/
function error ($msg="")
{
print "<H3>Error: [$msg]</H3>\n";
return;
}
/*
* int getCount ( void )
* returns the number of channels parsed or 0 if none found
*/
function getCount ()
{
return $this->COUNT;
}
/*
* array getChannel ( int channelID )
*/
function getChannel($channelID)
{
return $this->CHANNELS[$channelID];
}
/*
* array getChannelInfo ( int channelID )
*/
function getChannelInfo($channelID)
{
return $this->CHANNELINFO[$channelID];
}
/*
* int itemCount ( int channelID )
*/
function itemCount($channelID)
{
return count($this->CHANNELS[$channelID]['ITEMS']);
}
/*
* array getItems ( int channelID )
*/
function getItems($channelID)
{
return $this->CHANNELS[$channelID]['ITEMS'];
}
/*
* array getAllItems ( void )
*/
function getAllItems ()
{
$count = $this->getCount();
$ticker=0;
$allItems = array();
for ($x=0;$x<$count;$x++)
{
$itemCount = $this->itemCount($x);
$itemData = $this->getItems($x);
for($y=0;$y<$itemCount;$y++)
{
$allItems[$ticker]['TITLE'] = $itemData[$y]['TITLE'];
$allItems[$ticker]['LINK'] = $itemData[$y]['LINK'];
$allItems[$ticker]['DESCRIPTION'] = $itemData[$y]['DESCRIPTION'];
$ticker++;
}
}
return $allItems;
}
/*
* void assignData ( string data )
*/
function assignDATA ($data="")
{
if (empty($data)) {
$this->error("No RSS data submitted");
} else {
$this->parse($data);
}
return;
}
/*
* array parseChannels (string data )
*/
function parseChannels($data="")
{
$channelCount = preg_match_all("|<channel>(.*)</channel>|iUs",$data,$channels,PREG_SET_ORDER);
if(!$channelCount) {
$this->error("No channels in RSS data");
return;
} else {
$this->COUNT = $channelCount;
}
return $channels;
}
/*
* void storeItems ( string itemData, int channelID, int itemID )
*/
function storeItems($itemData="",$channelID,$itemID)
{
if(preg_match_all("|<title>(.+)</title>|iUs",$itemData,$match,PREG_SET_ORDER))
{
$title = $match[0][1];
$this->CHANNELS[$channelID]['ITEMS'][$itemID]['TITLE'] = "$title";
} else {
$this->CHANNELS[$channelID]['ITEMS'][$itemID]['TITLE'] = "";
}
if(preg_match_all("|<link>(.+)</link>|iUs",$itemData,$match,PREG_SET_ORDER))
{
$link = $match[0][1];
$this->CHANNELS[$channelID]['ITEMS'][$itemID]['LINK'] = "$link";
} else {
$this->CHANNELS[$channelID]['ITEMS'][$itemID]['LINK'] = "";
}
if(preg_match_all("|<description>(.+)</description>|iUs",$itemData,$match,PREG_SET_ORDER))
{
$desc = $match[0][1];
$this->CHANNELS[$channelID]['ITEMS'][$itemID]['DESCRIPTION'] = "$desc";
} else {
$this->CHANNELS[$channelID]['ITEMS'][$itemID]['DESCRIPTION'] = "";
}
return;
}
/*
* void storeChannelData ( string data, int channelID )
*/
function storeChannelData($data="",$channelID)
{
$data = str_replace("<channel>","",$data);
$data = str_replace("</channel>","",$data);
$lines = split("\n",$data);
while ( list ( $key, $line ) = each ($lines) )
{
$line = trim($line);
if(!empty($line))
{
if(preg_match("|<([^>]+)>(.*)</\\1>|U",$line,$matches))
{
$tagName = $matches[1];
$tagVal = $matches[2];
$this->CHANNELS[$channelID][$tagName] = $tagVal;
$this->CHANNELINFO[$channelID][$tagName] = $tagVal;
}
}
}
return;
}
/*
* void parseItems ( array channels )
*/
function parseItems($channels)
{
$channelCount = count($channels);
if(!$channelCount) {
$this->error("Could not locate any channel data to parse");
exit;
}
for($x=0;$x<$channelCount;$x++)
{
$channelData = $channels[$x][0];
$leftOvers = $channelData;
$itemCount = preg_match_all("|<item>(.*)</item>|iUs",$channelData,$items,PREG_SET_ORDER);
if($itemCount)
{
for($y=0;$y<$itemCount;$y++)
{
$itemData = $items[$y][0];
$leftOvers = str_replace("$itemData","",$leftOvers);
$this->storeItems($itemData,$x,$y);
}
}
$this->storeChannelData($leftOvers,$x);
}
return;
}
/*
* void parse ( string data )
*/
function parse($data="")
{
$channels = $this->parseChannels($data);
if(empty($channels)) { return; }
$this->parseItems($channels);
return;
}
/*
* Finito
*/
}
?>
| DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |
More Content Management Code Articles
More By Codewalkers
developerWorks - FREE Tools! |
Discover how IBM Rational AppScan Standard Edition can help you detext vulnerabilities in your web applications in the Web Application Security eKit. IBM Rational AppScan is a leading suite of automated web application security solutions that scan and test for common Web application vulnerabilities. The new Web Application Security eKit provides you with valuable resources, including white papers, demos, and additional information on the benefits of testing your Web applications. FREE! Go There Now!
|
|
|
|
Download a free trial version of IBM Rational Software Analyzer Developer Edition V7.0 to identify bug defects earlier in the software development cycle. Rational Software Analyzer is an extensible software development solution that reduces the expense of bug-fixes by enabling static analysis code reviews and bug identification very early in the development cycle. FREE! Go There Now!
|
|
|
|
Rational Build Forge Express Edition is an automation framework that packages the latest enterprise-grade technologies into a reliable, flexible and robust configuration designed and priced specifically for small to midsize businesses. The new Rational Build Forge Express eKit provides you with valuable resources – including a case study, podcast, demo, and articles – to help you increase staff productivity, compress development cycles and deliver better software, fast. FREE! Go There Now!
|
|
|
|
Learn the basics of the IBM Customer Information Control System (CICS). With a hands-on exercise, learn how to get your first CICS application up and running on your desktop using TXSeries V6.1 for Windows. The tutorial shows you how to download and install a free trial version of TXSeries V6.1. FREE! Go There Now!
|
|
|
|
Because access to government information continues to be an area of concern for many U.S. citizens with disabilities, the U.S. government enacted Section 508 of the Rehabilitation Act in 2001 to ensure that government agencies create accessible Web content, enabling all citizens to access the information they need. A fully accessible Web site makes Web content accessible to all individuals, including those with disabilities, who may be accessing Web content via a variety of user agents. Common user agents include standard Web browsers, text-only browsers, assistive devices and mobile devices such as cell phones or personal digital assistants (PDAs). FREE! Go There Now!
|
|
|
|
This whitepaper provides areas to consider when evaluating any software configuration management solution. It addresses how the IBM solutions (Rational ClearCase and Rational ClearQuest) meet the needs and requirements of both project leaders and developers to provide successful Software Change and Configuration Management. FREE! Go There Now!
|
|
|
|
You can now evaluate IBM Rational Asset Manager V7.0 online without installing or configuring it on your own system! Rational Asset Manager helps create, modify, govern, find, and reuse any type of development assets, including SOA and systems development assets. Rational Asset Manager helps you reduce software development costs and improve quality by facilitating the reuse of all types of software development-related assets. Visit developerWorks to learn more about this product and register to explore its capabilities online. FREE! Go There Now!
|
|
|
|
Attend this launch webcast with Scott Hebner, Vice President of IBM Rational Marketing and Strategy, where he will overview Rational’s new offerings and programs to help customers accelerate software innovation on System z. He will discuss how these solutions help organizations extend their core business processes toward modern architectures such as SOA and web technologies to deliver business improvements that stand the test of time. FREE! Go There Now!
|
|
|
|
WebSphere Process Server delivers a unique integration framework that simplifies existing IT resources. Often, as IT assets grow to support business demand, so too does their complexity and manageability. In this webcast, we’ll discuss how WebSphere Process Server helps deliver an SOA infrastructure that provides a common model to orchestrate, mediate, connect, map, and execute the underlying IT functions. Discover how WebSphere Process Server simplifies integration of business processes by leveraging existing IT assets as reusable services without the complexities of traditional integration methodologies. FREE! Go There Now!
|
|
|
|
With IBM Rational Systems Development Solution, you can deliver products faster with higher quality. Within this kit, Read the “Model Driven Systems Development” white paper to see how to improve product quality and communication. Then check out the rest of the e-Kit to learn more about important topics that can affect the success of any software project through customer examples, tutorials, informative Webcasts, and best practices for designing, building and managing systems. From start to finish, at every stage in your projects, Rational Systems Development Solution can help your company reach its full potential. FREE! Go There Now!
|
|
|
|
All FREE IBM® developerWorks Tools! |