SlideShare a Scribd company logo
Building a simple RSS News Aggregator
Intro - RSS news aggregator Is built using PHP, SQLite, and simple XML Use to  - plug into RSS news feeds from all    over the web - create a newscast that reflects your    needs and interest for your website  It updates itself automatically with latest stories every time viewing it
Intro - RSS Stand for RDF Site Summary Use to publish and distribute information about what’s new and interesting on a particular site at a particular time An RSS document typically contains a list of resources (URLs), marked up with descriptive metadata.
Example of RSS document <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot; xmlns=&quot;http://purl.org/rss/1.0/&quot;> <channel rdf:about=&quot;http://www.melonfire.com/&quot;>   <title>Trog</title>   <description>Well-written technical articles and tutorials on web technologies</description>   <link>http://www.melonfire.com/community/columns/trog/</link>   <items>    <rdf:Seq>     <li rdf:resource=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=100&quot; />     <li rdf:resource=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=71&quot; />
Cont’ <li rdf:resource=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=62&quot; />    </rdf:Seq>   </items> </channel> <item rdf:about=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=100&quot;>   <title>Building A PHP-Based Mail Client (part 1)</title>   <link>http://www.melonfire.com/community/columns/trog/article.php?id=100</link>   <description>Ever wondered how web-based mail clients work? Find out here.</description> </item> <item rdf:about=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=71&quot;>
Cont’ <title>Using PHP With XML (part 1)</title>   <link>http://www.melonfire.com/community/columns/trog/article.php?id=71</link>   <description>Use PHP's SAX parser to parse XML data and generate HTML pages.</description> </item> <item rdf:about=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=62&quot;>   <title>Access Granted</title>   <link>http://www.melonfire.com/community/columns/trog/article.php?id=62</link>   <description>Precisely control access to information with the SQLite grant tables.</description> </item> </rdf:RDF>
Cont’ An RDF file is split into clearly demarcated sections First, the document prolog, namespace declarations, and root element. Follow by <channel> block which contains general information on the channel <items> block contains a sequential list  of all the resources describe within the RDF document <item> block describe a single resource in greater detail.
Design A Simple Database CREATE TABLE rss ( id INTEGER NOT NULL PRIMARY KEY, title varchar (255) NOT NULL, url varchar (255) NOT NULL, count INTEGER NOT NULL ); INSERT INTO rss VALUES (1, ‘Slashdot’, ‘http://slashdot.org/slashdot.rdf’, 5); INSERT INTO rss VALUES (2, ‘Wired News’, ‘http://www.wired.com/news_drop/netcenter/netcenter.rdf’, 5); INSERTINTO rss VALUES (3, ‘Business News’, ‘http://www.npr.org/rss/rss.php?topicId=6’, 3); INSERT INTO rss VALUES (4, ‘Health News’, ‘http://news.bbc.co.uk/rss/newsonline_world_edition/health/rss091.xml’, 3); INSERT INTO rss VALUES (5, ‘Freshmeat’, ‘http://www.freshmeat.net/backend/fm-release.rdf’, 5)
Create User.php <?php // PHP 5 // include configuration file include( 'config.php' ); // open database file $handle  =  sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' ); // generate and execute query $query  =  &quot;SELECT id, title, url, count FROM rss&quot; ; $result  =  sqlite_query ( $handle ,  $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle )));
Cont’ // if records present if ( sqlite_num_rows ( $result ) >  0 ) {      // iterate through resultset     // fetch and parse feed       while( $row  =  sqlite_fetch_object ( $result )) {          $xml  =  simplexml_load_file ( $row -> url );         echo  &quot;<h4>$row->title</h4>&quot; ;          // print descriptions          for ( $x  =  0 ;  $x  <  $row -> count ;  $x ++) {              // for RSS 0.91              if (isset( $xml -> channel -> item )) {                  $item  =  $xml -> channel -> item [ $x ];             }           
Cont’   // for RSS 1.0              elseif (isset( $xml -> item )) {                  $item  =  $xml -> item [ $x ];             }             echo  &quot;<a href=\&quot;$item->link\&quot;>$item->title</a><br />$item->description<p />&quot; ;         }         echo  &quot;<hr />&quot; ;          // reset variables          unset( $xml );         unset( $item );     } } // if no records present // display message
Cont’ else { ?>     <font size = '-1'>No feeds currently configured</font> <?php } // close connection sqlite_close ( $handle ); ?>
Cont’ First is to obtain a list of RSS feeds configured by the user from the SQLite database Therefore, a SQLite database handle is initialized, and a SQL SELECT query is executed A while() loop is used to iterate through the resulting records For each obtained URL, the simplexml_load_file() function is used to retrieve and read RSS feed.  A for() loop is executed and the appropriate number of <item> elements in the feed are parsed.  The path to access an <item> differs depending on the feed is RSS 0.91 or RSS 1.0 If the database is empty, error message will appear.
config.php config.php is included at the top of every script. It contains database access parameters: <?php // database details // always use a directory that cannot be accessed from the web $path  =  $_SERVER [ 'DOCUMENT_ROOT' ]. '/../' ; $db  =  $path . 'rss.db' ; ?>
admin.php <html> <head><basefont face = 'Arial'></head> <body> <h2>Feed Manager</h2> <h4>Current Feeds:</h4> <table border = '0' cellspacing = '10'> <?php // PHP 5 // include configuration file include( 'config.php' ); // open database file $handle  =  sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' );
// generate and execute query $query  =  &quot;SELECT id, title, url, count FROM rss&quot; ; $result  =  sqlite_query ( $handle ,  $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle ))); // if records present if ( sqlite_num_rows ( $result ) >  0 ) {      // iterate through result set     // print article titles      while ( $row  =  sqlite_fetch_object ( $result )) {   ?>         <tr>         <td> <?php  echo  $row -> title ;  ?>  ( <?php  echo  $row -> count ;  ?> )</td>         <td><font size = '-2'><a href=&quot;delete.php?id= <?php  echo  $row -> id ;  ?> &quot;>delete</a></font></td>         </tr> Cont’
  <?php      } } // if there are no records present, display message else { ?>     <font size = '-1'>No feeds currently configured</font> <?php } // close connection sqlite_close ( $handle ); ?> Cont’
