User:Rdb78/RSS
Appearance
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;
}
?>