/www/magpierss-0.72/htdocs/cookbook.html
# · HTML · 237 lines · 171 code · 53 blank · 13 comment · 0 complexity · d444251435fedb4017b1d25a2433f127 MD5 · raw file
- <html>
- <head>
- <title>Magie RSS Recipes: Simple PHP RSS How To</title>
- <style>
- body {
- font-family:trebuchet MS, trebuchet, verdana, arial, sans-serif;
- font-size: 11px;
-
- }
-
- pre { font-family: "Courier New", monospace;
- padding: 1em;
- margin: 0.2em 2.5em 0.2em 3em;
- background-color: #efeff5;
- border: 1px solid #cfcfcf;
- white-space: pre;
- }
- </style>
- </head>
- <body>
- <p>
- <h1>MagpieRSS Recipes: Cooking with Corbies</h1>
- <div align="center"><h3><em>"Four and twenty blackbirds baked in a
- pie."</em></h3></div>
- </p>
- <p>
- <ol>
- <li><a href="#limit">Limit the Number of Headlines(aka Items) Returned</a></li>
- <li><a href="#error_message">Display a Custom Error Message if Something Goes
- Wrong</a></li>
- <li><a href="#write_rss">Generate a New RSS Feed</a></li>
- <li><a href="#by_date">Display Headlines More Recent then X Date</a></li>
- <li><a href="#from_file">Parse a Local File Containing RSS</a></li>
- </ol>
- </p>
- <a name="limit"></a><h2>1. Limit the Number of Headlines(aka Items) Returned.</h2>
- <h3>Problem:</h3>
- You want to display the 10 (or 3 or whatever) most recent headlines, but the RSS feed
- contains 15.
- <h3>Solution:</h3>
- <pre>
- $num_items = 10;
- $rss = fetch_rss($url);
- $items = array_slice($rss->items, 0, $num_items);
- foreach ( $items as $item ) {
- </pre>
- <h3>Discussion:</h3>
- Rather then trying to limit the number of items Magpie parses, a much simpler,
- and more flexible approach is to take a "slice" of the array of items. And
- array_slice() is smart enough to do the right thing if the feed has less items
- then $num_items.
- <h3>See:</h3> <a href="http://www.php.net/array_slice">http://www.php.net/array_slice</a>
- </p>
- <a name="error_message"></a><h2>2. Display a Custom Error Message if Something Goes Wrong</h2>
- <h3>Problem:</h3>
- You don't want Magpie's error messages showing up if something goes wrong.
- <h3>Solution:</h3>
- <pre>
- # Magpie throws USER_WARNINGS only
- # so you can cloak these, by only showing ERRORs
- error_reporting(E_ERROR);
- # check the return value of fetch_rss()
- $rss = fetch_rss($url);
- if ( $rss ) {
- ...display rss feed...
- }
- else {
- echo "An error occured! " .
- "Consider donating more $$$ for restoration of services." .
- "<br>Error Message: " . magpie_error();
- }
- </pre>
- <h3>Discussion:</h3>
- MagpieRSS triggers a warning in a number of circumstances. The 2 most common
- circumstances are: if the specified RSS file isn't properly formed (usually
- because it includes illegal HTML), or if Magpie can't download the remote RSS
- file, and there is no cached version.
- If you don't want your users to see these warnings change your error_reporting
- settings to only display ERRORs.<br />
- Another option is to turn off display_error,
- so that WARNINGs, and NOTICEs still go to the error_log but not to the webpages.
- You can do this with:
- <pre>
- # you can also do this in your php.ini file
- ini_set('display_errors', 0);
- </pre>
- <h3>See:</h3>
- <a
- href="http://www.php.net/error_reporting">http://www.php.net/error_reporting</a>,<br
- />
- <a href="http://www.php.net/ini_set">http://www.php.net/ini_set</a>, <br />
- <a
- href="http://www.php.net/manual/en/ref.errorfunc.php">http://www.php.net/manual/en/ref.errorfunc.php</a><br
- />
- <a name="write_rss"></a><h2>3. Generate a New RSS Feed</h2>
- <h3>Problem:</h3>
- Create an RSS feed for other people to use.
- <h3>Solution:</h3>
- Use Useful Inc's <a href="http://usefulinc.com/rss/rsswriter/">RSSWriter</a>.
- <h3>Discussion:</h3>
- An example of turning a Magpie parsed RSS object back into an RSS file is
- forthcoming. In the meantime RSSWriter is well documented.
- <a name="by_date"></a><h2>4. Display Headlines More Recent then X Date</h2>
- <h3>Problem:</h3>
- You only want to display headlines that were published on, or after a certain
- date.
- <h3>Solution:</h3>
- <pre>
- require_once('rss_utils.inc');
- # get all headlines published today
- $today = getdate();
- # today, 12AM
- $date = mktime(0,0,0,$today['mon'], $today['mday'], $today['year']);
- $rss = fetch_rss($url);
- foreach ( $rss->items as $item ) {
- $published = parse_w3cdtf($item['dc']['date']);
- if ( $published >= $date ) {
- echo "Title: " . $item['title'];
- echo "Published: " . date("h:i:s A", $published);
- echo "<p>";
- }
- }
- </pre>
- <h3>Discussion:</h3>
- This recipe only works for RSS 1.0 feeds that include the <dc:date> field.
- (which is very good RSS style) <br />
- <code>parse_w3cdtf()</code> is defined in
- <code>rss_utils.inc</code>, and parses RSS style dates into Unix epoch
- seconds.
- <h3>See: </h3>
- <a
- href="http://www.php.net/manual/en/ref.datetime.php">http://www.php.net/manual/en/ref.datetime.php</a>
- <a name="from_file"></a>
- <h2>5. Parse a Local File Containing RSS</h2>
- <h3>Problem:</h3>
- MagpieRSS provides <code>fetch_rss()</code> which takes a URL and returns a
- parsed RSS object, but what if you want to parse a file stored locally that
- doesn't have a URL?
- <h3>Solution</h3>
- <pre>
- require_once('rss_parse.inc');
- $rss_file = 'some_rss_file.rdf';
- $rss_string = read_file($rss_file);
- $rss = new MagpieRSS( $rss_string );
- if ( $rss and !$rss->ERROR) {
- ...display rss...
- }
- else {
- echo "Error: " . $rss->ERROR;
- }
- # efficiently read a file into a string
- # in php >= 4.3.0 you can simply use file_get_contents()
- #
- function read_file($filename) {
- $fh = fopen($filename, 'r') or die($php_errormsg);
- $rss_string = fread($fh, filesize($filename) );
- fclose($fh);
- return $rss_string;
- }
- </pre>
- <h3>Discussion</h3>
- Here we are using MagpieRSS's RSS parser directly without the convience wrapper
- of <code>fetch_rss()</code>. We read the contents of the RSS file into a
- string, and pass it to the parser constructor. Notice also that error handling
- is subtly different.
- <h3>See: </h3>
- <a
- href="http://www.php.net/manual/en/ref.filesystem.php">http://www.php.net/manual/en/ref.filesystem.php</a>,<br
- />
- <a
- href="http://www.php.net/manual/en/language.oop.php">http://www.php.net/manual/en/language.oop.php</a>
- <!--
- <a name="link"></a><h2>#. Recipe</h2>
- <h3>Problem:</h3>
- Problem description
- <h3>Solution</h3>
- <pre>
- code
- </pre>
- <h3>Discussion/h3>
- Discuss code
- <h3>See: </h3>
- Documentation links:
- -->
- </body>
- </html>