</table> <h4>Add New Feed:</h4> <form action = 'add.php' method = 'post'> <table border = '0' cellspacing = '5'> <tr>     <td>Title</td>     <td><input type = 'text' name = 'title'></td> </tr> <tr>     <td>Feed URL</td>     <td><input type = 'text' name = 'url'></td> </tr> <tr>     <td>Stories to display</td>     <td><input type = 'text' name = 'count' size = '2'></td> </tr> Cont’
Cont’ <tr>     <td colspan = '2' align = 'right'><input type = 'submit' name = 'submit' value = 'Add RSS Feed'></td> </tr> </table> </form> </body> </html>
Cont’ There are two section is this script: - The first half connects to the database and    prints a list of all the currently configured    news feeds with a “delete” link next to    each. - The second half contains a form for admin    to add a new feed, together with its      attributes. Once the form is submitted, the data gets POST-ed to scripts add.php which validates it and save it to the database.
add.php <html> <head><basefont face = 'Arial'></head> <body> <h2>Feed Manager</h2> <?php // PHP 5 if (isset( $_POST [ 'submit' ])) {      // check form input for errors          // check title      if ( trim ( $_POST [ 'title' ]) ==  '' ) {         die( 'ERROR: Please enter a title' );     }
Cont’   // check URL      if (( trim ( $_POST [ 'url' ]) ==  '' ) || ! ereg ( &quot;^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\._\?\,\'/\\\+&%\$#\=~\-])*$&quot; ,  $_POST [ 'url' ])) {         die( 'ERROR: Please enter a valid URL' );     }      // check story number      if (! is_numeric ( $_POST [ 'count' ])) {         die( 'ERROR: Please enter a valid story count' );     }      // include configuration file      include( 'config.php' );   // open database file      $handle  =  sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' );
// generate and execute query      $query  =  &quot;INSERT INTO rss (title, url, count) VALUES ('&quot; . $_POST [ 'title' ]. &quot;', '&quot; . $_POST [ 'url' ]. &quot;', '&quot; . $_POST [ 'count' ]. &quot;')&quot; ;      $result  =  sqlite_query ( $handle ,  $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle )));      // close connection      sqlite_close ( $handle );      // print success message      echo  &quot;Item successfully added to the database! Click <a href = 'admin.php'>here</a> to return to the main page&quot; ; } else {     die( 'ERROR: Data not correctly submitted' ); } ?> </body> Cont’
Cont’ There are three tests in the script to ensure the data being saved doesn’t contain gibberish One checks for the presence of a descriptive title Another uses the is_numeric() function to verify that the value entered for the story count is a valid number The third uses the ereg() function to check the format of the URL.
delete.php <html> <head><basefont face = 'Arial'></head> <body> <h2>Feed Manager</h2> <?php // PHP 5 if (isset( $_GET [ 'id' ]) &&  is_numeric ( $_GET [ 'id' ])) {      // include configuration file      include( 'config.php' );           // open database file      $handle  =  sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' );
// generate and execute query      $query  =  &quot;DELETE FROM rss WHERE id = '&quot; . $_GET [ 'id' ]. &quot;'&quot; ;      $result  =  sqlite_query ( $handle ,  $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle )));           // close connection      sqlite_close ( $handle );      // print success message      echo  &quot;Item successfully removed from the database! Click <a href = 'admin.php'>here</a> to return to the main page&quot; ; } else {     die( 'ERROR: Data not correctly submitted' ); } ?> </body> </html>   Cont’
Cont’ The record ID passed through the URL GET method is retrieved by delete.php A DELETE SQL query is used is delete.php to erase the corresponding record.
Ad

