|
|
(30 intermediate revisions by 5 users not shown) |
Line 1: |
Line 1: |
− | <rss>http://forum.linkstationwiki.net/rss2.php|charset=UTF-8|short|max=10</rss> | + | __NOTOC__ |
− | <rss>http://rss.groups.yahoo.com/group/LinkStation_General/rss|charset=UTF-8|short|max=5</rss> | + | <h3>LinkStation_General at Yahoo! Groups</h3> |
− | <noinclude>[[Category:Administrative templates]]
| + | <feed url="http://rss.groups.yahoo.com/group/LinkStation_General/rss" entries=7> |
− | | + | * <span class="plainlinks">[{PERMALINK} {TITLE}]</span> |
− | <table align=right><tr><td>
| + | </feed> |
− | http://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Wikimedia_logo_text_RGB.svg/135px-Wikimedia_logo_text_RGB.svg.png
| + | <h3>NAS Central Blog</h3> |
− | </td></tr></table>
| + | <feed url="http://blog.nas-central.org/feed/" entries=5> |
− | =GISWiki/RSS=
| + | * <span class="plainlinks">[{PERMALINK} {TITLE}]</span> |
− | Uses an extension from:
| + | </feed> |
− | http://meta.wikimedia.org/wiki/GISWiki/RSS
| + | <h3>Foonas Blog</h3> |
− | | + | <feed url="http://blog.foonas.org/feed/" entries=5> |
− | ==RSS-Feed Mediawiki extension==
| + | * <span class="plainlinks">[{PERMALINK} {TITLE}]</span> |
− | * original by mutante 25.03.2005 | + | </feed> |
− | * extended by Duesentrieb 30.04.2005
| + | <noinclude>[[Category:Administrative templates]]</noinclude> |
− | * extended by Rdb78 07.07.2005
| + | |
− | * extended by Mafs 10.07.2005, 24.07.2005
| + | |
− | * extended by User:Arcy 07.09.2005
| + | |
− | * Updated for MediaWiki 1.6 by User:piku 13.06.2006
| + | |
− | * Update for Wikicode output, by User:cogdog 14.jul.2006
| + | |
− | | + | |
− | ===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:''' <tt>include("extensions/rss.php");</tt>
| + | |
− | * make sure magpie can be found by PHP.
| + | |
− | | + | |
− | ===Usage:=== | + | |
− | Use one section between '''<tt><nowiki><rss></nowiki></tt>'''-tags for each feed. The rss section may contain parameters
| + | |
− | separated by a pipe'''<tt><nowiki> ("|")</nowiki></tt>''', just like links and templates. These parameters are supported:
| + | |
− | | + | |
− | {|
| + | |
− | |-
| + | |
− | || '''<tt>charset = ...</tt>''' ||The charset used by the feed. iconv is used to convert this.
| + | |
− | |-
| + | |
− | || '''<tt>short</tt>''' ||Do not show the description text for each news item.
| + | |
− | |-
| + | |
− | || '''<tt>max = x</tt>''' ||Shows x most recent headlines.
| + | |
− | |-
| + | |
− | || '''<tt>highlight = term1 term2 </tt>''' ||The terms separated by a space are highlighted.
| + | |
− | |-
| + | |
− | || '''<tt>filter = term1 term2 </tt>''' ||Show only rss items containing at least one of the terms.
| + | |
− | |-
| + | |
− | || '''<tt>reverse</tt>''' ||display the rss items in reverse order.
| + | |
− | |-
| + | |
− | || '''<tt>title = x</tt>''' ||display an alternative title instead of chanel name.
| + | |
− | |-
| + | |
− | || '''<tt>title = none</tt>''' ||dont display any title.
| + | |
− | |}
| + | |
− | | + | |
− | ==rss.php==
| + | |
− | <pre><nowiki>
| + | |
− | <?php
| + | |
− | # RSS-Feed Mediawiki extension
| + | |
− | #
| + | |
− | # original by mutante 25.03.2005
| + | |
− | # extended by Duesentrieb 30.04.2005
| + | |
− | # extended by Rdb78 07.07.2005
| + | |
− | # extended by Mafs 10.07.2005, 24.07.2005
| + | |
− | # extended by User:Arcy 07.09.2005
| + | |
− | # Updated for MediaWiki 1.6 by User:piku 13.06.2006
| + | |
− | # Update for Wikicode output, by User:cogdog 14.jul.2006
| + | |
− | #
| + | |
− | # 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 rss section may contain parameters
| + | |
− | # separated by a pipe ("|"), just like links and templates. These 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.
| + | |
− | # * highlight= term1 term2 The terms separated by a space are highlighted.
| + | |
− | # * filter= term1 term2 Show only rss items containing at least one of the terms.
| + | |
− | # * reverse display the rss items in reverse order.
| + | |
− | # * title=x display an alternative title instead of chanel name.
| + | |
− | # * title = none dont display any title.
| + | |
− | #
| + | |
− | # Example:
| + | |
− | # <rss>http://slashdot.org/slashdot.rss|charset=UTF-8|short|max=5</rss>
| + | |
− | #
| + | |
− | | + | |
− | #change this according to your magpie installation!
| + | |
− | require_once('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, $argv, $parser = null) {
| + | |
− | if (!$parser) $parser =& $GLOBALS['wgParser'];
| + | |
− | global $wgOutputEncoding;
| + | |
− | | + | |
− | $DefaultEncoding = "ISO-8859-1";
| + | |
− | $DisableCache = true;
| + | |
− | | + | |
− | # $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))]= False;
| + | |
− | else {
| + | |
− | list($k,$v)= explode("=",$f,2);
| + | |
− | if (trim($v)==False) $args[strtolower(trim($k))] = False;
| + | |
− | else $args[strtolower(trim($k))]= trim($v);
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | #get charset from argument-array
| + | |
− | $charset= @$args["charset"];
| + | |
− | if (!$charset) $charset= $DefaultEncoding;
| + | |
− | | + | |
− | #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
| + | |
− | if (isset($args["short"])) $short = True; else $short = False;
| + | |
− | | + | |
− | #get reverse-flag from argument-array
| + | |
− | if (isset($args["reverse"])) $reverse = True; else $reverse = False;
| + | |
− | | + | |
− | #get highlight terms from argument-array
| + | |
− | $rssHighlight= @$args["highlight"];
| + | |
− | $rssHighlight= str_replace(" "," ", $rssHighlight);
| + | |
− | $rssHighlight= explode(" ", trim($rssHighlight));
| + | |
− | | + | |
− | #get filter terms from argument-array
| + | |
− | $rssFilter= @$args["filter"];
| + | |
− | $rssFilter= str_replace(" "," ", $rssFilter);
| + | |
− | $rssFilter= explode(" ", trim($rssFilter));
| + | |
− | | + | |
− | #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 "Feed error"; #localize...
| + | |
− | #return "<div>Failed to load RSS feed from $url: ".$rss->ERROR."</div>"; #localize...
| + | |
− | }
| + | |
− | | + | |
− | if (!is_array($rss->items)) {
| + | |
− | # return "Feed error"; #localize...
| + | |
− | #return "<div>Failed to load RSS feed from $url!</div>"; #localize...
| + | |
− | }
| + | |
− | | + | |
− | #Bild title line
| + | |
− | #get title from argument-array
| + | |
− |
| + | |
− | $rssTitle= @$args["title"];
| + | |
− | $rssTitle= trim($rssTitle);
| + | |
− | | + | |
− | if ($rssTitle !=='none') {
| + | |
− | if ($rssTitle=='') {
| + | |
− | $title= iconv($charset,$wgOutputEncoding,$rss->channel['title']);
| + | |
− | if ($rss->channel['link']) $title= "[".$rss->channel['link']." $title]";
| + | |
− | $output = "=== $title ===\n";
| + | |
− | }
| + | |
− | else
| + | |
− | {
| + | |
− | $title= "[".$rss->channel['link']." $rssTitle]";
| + | |
− | $output="=== $title ===\n";
| + | |
− | }
| + | |
− | } else {
| + | |
− | $output="\n\n\n";
| + | |
− | }
| + | |
− |
| + | |
− | if ($reverse) $rss->items = array_reverse($rss->items);
| + | |
− | | + | |
− | $description = False;
| + | |
− | foreach ($rss->items as $item) {
| + | |
− | if ($item['description']) {$description = True; break;}
| + | |
− | }
| + | |
− | | + | |
− | #Bild items
| + | |
− | if (!$short and $description) { #full item list
| + | |
− | | + | |
− | $output.="";
| + | |
− | foreach ($rss->items as $item) {
| + | |
− | | + | |
− | $d_text = true;
| + | |
− | $d_title = true;
| + | |
− | | + | |
− | $href = trim(iconv($charset,$wgOutputEncoding,$item['link']));
| + | |
− | $title = trim(iconv($charset,$wgOutputEncoding,$item['title']));
| + | |
− | | + | |
− | $d_title = wfRssFilter ($title, $rssFilter);
| + | |
− | $title= wfRssHighlight($title, $rssHighlight);
| + | |
− | | + | |
− | #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);
| + | |
− | | + | |
− | $d_text = wfRssFilter ($text, $rssFilter);
| + | |
− | $text= wfRssHighlight($text, $rssHighlight);
| + | |
− | | + | |
− | $display = $d_text or $d_title;
| + | |
− | | + | |
− | }
| + | |
− | else {
| + | |
− | $text = "";
| + | |
− | $display = $d_title;
| + | |
− | }
| + | |
− | | + | |
− | if ($display) {
| + | |
− | $output.="* [$href $title]";
| + | |
− | if ($text) $output.="<br>$text";
| + | |
− | $output .= "\n";
| + | |
− | }
| + | |
− | | + | |
− | #Cut off output when maxheads is reached:
| + | |
− | if (++$headcnt == $maxheads) break;
| + | |
− | | + | |
− | }
| + | |
− | # $output.="</dl>";
| + | |
− | }
| + | |
− | else { #short item list
| + | |
− | # $output.="<ul>";
| + | |
− | foreach ($rss->items as $item) {
| + | |
− | $href = trim(iconv($charset,$wgOutputEncoding,$item['link']));
| + | |
− | $title = trim(iconv($charset,$wgOutputEncoding,$item['title']));
| + | |
− | | + | |
− | $d_title = wfRssFilter ($title, $rssFilter);
| + | |
− | $title= wfRssHighlight($title, $rssHighlight);
| + | |
− | | + | |
− | if ($d_title ) $output.="* [$href $title]\n";
| + | |
− | | + | |
− | #Cut off output when maxheads is reached:
| + | |
− | if (++$headcnt == $maxheads) break;
| + | |
− | }
| + | |
− | # $output.="</ul>";
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | if ($DisableCache) {
| + | |
− | | + | |
− | global $wgVersion;
| + | |
− | | + | |
− | # Do not cache this wiki page.
| + | |
− | # for details see http://public.kitware.com/Wiki/User:Barre/MediaWiki/Extensions
| + | |
− | global $wgTitle, $wgDBprefix;
| + | |
− | $ts = mktime();
| + | |
− | $now = gmdate("YmdHis", $ts + 120);
| + | |
− | $ns = $wgTitle->getNamespace();
| + | |
− | $ti = wfStrencode($wgTitle->getDBkey());
| + | |
− | | + | |
− | $version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
| + | |
− | if ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
| + | |
− | else $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'";
| + | |
− | | + | |
− | wfQuery($sql, DB_WRITE, "");
| + | |
− | }
| + | |
− | | + | |
− | $out = $parser->parse ($output, $parser->mTitle,$parser->mOptions, true, false);
| + | |
− | return $out->getText();
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | function wfRssFilter ($text, $rssFilter) {
| + | |
− | | + | |
− | $display = true;
| + | |
− | | + | |
− | if (is_array($rssFilter)) {
| + | |
− | foreach($rssFilter as $term) {
| + | |
− | | + | |
− | if ($term) {
| + | |
− | $display = false;
| + | |
− | if (preg_match("|$term|i", $text, $a)) { $display = true; return $display; }
| + | |
− | }
| + | |
− | if ($display) break;
| + | |
− | }
| + | |
− | }
| + | |
− | return $display;
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | function wfRssHighlight($text, $rssHighlight) {
| + | |
− | | + | |
− | $i=0;
| + | |
− | $starttag = "v8x5u3t3u8h";
| + | |
− | $endtag = "q8n4f6n4n4x";
| + | |
− | | + | |
− | $color[]="coral";
| + | |
− | $color[]="greenyellow";
| + | |
− | $color[]="lightskyblue";
| + | |
− | $color[]="gold";
| + | |
− | $color[]="violet";
| + | |
− | | + | |
− | $count_color = count($color);
| + | |
− | | + | |
− | if (is_array($rssHighlight)) {
| + | |
− | foreach($rssHighlight as $term) {
| + | |
− | if ($term) {
| + | |
− | $text = preg_replace("|\b(\w*?".$term."\w*?)\b|i", "$starttag"."_".$i."\\1$endtag", $text);
| + | |
− | $i++;
| + | |
− | if ($i == $count_color) $i=0;
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | # to avoid trouble should someone wants to highlight the terms "span", "style", ...
| + | |
− | for ($i=0; $i<5; $i++) {
| + | |
− | $text = preg_replace("|$starttag"."_".$i."|", "<span style=\"background-color:".$color[$i]."; font-weight: bold;\">", $text);
| + | |
− | $text = preg_replace("|$endtag|", "</span>", $text);
| + | |
− | }
| + | |
− | | + | |
− | return $text;
| + | |
− | }
| + | |
− | | + | |
− | ?></nowiki>
| + | |
− | </pre> | + | |
− | </noinclude> | + | |