Difference between revisions of "Extension:SimpleRSS.php"

From Organic Design wiki
(There's the problem - using object syntax for global function call)
(updated: need to figure ot dom stuff)
Line 9: Line 9:
  
 
$wgRobsRSSTag                    = "rss";
 
$wgRobsRSSTag                    = "rss";
$wgRSSUseAjax                    = true;
+
$wgRSSUseAjax                    = false;
 
$wgExtensionFunctions[]          = 'wfSetupRobsRSS';
 
$wgExtensionFunctions[]          = 'wfSetupRobsRSS';
 
$wgExtensionCredits['parserhook'][] = array(
 
$wgExtensionCredits['parserhook'][] = array(
'name'        => 'RobsRSS',
+
        'name'        => 'RobsRSS',
'author'      => '[http://www.organicdesign.co.nz/User:Rob User:Rob]',
+
        'author'      => '[http://www.organicdesign.co.nz/User:Rob User:Rob]',
'description' => 'A dynamic aggregating RSS reader',
+
        'description' => 'A dynamic aggregating RSS reader',
'url'        => 'http://www.mediawiki.org/wiki/Extension:RobsRSS',
+
        'url'        => 'http://www.mediawiki.org/wiki/Extension:RobsRSS',
'version'    => ROBSRSS_VERSION
+
        'version'    => ROBSRSS_VERSION
);
+
        );
  
  
 
# Called from $wgExtensionFunctions array when initialising extensions
 
# Called from $wgExtensionFunctions array when initialising extensions
 
function wfSetupRobsRSS() {
 
function wfSetupRobsRSS() {
global $wgParser,$wgRSSUseAjax,$wgRobsRSSTag,$wgAjaxExportList;
+
        global $wgParser,$wgRSSUseAjax,$wgAjaxExportList,$wgRobsRSSTag;
$wgParser->setHook($wgRobsRSSTag,'wfRssTagHook');
+
        $wgParser->setHook($wgRobsRSSTag,'wfRssTagHook');
if ($wgRSSUseAjax) $wgAjaxExportList[] = 'wfRenderRSS'; # Allow Ajax Dispatcher to call wfRenderRSS
+
        if ($wgRSSUseAjax) $wgAjaxExportList[] = 'wfRenderRSS'; # Allow Ajax Dispatcher to call wfRenderRSS
}
+
        }
  
 
# Expand an <rss> tag
 
# Expand an <rss> tag
 
function wfRssTagHook($text,$argv,&$parser) {
 
function wfRssTagHook($text,$argv,&$parser) {
global $wgRSSUseAjax;
+
        global $wgRSSUseAjax;
$args = '';
+
        $args = '';
foreach ($argv as $k => $v) $args .= "<li><b>$k:</b> <i>$v</i></li>\n";
+
        foreach ($argv as $k => $v) $args .= "<li><b>$k:</b> <i>$v</i></li>\n";
  
if ($wgRSSUseAjax) {
+
        if ($wgRSSUseAjax) {
# Render a container which does ajax requests for content
+
                # Render a container which does ajax requests for content
$html = "<div id=foo> an ajax thingie </div>";
+
                $html = "<div id=foo> an ajax thingie </div>";
}
+
                }
else {
+
        else {
# Not using ajax, render the output now
+
                # Not using ajax, render the output now
$html = wfRenderRSS($data,$timestamp);
+
                $html = wfRenderRSS($data,$timestamp);
}
+
                }
 +
        # grab each url and process
 +
        $data = wfReadRSS(preg_split("/[\n\r]/", $text, -1, PREG_SPLIT_NO_EMPTY));
 +
 
 +
        # dump data       
 +
        foreach ($data as $k => $v) $html .= "<li><b>$k:</b> <i>$v</i></li>\n";
 +
       
 +
        return $html;
 +
        }
 +
 
 +
# Render a portion of RSS data (which is in the useful format returned by wfReadRSS)
 +
function wfRenderRSS($data,$timestamp = false) {
 +
        return $html;
 +
        }
  
return "Hello!";
 
# return $html;
 
}
 
 
 
# Read RSS from URL's and return as some kind of useful runtime structure
 
# Read RSS from URL's and return as some kind of useful runtime structure
 
function wfReadRSS($urls) {
 
function wfReadRSS($urls) {
$data = array();
+
        $data = array();
foreach ($urls as $url) {
+
        foreach ($urls as $url) {
$doc = new DOMDocument();
+
                $doc = new DOMDocument();
# do some cache stuff here
+
                # do some cache stuff here
$doc->load($url);
+
                $doc->load($url);
# get feed details
+
                # get feed details
$feed=$doc->getElementsByTagName('channel')->item(0);
+
                $feed=$doc->getElementsByTagName('channel')->item(0);
         $feed_title = $channel->getElementsByTagName('title')
+
         $feed_title = $feed->getElementsByTagName('title')
 
         ->item(0)->childNodes->item(0)->nodeValue;
 
         ->item(0)->childNodes->item(0)->nodeValue;
         $feed_link = $channel->getElementsByTagName('link')
+
         $feed_link = $feed->getElementsByTagName('link')
 
         ->item(0)->childNodes->item(0)->nodeValue;
 
         ->item(0)->childNodes->item(0)->nodeValue;
         $feed_desc = $channel->getElementsByTagName('description')
+
         $feed_desc = $feed->getElementsByTagName('description')
 
         ->item(0)->childNodes->item(0)->nodeValue;
 
         ->item(0)->childNodes->item(0)->nodeValue;
+
                $data[] = $feed;
+
 
foreach ($dom->getElementsByTagName('item') as $item) {
+
/*                foreach ($doc->getElementsByTagName('item') as $item) {
# what follows looks overly complicated? simplify?
+
                # what follows looks overly complicated? simplify?
            for ($i=0; $i<=2; $i++) {
+
                $item_title=$item->getElementsByTagName('title')->nodeValue;
                 $item_title=$dom->item($i)->getElementsByTagName('title')
+
                 $item_link=$doc->item($i)->getElementsByTagName('link')
 
                 ->item(0)->childNodes->item(0)->nodeValue;
 
                 ->item(0)->childNodes->item(0)->nodeValue;
                 $item_link=$dom->item($i)->getElementsByTagName('link')
+
                 $item_desc=$doc->item($i)->getElementsByTagName('description')
 
                 ->item(0)->childNodes->item(0)->nodeValue;
 
                 ->item(0)->childNodes->item(0)->nodeValue;
                 $item_desc=$dom->item($i)->getElementsByTagName('description')
+
                 $item_date=$doc->item($i)->getElementsByTagName('pubDate')
 
                 ->item(0)->childNodes->item(0)->nodeValue;
 
                 ->item(0)->childNodes->item(0)->nodeValue;
                $item_date=$dom->item($i)->getElementsByTagName('pubDate')
+
                 # <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>  
                ->item(0)->childNodes->item(0)->nodeValue;
+
                 $data[] = "<p>$item_title: $item_link $item_desc $item_date";
                 # <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
+
 
                 $data .= "<p>$item_title: $item_link $item_desc $item_date";
 
                }
 
 
             # add collected info into $data
 
             # add collected info into $data
 
             # TODO need to grab date information so we can sort
 
             # TODO need to grab date information so we can sort
 
             # Date is in UDF from memory
 
             # Date is in UDF from memory
             }
+
             }*/
}
+
                }
return $data;
+
        return $data;
}
+
        }
 
 
# Render a portion of RSS data (which is in the useful format returned by wfReadRSS)
 
function wfRenderRSS($data,$timestamp = false) {
 
return $html;
 
}
 
  
 
?>
 
?>

Revision as of 07:43, 14 October 2007

<?php

  1. Extension:RobsRSS
Info.svg These are the MediaWiki extensions we're using and/or developing. Please refer to the information on the mediawiki.org wiki for installation and usage details. Extensions here which have no corresponding mediawiki article are either not ready for use or have been superseded. You can also browse our extension code in our local Subversion repository or our GitHub mirror.

Template:Php

  1. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
  2. - Author: User:RobCategory:Extensions created with Template:Extension

if (!defined('MEDIAWIKI')) die('Not an entry point.');

define('ROBSRSS_VERSION','0.0.0, 2007-10-14');

$wgRobsRSSTag = "rss"; $wgRSSUseAjax = false; $wgExtensionFunctions[] = 'wfSetupRobsRSS'; $wgExtensionCredits['parserhook'][] = array(

       'name'        => 'RobsRSS',
       'author'      => 'User:Rob',
       'description' => 'A dynamic aggregating RSS reader',
       'url'         => 'http://www.mediawiki.org/wiki/Extension:RobsRSS',
       'version'     => ROBSRSS_VERSION
       );


  1. Called from $wgExtensionFunctions array when initialising extensions

function wfSetupRobsRSS() {

       global $wgParser,$wgRSSUseAjax,$wgAjaxExportList,$wgRobsRSSTag;
       $wgParser->setHook($wgRobsRSSTag,'wfRssTagHook');
       if ($wgRSSUseAjax) $wgAjaxExportList[] = 'wfRenderRSS'; # Allow Ajax Dispatcher to call wfRenderRSS
       }
  1. Expand an <rss> tag

function wfRssTagHook($text,$argv,&$parser) {

       global $wgRSSUseAjax;
       $args = ;

foreach ($argv as $k => $v) $args .= "

  • $k: $v
  • \n";

           if ($wgRSSUseAjax) {
                   # Render a container which does ajax requests for content
    

    $html = "

    an ajax thingie

    ";

                   }
           else {
                   # Not using ajax, render the output now
                   $html = wfRenderRSS($data,$timestamp);
                   }
           # grab each url and process
           $data = wfReadRSS(preg_split("/[\n\r]/", $text, -1, PREG_SPLIT_NO_EMPTY));
    
           # dump data        
    

    foreach ($data as $k => $v) $html .= "

  • $k: $v
  • \n";

           return $html;
           }
    
    1. Render a portion of RSS data (which is in the useful format returned by wfReadRSS)

    function wfRenderRSS($data,$timestamp = false) {

           return $html;
           }
    
    1. Read RSS from URL's and return as some kind of useful runtime structure

    function wfReadRSS($urls) {

           $data = array();
           foreach ($urls as $url) {
                   $doc = new DOMDocument();
                   # do some cache stuff here
                   $doc->load($url);
                   # get feed details
                   $feed=$doc->getElementsByTagName('channel')->item(0);
           $feed_title = $feed->getElementsByTagName('title')
           ->item(0)->childNodes->item(0)->nodeValue;
           $feed_link = $feed->getElementsByTagName('link')
           ->item(0)->childNodes->item(0)->nodeValue;
           $feed_desc = $feed->getElementsByTagName('description')
           ->item(0)->childNodes->item(0)->nodeValue;
                   $data[] = $feed;
    

    /* foreach ($doc->getElementsByTagName('item') as $item) {

                   # what follows looks overly complicated? simplify?
                   $item_title=$item->getElementsByTagName('title')->nodeValue;
                   $item_link=$doc->item($i)->getElementsByTagName('link')
                   ->item(0)->childNodes->item(0)->nodeValue;
                   $item_desc=$doc->item($i)->getElementsByTagName('description')
                   ->item(0)->childNodes->item(0)->nodeValue;
                   $item_date=$doc->item($i)->getElementsByTagName('pubDate')
                   ->item(0)->childNodes->item(0)->nodeValue;
                   # <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate> 
    

    $data[] = "

    $item_title: $item_link $item_desc $item_date"; # add collected info into $data # TODO need to grab date information so we can sort # Date is in UDF from memory }*/ } return $data; } ?>