More Related Content

What's hot (20)

Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4
Stephan Schmidt
 
Php and MySQL
Php and MySQLPhp and MySQL
Php and MySQL
Tiji Thomas
 
Php with my sql
Php with my sqlPhp with my sql
Php with my sql
husnara mohammad
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
Matthew Turland
 
07 Introduction to PHP #burningkeyboards
07 Introduction to PHP #burningkeyboards07 Introduction to PHP #burningkeyboards
07 Introduction to PHP #burningkeyboards
Denis Ristic
 
Php Crash Course
Php Crash CoursePhp Crash Course
Php Crash Course
mussawir20
 
Introducation to php for beginners
Introducation to php for beginners Introducation to php for beginners
Introducation to php for beginners
musrath mohammad
 
Web Development Course: PHP lecture 1
Web Development Course: PHP lecture 1Web Development Course: PHP lecture 1
Web Development Course: PHP lecture 1
Gheyath M. Othman
 
Php Training
Php TrainingPhp Training
Php Training
adfa
 
Learn php with PSK
Learn php with PSKLearn php with PSK
Learn php with PSK
Prabhjot Singh Kainth
 
Introduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid TagsIntroduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid Tags
Johannes Geppert
 
PHP Basic
PHP BasicPHP Basic
PHP Basic
Yoeung Vibol
 
PHP variables
PHP  variablesPHP  variables
PHP variables
Siddique Ibrahim
 
PHP Workshop Notes
PHP Workshop NotesPHP Workshop Notes
PHP Workshop Notes
Pamela Fox
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
Stephan Schmidt
 
P H P Part I I, By Kian
P H P  Part  I I,  By  KianP H P  Part  I I,  By  Kian
P H P Part I I, By Kian
phelios
 
Php i basic chapter 3
Php i basic chapter 3Php i basic chapter 3
Php i basic chapter 3
Muhamad Al Imran
 
Basic PHP
Basic PHPBasic PHP
Basic PHP
Todd Barber
 
PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)
PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)
PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)
Kana Natsuno
 
XML Transformations With PHP
XML Transformations With PHPXML Transformations With PHP
XML Transformations With PHP
Stephan Schmidt
 
Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4
Stephan Schmidt
 
07 Introduction to PHP #burningkeyboards
07 Introduction to PHP #burningkeyboards07 Introduction to PHP #burningkeyboards
07 Introduction to PHP #burningkeyboards
Denis Ristic
 
Php Crash Course
Php Crash CoursePhp Crash Course
Php Crash Course
mussawir20
 
Introducation to php for beginners
Introducation to php for beginners Introducation to php for beginners
Introducation to php for beginners
musrath mohammad
 
Web Development Course: PHP lecture 1
Web Development Course: PHP lecture 1Web Development Course: PHP lecture 1
Web Development Course: PHP lecture 1
Gheyath M. Othman
 
