<?php
-/////////////////////////////////////////////////
// PukiWiki - Yet another WikiWikiWeb clone.
+// $Id: showrss.inc.php,v 1.15 2005/01/06 13:54:14 henoheno Exp $
+// Id:showrss.inc.php,v 1.40 2003/03/18 11:52:58 hiro Exp
//
-// $Id: showrss.inc.php,v 1.14 2004/09/19 14:05:30 henoheno Exp $
-//
-// Modified version by PANDA <panda@arino.jp>
-//
+// Show RSS plugin
-/**
- *
- * showrss ¥×¥é¥°¥¤¥ó (Created by hiro_do3ob@yahoo.co.jp)
- *
- * ¥é¥¤¥»¥ó¥¹¤Ï PukiWiki ËÜÂΤÈƱ¤¸¤¯ GNU General Public License (GPL) ¤Ç¤¹¡£
- * http://www.gnu.org/licenses/gpl.txt
- *
- * pukiwikiÍѤΥץ饰¥¤¥ó¤Ç¤¹¡£
- * pukiwiki1.3.2°Ê¾å¤ÇÆ°¤¯¤È»×¤¤¤Þ¤¹¡£
- *
- * º£¤Î¤È¤³¤íÆ°ºî¤µ¤»¤ë¤¿¤á¤Ë¤ÏPHP ¤Î xml extension ¤¬É¬¿Ü¤Ç¤¹¡£PHP¤ËÁȤ߹þ¤Þ¤ì¤Æ¤Ê¤¤¾ì¹ç¤Ï¤½¤Ã¤±¤Ê¤¤¥¨¥é¡¼¤¬½Ð¤ë¤È»×¤¤¤Þ¤¹¡£
- * Àµµ¬É½¸½ or ʸ»úÎó´Ø¿ô¤Ç¤Ê¤ó¤È¤«¤Ê¤é¤Ê¤¯¤â¤Ê¤µ¤²¤Ê¤ó¤Ç¤¹¤¬¼ûÍפäƤɤ줯¤é¤¤¤¢¤ë¤Î¤«¤ï¤«¤é¤¤¤Î¤ÇÊÝα¤Ç¤¹¡£
- *
- * version: Id:showrss.inc.php,v 1.40 2003/03/18 11:52:58 hiro Exp
- *
+/*
+ * Created by hiro_do3ob@yahoo.co.jp
+ * Modified by PANDA <panda@arino.jp>, and PukiWiki Developer Team
+ * Licence: GPL, same as PukiWiki
+ * This plugin needs 'PHP xml extension'
*/
-// showrss¥×¥é¥°¥¤¥ó¤¬»ÈÍѲÄǽ¤«¤É¤¦¤«¤òɽ¼¨
+// Show this plugin is enable or not for this PukiWiki
function plugin_showrss_action()
{
- $xml_extension = extension_loaded('xml');
+ $xml_extension = extension_loaded('xml');
$mbstring_extension = extension_loaded('mbstring');
- $xml_msg = $xml_extension ? 'xml extension is loaded' : 'COLOR(RED){xml extension is not loaded}';
+ $xml_msg = $xml_extension ? 'xml extension is loaded' : 'COLOR(RED){xml extension is not loaded}';
$mbstring_msg = $mbstring_extension ? 'mbstring extension is loaded' : 'COLOR(RED){mbstring extension is not loaded}';
-
- $showrss_info = '';
- $showrss_info .= "| xml parser | $xml_msg |\n";
- $showrss_info .= "| multibyte | $mbstring_msg |\n";
+ $showrss_info =
+ '| xml parser | ' . $xml_msg . ' |' . "\n" .
+ '| multibyte | ' . $mbstring_msg . ' |' . "\n";
return array('msg' => 'showrss_info', 'body' => convert_html($showrss_info));
}
function plugin_showrss_convert()
{
- if (func_num_args() == 0)
- {
- // °ú¿ô¤¬¤Ê¤¤¾ì¹ç¤Ï¥¨¥é¡¼
- return "<p>showrss: no parameter(s).</p>\n";
- }
- if (!extension_loaded('xml'))
- {
- // xml ³ÈÄ¥µ¡Ç½¤¬Í¸ú¤Ç¤Ê¤¤¾ì¹ç¡£
- return "<p>showrss: xml extension is not loaded</p>\n";
+ if (func_num_args() == 0) {
+ return '<p>showrss: no parameter(s).</p>' . "\n";
+ } else if (! extension_loaded('xml')) {
+ return '<p>showrss: xml extension is not loaded</p>' . "\n";
}
- $array = func_get_args();
+ $array = func_get_args();
$rssurl = $tmplname = $usecache = $usetimestamp = '';
- switch (func_num_args())
- {
- case 4:
- $usetimestamp = trim($array[3]);
- case 3:
- $usecache = $array[2];
- case 2:
- $tmplname = strtolower(trim($array[1]));
- case 1:
- $rssurl = trim($array[0]);
+ switch (func_num_args()) {
+ case 4: $usetimestamp = trim($array[3]);
+ case 3: $usecache = $array[2];
+ case 2: $tmplname = strtolower(trim($array[1]));
+ case 1: $rssurl = trim($array[0]);
}
// RSS ¥Ñ¥¹¤ÎÃÍ¥Á¥§¥Ã¥¯
- if (!is_url($rssurl))
- {
- return '<p>showrss: syntax error. '.htmlspecialchars($rssurl)."</p>\n";
- }
+ if (! is_url($rssurl))
+ return '<p>showrss: syntax error. ' . htmlspecialchars($rssurl) . '</p>' . "\n";
- $class = "ShowRSS_html_$tmplname";
- if (!class_exists($class))
- {
- $class = 'ShowRSS_html';
- }
+ $class = 'ShowRSS_html_' . $tmplname;
+ if (! class_exists($class)) $class = 'ShowRSS_html';
- list($rss,$time) = plugin_showrss_get_rss($rssurl,$usecache);
+ list($rss, $time) = plugin_showrss_get_rss($rssurl, $usecache);
if ($rss === FALSE)
- {
- return "<p>showrss: cannot get rss from server.</p>\n";
- }
+ return '<p>showrss: cannot get rss from server.</p>' . "\n";
$obj = new $class($rss);
$timestamp = '';
- if ($usetimestamp > 0)
- {
+ if ($usetimestamp > 0) {
$time = get_date('Y/m/d H:i:s',$time);
- $timestamp = "<p style=\"font-size:10px; font-weight:bold\">Last-Modified:$time</p>";
+ $timestamp = '<p style="font-size:10px; font-weight:bold">Last-Modified:' . $time . '</p>';
}
return $obj->toString($timestamp);
}
-// rssÇÛÎ󤫤éhtml¤òºî¤ë
+
+// RSSÇÛÎ󤫤éhtml¤òºî¤ë
class ShowRSS_html
{
var $items = array();
function ShowRSS_html($rss)
{
- foreach ($rss as $date=>$items)
- {
- foreach ($items as $item)
- {
- $link = $item['LINK'];
+ foreach ($rss as $date=>$items) {
+ foreach ($items as $item) {
+ $link = $item['LINK'];
$title = $item['TITLE'];
$passage = get_passage($item['_TIMESTAMP']);
- $link = "<a href=\"$link\" title=\"$title $passage\">$title</a>";
+ $link = '<a href="' . $link . '" title="' .
+ $title . ' ' . $passage . '">' . $title . '</a>';
$this->items[$date][] = $this->format_link($link);
}
}
}
+
function format_link($link)
{
- return "$link<br />\n";
+ return $link . '<br />' . "\n";
}
- function format_list($date,$str)
+
+ function format_list($date, $str)
{
return $str;
}
+
function format_body($str)
{
return $str;
}
+
function toString($timestamp)
{
$retval = '';
foreach ($this->items as $date=>$items)
- {
- $retval .= $this->format_list($date,join('',$items));
- }
+ $retval .= $this->format_list($date, join('', $items));
$retval = $this->format_body($retval);
return <<<EOD
<div{$this->class}>
EOD;
}
}
+
class ShowRSS_html_menubar extends ShowRSS_html
{
var $class = ' class="small"';
- function format_link($link)
- {
- return "<li>$link</li>\n";
+ function format_link($link) {
+ return '<li>' . $link . '</li>' . "\n";
}
- function format_body($str)
- {
- return "<ul class=\"recent_list\">\n$str</ul>\n";
+
+ function format_body($str) {
+ return '<ul class="recent_list">' . "\n" . $str . '</ul>' . "\n";
}
}
+
class ShowRSS_html_recent extends ShowRSS_html
{
var $class = ' class="small"';
- function format_link($link)
- {
- return "<li>$link</li>\n";
+ function format_link($link) {
+ return '<li>' . $link . '</li>' . "\n";
}
- function format_list($date,$str)
- {
- return "<strong>$date</strong>\n<ul class=\"recent_list\">\n$str</ul>\n";
+
+ function format_list($date, $str) {
+ return '<strong>' . $date . '</strong>' . "\n" .
+ '<ul class="recent_list">' . "\n" . $str . '</ul>' . "\n";
}
}
+
// rss¤ò¼èÆÀ¤¹¤ë
-function plugin_showrss_get_rss($target,$usecache)
+function plugin_showrss_get_rss($target, $usecache)
{
$buf = '';
$time = NULL;
- if ($usecache)
- {
+ if ($usecache) {
// ´ü¸ÂÀÚ¤ì¤Î¥¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢
plugin_showrss_cache_expire($usecache);
// ¥¥ã¥Ã¥·¥å¤¬¤¢¤ì¤Ð¼èÆÀ¤¹¤ë
$filename = CACHE_DIR . encode($target) . '.tmp';
- if (is_readable($filename))
- {
- $buf = join('',file($filename));
+ if (is_readable($filename)) {
+ $buf = join('', file($filename));
$time = filemtime($filename) - LOCALZONE;
}
}
- if ($time === NULL)
- {
- // rssËÜÂΤò¼èÆÀ
- $data = http_request($target);
+
+ if ($time === NULL) {
+ $data = http_request($target); // rssËÜÂΤò¼èÆÀ
if ($data['rc'] !== 200)
- {
- return array(FALSE,0);
- }
+ return array(FALSE, 0);
+
$buf = $data['data'];
$time = UTIME;
// ¥¥ã¥Ã¥·¥å¤òÊݸ
- if ($usecache)
- {
+ if ($usecache) {
$fp = fopen($filename, 'w');
- fwrite($fp,$buf);
+ fwrite($fp, $buf);
fclose($fp);
}
}
$obj = new ShowRSS_XML();
return array($obj->parse($buf),$time);
}
+
// ´ü¸ÂÀÚ¤ì¤Î¥¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢
function plugin_showrss_cache_expire($usecache)
{
$expire = $usecache * 60 * 60; // Hour
$dh = dir(CACHE_DIR);
- while (($file = $dh->read()) !== FALSE)
- {
- if (substr($file,-4) != '.tmp')
- {
+ while (($file = $dh->read()) !== FALSE) {
+ if (substr($file, -4) != '.tmp')
continue;
- }
+
$file = CACHE_DIR.$file;
$last = time() - filemtime($file);
- if ($last > $expire)
- {
- unlink($file);
- }
+ if ($last > $expire) unlink($file);
}
$dh->close();
}
+
// rss¤ò¼èÆÀ¡¦ÇÛÎó²½
class ShowRSS_XML
{
function parse($buf)
{
// ½é´ü²½
- $this->items = array();
- $this->item = array();
+ $this->items = array();
+ $this->item = array();
$this->is_item = FALSE;
- $this->tag = '';
+ $this->tag = '';
// ʸ»ú¥³¡¼¥É¸¡½Ð
$this->encoding = mb_detect_encoding($buf);
- if (!in_array(strtolower($this->encoding),array('us-ascii','iso-8859-1','utf-8'))) {
- $buf = mb_convert_encoding($buf,'utf-8',$this->encoding);
+ if (! in_array(strtolower($this->encoding), array('us-ascii', 'iso-8859-1', 'utf-8'))) {
+ $buf = mb_convert_encoding($buf, 'utf-8', $this->encoding);
$this->encoding = 'utf-8';
}
$xml_parser = xml_parser_create($this->encoding);
- xml_set_element_handler($xml_parser,array(&$this,'start_element'),array(&$this,'end_element'));
- xml_set_character_data_handler($xml_parser,array(&$this,'character_data'));
+ xml_set_element_handler($xml_parser, array(& $this, 'start_element'), array(& $this, 'end_element'));
+ xml_set_character_data_handler($xml_parser, array(& $this, 'character_data'));
- if (!xml_parse($xml_parser,$buf,1))
- {
+ if (! xml_parse($xml_parser, $buf, 1)) {
return(sprintf('XML error: %s at line %d in %s',
xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser),$buf));
+ xml_get_current_line_number($xml_parser), $buf));
}
xml_parser_free($xml_parser);
return $this->items;
}
+
function escape($str)
{
// RSSÃæ¤Î "< > &" ¤Ê¤É¤ò °ìö "< > &" ¤ËÌᤷ¡¢ ¡ã "&" ¤¬ "&amp;" ¤Ë¤Ê¤Ã¤Á¤ã¤¦¤ÎÂкö
}
// ¥¿¥°³«»Ï
- function start_element($parser,$name,$attrs)
+ function start_element($parser, $name, $attrs)
{
- if ($this->is_item)
- {
- $this->tag = $name;
- }
- else if ($name == 'ITEM')
- {
+ if ($this->is_item) {
+ $this->tag = $name;
+ } else if ($name == 'ITEM') {
$this->is_item = TRUE;
}
}
+
// ¥¿¥°½ªÎ»
- function end_element($parser,$name)
+ function end_element($parser, $name)
{
- if (!$this->is_item or $name != 'ITEM')
- {
- return;
- }
- $item = array_map(array(&$this,'escape'),$this->item);
+ if (! $this->is_item || $name != 'ITEM') return;
+ $item = array_map(array(& $this, 'escape'), $this->item);
$this->item = array();
- if (array_key_exists('DC:DATE',$item))
- {
+ if (isset($item['DC:DATE'])) {
$time = plugin_showrss_get_timestamp($item['DC:DATE']);
- }
- else if (array_key_exists('PUBDATE',$item))
- {
+
+ } else if (isset($item['PUBDATE'])) {
$time = plugin_showrss_get_timestamp($item['PUBDATE']);
- }
- else if (array_key_exists('DESCRIPTION',$item)
- and ($description = trim($item['DESCRIPTION'])) != ''
- and ($time = strtotime($description)) != -1)
- {
- $time -= LOCALZONE;
- }
- else
- {
+
+ } else if (isset($item['DESCRIPTION']) &&
+ ($description = trim($item['DESCRIPTION'])) != '' &&
+ ($time = strtotime($description)) != -1) {
+ $time -= LOCALZONE;
+
+ } else {
$time = time() - LOCALZONE;
}
$item['_TIMESTAMP'] = $time;
- $date = get_date('Y-m-d',$item['_TIMESTAMP']);
+ $date = get_date('Y-m-d', $item['_TIMESTAMP']);
$this->items[$date][] = $item;
- $this->is_item = FALSE;
+ $this->is_item = FALSE;
}
+
// ¥¥ã¥é¥¯¥¿
- function character_data($parser,$data)
+ function character_data($parser, $data)
{
- if (!$this->is_item)
- {
- return;
- }
- if (!array_key_exists($this->tag,$this->item))
- {
- $this->item[$this->tag] = '';
- }
+ if (! $this->is_item) return;
+ if (! isset($this->item[$this->tag])) $this->item[$this->tag] = '';
$this->item[$this->tag] .= $data;
}
}
+
function plugin_showrss_get_timestamp($str)
{
if (($str = trim($str)) == '')
- {
return UTIME;
- }
- if (!preg_match('/(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(([+-])(\d{2}):(\d{2}))?/',$str,$matches))
- {
+
+ $matches = array();
+ if (! preg_match('/(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(([+-])(\d{2}):(\d{2}))?/', $str, $matches)) {
$time = strtotime($str);
return ($time == -1) ? UTIME : $time - LOCALZONE;
}
- $str = $matches[1];
- $time = strtotime($matches[1].' '.$matches[2]);
- if (!empty($matches[3]))
- {
- $diff = ($matches[5]*60+$matches[6])*60;
+ $str = $matches[1];
+ $time = strtotime($matches[1] . ' ' . $matches[2]);
+ if (! empty($matches[3])) {
+ $diff = ($matches[5] * 60 + $matches[6]) * 60;
$time += ($matches[4] == '-' ? $diff : -$diff);
}
return $time;