Content Management Code
  Home arrow Content Management Code arrow PHP-RSS
Codewalker Forums 
  Tutorials  
Database Articles  
Miscellaneous  
Navigation Usability  
PEAR Articles  
Programming Basics  
Server Administration  
XML Tutorials  
  Reviews  
Database Book Reviews  
Linux Book Reviews  
Miscellaneous Reviews  
PHP Book Reviews  
PHP Software Reviews  
Server Admin Reviews  
SQL Tool Reviews  
  Code Gallery  
Content Management Code  
Contest Code  
Counters Code  
Database Code  
Date Time Code  
Discussion Board Code  
Email Code  
File Manipulation Code  
GUI Code  
Link Farm Code  
Miscellaneous Code  
Search Code  
Site Navigation Code  
User Management Code  
Forums Sitemap 
Download TestComplete 
JMSL Numerical Library 
IBM® developerWorks
Weekly Newsletter 
 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
CONTENT MANAGEMENT CODE

PHP-RSS
By: Codewalkers
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 5 stars5 stars5 stars5 stars5 stars / 2
    2002-04-26

    Table of Contents:

    Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    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. Website

    By : 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

     

    IBM® developerWorks developerWorks - FREE Tools!


    NEW! Driving Business Success with Rational Process Library

    Join this webcast, to learn how the Rational Process Library can help with compliance issues, drive process improvement, and assist in service-oriented architecture (SOA) or Agile development. We will take a peek into the Rational Process Library with content around software and systems engineering (including RUP), operations and systems management, program and portfolio management, and asset and SOA governance.
    FREE! Go There Now!


    NEW! A Layered approach to delivering security-rich Web applications

    As businesses grow increasingly dependent upon Web applications to provide services to customers, employees and partners, these complex applications become more difficult to secure. Although traditional security solutions protect Internet infrastructure layers, they do not guard against HTTP and HTML attacks. Many organizations that conduct security testing still deploy applications that allow attackers to manipulate their logic and wreak havoc on their business. To mitigate this risk, development and delivery teams must address Web application security throughout the lifecycle, addressing the many layers detailed in this paper.
    FREE! Go There Now!


    NEW! Best Practices in Integrated Requirements Management

    Poor Requirements Management capabilities in an Enterprise have been linked to excessive project failures, escalating IT costs, and failure to deliver competitive advantage into the marketplace. Join Brianna M Smith from IBM Rational and learn about how successful organizations align IT and Business stakeholders through collaborative processes and tools for effective requirements management, and how an integrated approach across the IT lifecycle can provide unparalleled visibility and traceability to ensure that project teams are delivering on the business vision by "doing the right things" and "doing things right."
    FREE! Go There Now!


    NEW! Download a free trial of WebSphere Business Modeler Advanced V6.1.1

    Visit IBM developerWorks to download a free trial version of WebSphere Business Modeler Advanced V6.1.1, IBM’s premier business process modeling and analysis tool for business users that offers process modeling, simulation, and analysis capabilities. IBM WebSphere Business Modeler helps you visualize, understand, and document business processes for continuous improvement.
    FREE! Go There Now!


    NEW! Hello World: WebSphere Service Registry and Repository

    Manage, govern, and share services across your organization by using WebSphere Service Registry and Repository. Follow the hands-on exercises to learn how to navigate the Web interface to publish, find, reuse, and update services.
    FREE! Go There Now!


    NEW! Improve your build process with IBM Rational Build Forge, Part 2: Automate builds for a real-world Tomcat project

    Learn how Rational Build Forge can extend a simple compile and package build process by adding customization and deployment capability. Go from a manual method to automating: checking for code changes; getting the latest source; compiling and packaging; customizing; copying to and restarting a deployment server; and sending e-mail notification that a new version is available.
    FREE! Go There Now!


    NEW! Rational Build Forge Express eKit

    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!


    NEW! Rational Testing eKits

    Discover how Rational tools and best practices for testing can make your job easier. The new Rational Testing eKits provide you with valuable resources – including demos, webcasts, tutorials, and articles – that help you address your specific testing needs across the software lifecycle. Five new eKits are available covering the topics of Requirements and Test Management, Functional Testing, Performance Testing, Code Quality and Embedded Systems, and SOA and Web Services Testing.
    FREE! Go There Now!


    NEW! Run your first CICS application on a PC using TXSeries for Windows

    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!


    NEW! Section 508 of the U.S. Rehabilitation Act: Web accessibility compliance

    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!



    All FREE IBM® developerWorks Tools!

    CONTENT MANAGEMENT CODE ARTICLES

    - V2 CMS - Content Management System
    - VSNS Lemon
    - Country List For Forms Using SQL
    - eggblog
    - Table generation class
    - STP Simple Template Parser
    - class Vision_To_Form_Elements
    - Cascade Drop Down
    - Cura - CMS
    - Syntax Desktop
    - 216 color table
    - Simple Mini Poll class library (SimPoll)
    - Regex Generator
    - Siteseed
    - Company WebSite Builder PRO





    © 2003-2008 by Developer Shed. All rights reserved. DS Cluster 2 hosted by Hostway
    Stay green...Green IT