Php Training
Php TrainingPhp Training
Php Training
adfa
 
Introduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid TagsIntroduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid Tags
Johannes Geppert
 
PHP Workshop Notes
PHP Workshop NotesPHP Workshop Notes
PHP Workshop Notes
Pamela Fox
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
Stephan Schmidt
 
P H P Part I I, By Kian
P H P  Part  I I,  By  KianP H P  Part  I I,  By  Kian
P H P Part I I, By Kian
phelios
 
PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)
PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)
PHP「参照渡しできるよ」(君の考えている参照渡しと同じとは言ってない)
Kana Natsuno
 
XML Transformations With PHP
XML Transformations With PHPXML Transformations With PHP
XML Transformations With PHP
Stephan Schmidt
 

Viewers also liked (12)

SimpleXML In PHP 5
SimpleXML In PHP 5SimpleXML In PHP 5
SimpleXML In PHP 5
Ron Pringle
 
When RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTPWhen RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTP
Matthew Turland
 
Almost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without ProgrammingAlmost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without Programming
Michelle Minkoff
 
Web Scraping With Python
Web Scraping With PythonWeb Scraping With Python
Web Scraping With Python
Robert Dempsey
 
Scraping data from the web and documents
Scraping data from the web and documentsScraping data from the web and documents
Scraping data from the web and documents
Tommy Tavenner
 
JamNeo news aggregator
JamNeo news aggregatorJamNeo news aggregator
JamNeo news aggregator
JamNeo
 
Web Scraping with Python
Web Scraping with PythonWeb Scraping with Python
Web Scraping with Python
Paul Schreiber
 
Scraping the web with python
Scraping the web with pythonScraping the web with python
Scraping the web with python
Jose Manuel Ortega Candel
 
Web scraping in python
Web scraping in python Web scraping in python
Web scraping in python
Viren Rajput
 
Social Media Mining - Chapter 3 (Network Measures)
Social Media Mining - Chapter 3 (Network Measures)Social Media Mining - Chapter 3 (Network Measures)
Social Media Mining - Chapter 3 (Network Measures)
SocialMediaMining
 
Web scraping in python
Web scraping in pythonWeb scraping in python
Web scraping in python
Saurav Tomar
 
Web scraping com python
Web scraping com pythonWeb scraping com python
Web scraping com python
Matheus Fidelis
 
SimpleXML In PHP 5
SimpleXML In PHP 5SimpleXML In PHP 5
SimpleXML In PHP 5
Ron Pringle
 
When RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTPWhen RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTP
Matthew Turland
 
Almost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without ProgrammingAlmost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without Programming
Michelle Minkoff
 
Web Scraping With Python
Web Scraping With PythonWeb Scraping With Python
Web Scraping With Python
Robert Dempsey
 
Scraping data from the web and documents
Scraping data from the web and documentsScraping data from the web and documents
Scraping data from the web and documents
Tommy Tavenner
 
JamNeo news aggregator
JamNeo news aggregatorJamNeo news aggregator
JamNeo news aggregator
JamNeo
 
Web Scraping with Python
Web Scraping with PythonWeb Scraping with Python
Web Scraping with Python
Paul Schreiber
 
Web scraping in python
Web scraping in python Web scraping in python
Web scraping in python
Viren Rajput
 
Social Media Mining - Chapter 3 (Network Measures)
Social Media Mining - Chapter 3 (Network Measures)Social Media Mining - Chapter 3 (Network Measures)
Social Media Mining - Chapter 3 (Network Measures)
SocialMediaMining
 
Web scraping in python
Web scraping in pythonWeb scraping in python
Web scraping in python
Saurav Tomar
 
Ad

Similar to Php Rss (20)

Php Mysql Feedrss
Php Mysql FeedrssPhp Mysql Feedrss
Php Mysql Feedrss
RCS&RDS
 
Introduction To Lamp
Introduction To LampIntroduction To Lamp
Introduction To Lamp
Amzad Hossain
 
Creating an RSS feed
Creating an RSS feedCreating an RSS feed
Creating an RSS feed
Karthikeyan Mkr
 
Web Developement Workshop (Oct 2009) Slides
Web Developement Workshop (Oct 2009) SlidesWeb Developement Workshop (Oct 2009) Slides
Web Developement Workshop (Oct 2009) Slides
Manish Sinha
 
