User:Rdb78/RSS
This is a slightly modified version of the RSS engine from User:Duesentrieb, which in turn is an extended version of the RSS-feed extension by Mutante
It now supports limiting the number of headlines displayed by the feed to a number passed as an argument, of the form max=x where x is the number of headlines you want.
<?php # RSS-Feed Mediawiki extension # # original by mutante 25.03.2005 # extended by Duesentrieb 30.04.2005 # extended by Rdb78 07.07.2005 # # Requires: # * magpie rss parser <http://magpierss.sourceforge.net/> # * iconv <http://www.gnu.org/software/libiconv/>, see also <http://www.php.net/iconv> # # Installation: # * put this file (rss.php) into the extension directory of your mediawiki installation # * add the following to the end of LocalSettings.php: include("extensions/rss.php"); # * make sure magpie can be found by PHP. # # Usage: # Use one section between <rss>-tags for each feed. The ress section may contain parameters # separated by a pipe ("|"), just like links and templates. Two parameters are supported: # * charset=... the charset used by the feed. iconv is used to convert this. # * short do not show the description text for each news item. # * max=x Shows x most recent headlines. # # Example: # <rss>http://slashdot.org/slashdot.rss|charset=UTF-8|short|max=5</rss> # #change this according to your magpie installation! require_once('magpierss-0.71.1/rss_fetch.inc'); #install extension hook $wgExtensionFunctions[] = "wfRssExtension"; #extension hook callback function function wfRssExtension() { global $wgParser; #install parser hook for <rss> tags $wgParser->setHook( "rss", "renderRss" ); } #parser hook callback function function renderRss( $input ) { global $wgOutputEncoding; # $input = mysql_escape_string($input); if (!$input) return ""; #if <rss>-section is empty, return nothing #parse fields in rss-section $fields= explode("|",$input); $url= @$fields[0]; $args= array(); for ($i=1; $i<sizeof($fields); $i++) { $f= $fields[$i]; if (strpos($f,"=")===False) $args[strtolower(trim($f))]= True; else { list($k,$v)= explode("=",$f,2); $args[strtolower(trim($k))]= trim($v); } } #get charset from argument-array $charset= @$args["charset"]; if (!$charset) $charset= $wgOutputEncoding; #get max number of headlines from argument-array $maxheads = @$args["max"]; $headcnt = 0; #get short-flag from argument-array #if short is set, no description text is printed $short= @$args["short"]; #fetch rss. may be cached locally. #Refer to the documentation of magpie for details. $rss = @fetch_rss($url); #check for errors. if ($rss->ERROR) { return "<div>Failed to load RSS feed from $url: ".$rss->ERROR."</div>"; #localize... } if (!is_array($rss->items)) { return "<div>Failed to load RSS feed from $url!</div>"; #localize... } #Bild title line $title= iconv($charset,$wgOutputEncoding,$rss->channel['title']); if ($rss->channel['link']) $title= "<a href='".$rss->channel['link']."'>$title</a>"; $output="<h3>$title</h3>"; #Bild items if ($short) { #short item list $output.="<ul>"; foreach ($rss->items as $item) { $href = trim(iconv($charset,$wgOutputEncoding,$item['link'])); $title = trim(iconv($charset,$wgOutputEncoding,$item['title'])); $output.="<li><a href='$href'>$title</a></li>"; #Cut off output when maxheads is reached: if (++$headcnt == $maxheads) break; } $output.="</ul>"; } else { #full item list $output.="<dl>"; foreach ($rss->items as $item) { $href = trim(iconv($charset,$wgOutputEncoding,$item['link'])); $title = trim(iconv($charset,$wgOutputEncoding,$item['title'])); #bild description text if desired if ($item["description"]) { $text= trim(iconv($charset,$wgOutputEncoding,$item['description'])); #avoid pre-tags $text= str_replace("\r"," ",$text); $text= str_replace("\n"," ",$text); $text= str_replace("\t"," ",$text); } else $text = ""; $output.="<dt><a href='$href'>$title</a></dt>"; if ($text) $output.="<dd>$text</dd>\n"; #Cut off output when maxheads is reached: if (++$headcnt == $maxheads) break; } $output.="</dl>"; } return $output; } ?>