XML processing with perl
XML processing with perlXML processing with perl
XML processing with perl
Joe Jiang
 
Html5
Html5Html5
Html5
dotNETUserGroupDnipro
 
PHPTAL introduction
PHPTAL introductionPHPTAL introduction
PHPTAL introduction
'"">
 
Php Basic Security
Php Basic SecurityPhp Basic Security
Php Basic Security
mussawir20
 
Plagger the duct tape of internet
Plagger the duct tape of internetPlagger the duct tape of internet
Plagger the duct tape of internet
Tatsuhiko Miyagawa
 
Architecting Web Services
Architecting Web ServicesArchitecting Web Services
Architecting Web Services
Lorna Mitchell
 
Phpvsjsp
PhpvsjspPhpvsjsp
Phpvsjsp
guest5b4d24
 
Transforming Xml Data Into Html
Transforming Xml Data Into HtmlTransforming Xml Data Into Html
Transforming Xml Data Into Html
Karthikeyan Mkr
 
Solr Presentation
Solr PresentationSolr Presentation
Solr Presentation
Gaurav Verma
 
YQL Overview
YQL OverviewYQL Overview
YQL Overview
Jonathan LeBlanc
 
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google InfrastructureLiving in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Pamela Fox
 
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google InfrastructureLiving in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
guest517f2f
 
Agile Descriptions
Agile DescriptionsAgile Descriptions
Agile Descriptions
Tony Hammond
 
XMLT
XMLTXMLT
XMLT
Kunal Gaind
 
merb.intro
merb.intromerb.intro
merb.intro
pjb3
 
REST dojo Comet
REST dojo CometREST dojo Comet
REST dojo Comet
Carol McDonald
 
Php Mysql Feedrss
Php Mysql FeedrssPhp Mysql Feedrss
Php Mysql Feedrss
RCS&RDS
 
Introduction To Lamp
Introduction To LampIntroduction To Lamp
Introduction To Lamp
Amzad Hossain
 
Web Developement Workshop (Oct 2009) Slides
Web Developement Workshop (Oct 2009) SlidesWeb Developement Workshop (Oct 2009) Slides
Web Developement Workshop (Oct 2009) Slides
Manish Sinha
 
XML processing with perl
XML processing with perlXML processing with perl
XML processing with perl
Joe Jiang
 
PHPTAL introduction
PHPTAL introductionPHPTAL introduction
PHPTAL introduction
'"">
 
Php Basic Security
Php Basic SecurityPhp Basic Security
Php Basic Security
mussawir20
 
Plagger the duct tape of internet
Plagger the duct tape of internetPlagger the duct tape of internet
Plagger the duct tape of internet
Tatsuhiko Miyagawa
 
Architecting Web Services
Architecting Web ServicesArchitecting Web Services
Architecting Web Services
Lorna Mitchell
 
Transforming Xml Data Into Html
Transforming Xml Data Into HtmlTransforming Xml Data Into Html
Transforming Xml Data Into Html
Karthikeyan Mkr
 
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google InfrastructureLiving in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Pamela Fox
 
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google InfrastructureLiving in the Cloud: Hosting Data & Apps Using the Google Infrastructure
Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure
guest517f2f
 
Agile Descriptions
Agile DescriptionsAgile Descriptions
Agile Descriptions
Tony Hammond
 
merb.intro
merb.intromerb.intro
merb.intro
pjb3
 
Ad

More from mussawir20 (20)

Database Design Process
Database Design ProcessDatabase Design Process
Database Design Process
mussawir20
 
Php Simple Xml
Php Simple XmlPhp Simple Xml
Php Simple Xml
mussawir20
 
Php String And Regular Expressions
Php String  And Regular ExpressionsPhp String  And Regular Expressions
Php String And Regular Expressions
mussawir20
 
Php Sq Lite
Php Sq LitePhp Sq Lite
Php Sq Lite
mussawir20
 
Php Sessoins N Cookies
Php Sessoins N CookiesPhp Sessoins N Cookies
Php Sessoins N Cookies
mussawir20
 
Php Reusing Code And Writing Functions
Php Reusing Code And Writing FunctionsPhp Reusing Code And Writing Functions
Php Reusing Code And Writing Functions
mussawir20
 
Php Oop
Php OopPhp Oop
Php Oop
mussawir20
 
Php My Sql
Php My SqlPhp My Sql
Php My Sql
mussawir20
 
Php File Operations
Php File OperationsPhp File Operations
Php File Operations
mussawir20
 
Php Error Handling
Php Error HandlingPhp Error Handling
Php Error Handling
mussawir20
 
Php Using Arrays
Php Using ArraysPhp Using Arrays
Php Using Arrays
mussawir20
 
Javascript Oop
Javascript OopJavascript Oop
Javascript Oop
mussawir20
 
Html
HtmlHtml
Html
mussawir20
 
Javascript
JavascriptJavascript
Javascript
mussawir20
 
Object Range
Object RangeObject Range
Object Range
mussawir20
 
Prototype Utility Methods(1)
Prototype Utility Methods(1)Prototype Utility Methods(1)
Prototype Utility Methods(1)
mussawir20
 
Date
DateDate
Date
mussawir20
 
Prototype js
Prototype jsPrototype js
Prototype js
mussawir20
 
Template
TemplateTemplate
Template
mussawir20
 
Class
ClassClass
Class
mussawir20
 
Database Design Process
Database Design ProcessDatabase Design Process
Database Design Process
mussawir20
 
Php Simple Xml
Php Simple XmlPhp Simple Xml
Php Simple Xml
mussawir20
 
Php String And Regular Expressions
Php String  And Regular ExpressionsPhp String  And Regular Expressions
Php String And Regular Expressions
mussawir20
 
Php Sessoins N Cookies
Php Sessoins N CookiesPhp Sessoins N Cookies
Php Sessoins N Cookies
mussawir20
 
Php Reusing Code And Writing Functions
Php Reusing Code And Writing FunctionsPhp Reusing Code And Writing Functions
Php Reusing Code And Writing Functions
mussawir20
 
Php File Operations
Php File OperationsPhp File Operations
Php File Operations
mussawir20
 
Php Error Handling
Php Error HandlingPhp Error Handling
Php Error Handling
mussawir20
 
Php Using Arrays
Php Using ArraysPhp Using Arrays
Php Using Arrays
mussawir20
 
Javascript Oop
Javascript OopJavascript Oop
Javascript Oop
mussawir20
 
Prototype Utility Methods(1)
Prototype Utility Methods(1)Prototype Utility Methods(1)
Prototype Utility Methods(1)
mussawir20
 

Recently uploaded (20)

HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 

Php Rss

  • 1. Building a simple RSS News Aggregator
  • 2. Intro - RSS news aggregator Is built using PHP, SQLite, and simple XML Use to - plug into RSS news feeds from all over the web - create a newscast that reflects your needs and interest for your website It updates itself automatically with latest stories every time viewing it
  • 3. Intro - RSS Stand for RDF Site Summary Use to publish and distribute information about what’s new and interesting on a particular site at a particular time An RSS document typically contains a list of resources (URLs), marked up with descriptive metadata.
  • 4. Example of RSS document <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot; xmlns=&quot;http://purl.org/rss/1.0/&quot;> <channel rdf:about=&quot;http://www.melonfire.com/&quot;>   <title>Trog</title>   <description>Well-written technical articles and tutorials on web technologies</description>   <link>http://www.melonfire.com/community/columns/trog/</link>   <items>    <rdf:Seq>     <li rdf:resource=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=100&quot; />     <li rdf:resource=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=71&quot; />
  • 5. Cont’ <li rdf:resource=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=62&quot; />    </rdf:Seq>   </items> </channel> <item rdf:about=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=100&quot;>   <title>Building A PHP-Based Mail Client (part 1)</title>   <link>http://www.melonfire.com/community/columns/trog/article.php?id=100</link>   <description>Ever wondered how web-based mail clients work? Find out here.</description> </item> <item rdf:about=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=71&quot;>
  • 6. Cont’ <title>Using PHP With XML (part 1)</title>   <link>http://www.melonfire.com/community/columns/trog/article.php?id=71</link>   <description>Use PHP's SAX parser to parse XML data and generate HTML pages.</description> </item> <item rdf:about=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=62&quot;>   <title>Access Granted</title>   <link>http://www.melonfire.com/community/columns/trog/article.php?id=62</link>   <description>Precisely control access to information with the SQLite grant tables.</description> </item> </rdf:RDF>
  • 7. Cont’ An RDF file is split into clearly demarcated sections First, the document prolog, namespace declarations, and root element. Follow by <channel> block which contains general information on the channel <items> block contains a sequential list of all the resources describe within the RDF document <item> block describe a single resource in greater detail.
  • 8. Design A Simple Database CREATE TABLE rss ( id INTEGER NOT NULL PRIMARY KEY, title varchar (255) NOT NULL, url varchar (255) NOT NULL, count INTEGER NOT NULL ); INSERT INTO rss VALUES (1, ‘Slashdot’, ‘http://slashdot.org/slashdot.rdf’, 5); INSERT INTO rss VALUES (2, ‘Wired News’, ‘http://www.wired.com/news_drop/netcenter/netcenter.rdf’, 5); INSERTINTO rss VALUES (3, ‘Business News’, ‘http://www.npr.org/rss/rss.php?topicId=6’, 3); INSERT INTO rss VALUES (4, ‘Health News’, ‘http://news.bbc.co.uk/rss/newsonline_world_edition/health/rss091.xml’, 3); INSERT INTO rss VALUES (5, ‘Freshmeat’, ‘http://www.freshmeat.net/backend/fm-release.rdf’, 5)
  • 9. Create User.php <?php // PHP 5 // include configuration file include( 'config.php' ); // open database file $handle = sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' ); // generate and execute query $query = &quot;SELECT id, title, url, count FROM rss&quot; ; $result = sqlite_query ( $handle , $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle )));
  • 10. Cont’ // if records present if ( sqlite_num_rows ( $result ) > 0 ) {      // iterate through resultset     // fetch and parse feed      while( $row = sqlite_fetch_object ( $result )) {          $xml = simplexml_load_file ( $row -> url );         echo &quot;<h4>$row->title</h4>&quot; ;          // print descriptions          for ( $x = 0 ; $x < $row -> count ; $x ++) {              // for RSS 0.91              if (isset( $xml -> channel -> item )) {                  $item = $xml -> channel -> item [ $x ];             }           
  • 11. Cont’   // for RSS 1.0              elseif (isset( $xml -> item )) {                  $item = $xml -> item [ $x ];             }             echo &quot;<a href=\&quot;$item->link\&quot;>$item->title</a><br />$item->description<p />&quot; ;         }         echo &quot;<hr />&quot; ;          // reset variables          unset( $xml );         unset( $item );     } } // if no records present // display message
  • 12. Cont’ else { ?>     <font size = '-1'>No feeds currently configured</font> <?php } // close connection sqlite_close ( $handle ); ?>
  • 13. Cont’ First is to obtain a list of RSS feeds configured by the user from the SQLite database Therefore, a SQLite database handle is initialized, and a SQL SELECT query is executed A while() loop is used to iterate through the resulting records For each obtained URL, the simplexml_load_file() function is used to retrieve and read RSS feed. A for() loop is executed and the appropriate number of <item> elements in the feed are parsed. The path to access an <item> differs depending on the feed is RSS 0.91 or RSS 1.0 If the database is empty, error message will appear.
  • 14. config.php config.php is included at the top of every script. It contains database access parameters: <?php // database details // always use a directory that cannot be accessed from the web $path = $_SERVER [ 'DOCUMENT_ROOT' ]. '/../' ; $db = $path . 'rss.db' ; ?>
  • 15. admin.php <html> <head><basefont face = 'Arial'></head> <body> <h2>Feed Manager</h2> <h4>Current Feeds:</h4> <table border = '0' cellspacing = '10'> <?php // PHP 5 // include configuration file include( 'config.php' ); // open database file $handle = sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' );
  • 16. // generate and execute query $query = &quot;SELECT id, title, url, count FROM rss&quot; ; $result = sqlite_query ( $handle , $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle ))); // if records present if ( sqlite_num_rows ( $result ) > 0 ) {      // iterate through result set     // print article titles      while ( $row = sqlite_fetch_object ( $result )) {   ?>         <tr>         <td> <?php echo $row -> title ; ?> ( <?php echo $row -> count ; ?> )</td>         <td><font size = '-2'><a href=&quot;delete.php?id= <?php echo $row -> id ; ?> &quot;>delete</a></font></td>         </tr> Cont’
  • 17.   <?php      } } // if there are no records present, display message else { ?>     <font size = '-1'>No feeds currently configured</font> <?php } // close connection sqlite_close ( $handle ); ?> Cont’
  • 18. </table> <h4>Add New Feed:</h4> <form action = 'add.php' method = 'post'> <table border = '0' cellspacing = '5'> <tr>     <td>Title</td>     <td><input type = 'text' name = 'title'></td> </tr> <tr>     <td>Feed URL</td>     <td><input type = 'text' name = 'url'></td> </tr> <tr>     <td>Stories to display</td>     <td><input type = 'text' name = 'count' size = '2'></td> </tr> Cont’
  • 19. Cont’ <tr>     <td colspan = '2' align = 'right'><input type = 'submit' name = 'submit' value = 'Add RSS Feed'></td> </tr> </table> </form> </body> </html>
  • 20. Cont’ There are two section is this script: - The first half connects to the database and prints a list of all the currently configured news feeds with a “delete” link next to each. - The second half contains a form for admin to add a new feed, together with its attributes. Once the form is submitted, the data gets POST-ed to scripts add.php which validates it and save it to the database.
  • 21. add.php <html> <head><basefont face = 'Arial'></head> <body> <h2>Feed Manager</h2> <?php // PHP 5 if (isset( $_POST [ 'submit' ])) {      // check form input for errors          // check title      if ( trim ( $_POST [ 'title' ]) == '' ) {         die( 'ERROR: Please enter a title' );     }
  • 22. Cont’   // check URL      if (( trim ( $_POST [ 'url' ]) == '' ) || ! ereg ( &quot;^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\._\?\,\'/\\\+&%\$#\=~\-])*$&quot; , $_POST [ 'url' ])) {         die( 'ERROR: Please enter a valid URL' );     }      // check story number      if (! is_numeric ( $_POST [ 'count' ])) {         die( 'ERROR: Please enter a valid story count' );     }      // include configuration file      include( 'config.php' ); // open database file      $handle = sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' );
  • 23. // generate and execute query      $query = &quot;INSERT INTO rss (title, url, count) VALUES ('&quot; . $_POST [ 'title' ]. &quot;', '&quot; . $_POST [ 'url' ]. &quot;', '&quot; . $_POST [ 'count' ]. &quot;')&quot; ;      $result = sqlite_query ( $handle , $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle )));      // close connection      sqlite_close ( $handle );      // print success message      echo &quot;Item successfully added to the database! Click <a href = 'admin.php'>here</a> to return to the main page&quot; ; } else {     die( 'ERROR: Data not correctly submitted' ); } ?> </body> Cont’
  • 24. Cont’ There are three tests in the script to ensure the data being saved doesn’t contain gibberish One checks for the presence of a descriptive title Another uses the is_numeric() function to verify that the value entered for the story count is a valid number The third uses the ereg() function to check the format of the URL.
  • 25. delete.php <html> <head><basefont face = 'Arial'></head> <body> <h2>Feed Manager</h2> <?php // PHP 5 if (isset( $_GET [ 'id' ]) && is_numeric ( $_GET [ 'id' ])) {      // include configuration file      include( 'config.php' );           // open database file      $handle = sqlite_open ( $db ) or die( 'ERROR: Unable to open database!' );
  • 26. // generate and execute query      $query = &quot;DELETE FROM rss WHERE id = '&quot; . $_GET [ 'id' ]. &quot;'&quot; ;      $result = sqlite_query ( $handle , $query ) or die( &quot;ERROR: $query. &quot; . sqlite_error_string ( sqlite_last_error ( $handle )));           // close connection      sqlite_close ( $handle );      // print success message      echo &quot;Item successfully removed from the database! Click <a href = 'admin.php'>here</a> to return to the main page&quot; ; } else {     die( 'ERROR: Data not correctly submitted' ); } ?> </body> </html> Cont’
  • 27. Cont’ The record ID passed through the URL GET method is retrieved by delete.php A DELETE SQL query is used is delete.php to erase the corresponding record.