mixirss.inc.php

Last-modified: Tue, 07 Nov 2017 12:02:01 JST (834d)
Top > mixirss.inc.php

mixirss.inc.php

サマリRSSリーダーより読みやすくしたプラグイン
リビジョン0.1
対応バージョン1.4.4plus-u3
投稿者みこ
投稿日2004-12-21 12:16:46 (火)

概要

 RSSリーダーで読んでる人にとってPukiWikiのタイトルは判りづらくなっています。とくに、日記やBugTrackなどは目に付くほどなので、そんなものでも読みやすいタイトルでRSS出力するためのプラグインです。

 基本は、rss.inc.php の改造版ですが、独断と偏見でmixiにあわせていますので、デフォルト指定でのRSSバージョンは1.0となります。

書式

 コマンドで使用します。

http://(あなたのWikiのアドレス)/?cmd=mixirss

補足

 まだ、α版なので svn にしか置いていません。 u4 に同梱しました。

コメント

  • 本家のPUKIWKIをサイト使っていましたが、mixiは、うーん状態だったので日記はmixiで直接つけていました Plus!にしたいと思いテストしています。初心者なのでPukiwiki Plus!はめちゃめちゃ使いやすくって気に入っています。他のコンテンツもあるので日記のところのページ指定とかできないでしょうか?勝手な質問ですみません -- maino 2006-04-01 (土) 12:50:40
  • 例えば、開発日記/2006-03-25 の
    ***pukiwiki.php の削除 [#w4f2e48e]
    を参照したいとしたら、
  • すみません、説明不足でした minicalendarで作成されたページと連動したいので、calendar2 の引数でのページ名の下(言い方が分かってなくってごめんなさい)という意味だったのですが…。できますでしょうか? -- maino 2006-04-01 (土) 17:53:40
  • plusi18n.test:TEST/calendar2でテストページを作っておいたので、色々とやりたいことを試して、こんなことがしたいと示してみて下さい。-- upk 2006-04-02 (日) 17:20:19
  • おそらく↑で質問されてる方と同じ内容だと思うのですが、日記ページ等特定階層以下のみのRSSを出力させたいと思っています。(例:「開発日記/....」の部分) そういった使用方法はできるのでしょうか? -- 2006-05-22 (月) 17:06:30
    • 2007-04-10(火)修正:こんな記述で良いのかどうか知りませんが、regexでマッチしたページのみを返すように改造してみました。 -- ? 2007-04-09 (月) 22:46:03
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
      
      *** ../../plugin/mixirss.inc.php        Fri Apr  6 23:29:57 2007
      --- ./mixirss.inc.php   Mon Apr  9 23:37:46 2007
      ***************
      *** 1,6 ****
        <?php
        // PukiWiki - Yet another WikiWikiWeb clone.
      ! // $Id: mixirss.inc.php,v 1.14.5 2006/07/31 01:27:00 miko Exp $
        //
        // Publishing RSS feed of RecentChanges
        // Usage: mixirss.inc.php?ver=[0.91|1.0(default)|2.0]
      --- 1,6 ----
        <?php
        // PukiWiki - Yet another WikiWikiWeb clone.
      ! // $Id$
        //
        // Publishing RSS feed of RecentChanges
        // Usage: mixirss.inc.php?ver=[0.91|1.0(default)|2.0]
      ***************
      *** 20,25 ****
      --- 20,27 ----
        {
            global $vars, $rss_max, $rss_description, $page_title, $whatsnew, $trackback;
            global $modifier;
      +     // Add by M.Sugibuchi [reference to listing regex]
      +     global $mixirss_list_regex;
       
            $version = isset($vars['ver']) ? $vars['ver'] : '';
            switch($version){
      ***************
      *** 52,57 ****
      --- 54,64 ----
                exit;
            }
       
      +     // Add by M.Sugibuchi [default list regex setting]
      +     if (! is_array($mixirss_list_regex)) {
      +         $mixirss_list_regex = array('.');
      +     }
      +
            // Official Main routine ...
            $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
      	  $self  = get_script_uri();
      ***************
      *** 59,67 ****
       
      	  // Creating <item>
      	  $items = $rdf_li = '';
      	  $source = file($recent);
      !     foreach (array_splice($source, 0, $rss_max) as $line) {
                list($time, $page) = explode("\t", rtrim($line));
                $r_page = rawurlencode($page);
                $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
       
      --- 66,90 ----
       
            // Creating <item>
            $items = $rdf_li = '';
      +     // Add by M.Sugibuchi [reset item counter]
      +     $item_counter = 0;
            $source = file($recent);
      !     // Modify by M.Sugibuchi [check entire or until exceed to limit($rss_max)]
      !     //foreach (array_splice($source, 0, $rss_max) as $line) {
      !     foreach ($source as $line) {
      !         // Add M.Sugibuchi [check item counter]
      !         if ($item_counter >= $rss_max) break;
                list($time, $page) = explode("\t", rtrim($line));
      +         // Add M.Sugibuchi [check match pattern] ==>
      +         $match = FALSE;
      +         foreach ($mixirss_list_regex as $regs) {
      +             $match = ereg($regs,$page);
      +             if ($match) break;
      +         }
      +         if (!$match) continue;
      +         $item_counter = $item_counter + 1;
      +         // <== Add M.Sugibuchi [check match pattern]
      +
                $r_page = rawurlencode($page);
                $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
  • バグ報告。#includeや&refなどを含むページのdescriptionの出力でエラーメッセージがそのまま書き出されてしまう。 -- Ilfa 2007-12-09 (日) 00:20:40

    暫定的に下記のように書き換えて回避してます。泥縄ですが(笑)

    //miko added
     $description = get_source($page);
     $description = preg_replace("/^\#.*$/",'',$description); // ブロック型プラグイン(#~)削除
     $description = preg_replace("/\&.*\;/",'',$description); // インライン型プラグイン・文字参照(&~;)削除
     $description = strip_htmltag(convert_html($description));
     $description = mb_strimwidth(preg_replace("/[\r\n]/",' ',$description),0,RSS_DESCRIPTION_LENGTH,'...');
     $description = ' <description><![CDATA[' . mb_convert_encoding($description,'UTF-8',SOURCE_ENCODING) . ']]></description>';

    もうちょっとスマートにできるでしょうから、修正してsvnに反映してください。

  • エラーを出す原因は、プログラム的な要因なのでしょうか?それともページ構成上の問題なのでしょうか? -- upk 2007-12-09 (日) 01:08:19
  • たとえばrefプラグインは添付ファイルを相対指定で指定しますから、refプラグインのあるページをincludeやcalender_viewなどでincludeしている場合、includeやcalendar_viewerが記述されたページのmixirssによるRSS出力で「File not found:~at page ~」「#include(): Included already: 」などのエラーメッセージもRSS出力に含まれてしまいます。したがって、上記のようにconvert_htmlに通す前にrefプラグインなどの記述を削除しておく必要があります。 -- Ilfa 2007-12-10 (月) 00:10:57
  • つまり、$vars['page']に適切なページ名を設定し、convert_html() すればよいという話なんですか? -- upk 2007-12-10 (月) 02:24:40
  • なぜ、色々と確認しているのかと言うと、ブロック型にしても、中で利用しているプラグインを安易に消せない状況もあり、現状のようなロジックとなっているので、この指摘されたパッチでは、そのようなケースを想定していないように見えるため適用が難しいと考えています。以下のようなケースの解決策が見えないので、他の逃げ道があれば、それを適用したいわけです。例えば、
    #multilang(ja){{
    日本語で
    }}
    #multilang(en){{
    英語で
    }}
    のようなブロック型の#multilangだけで構成されたページがあったら、どうなりますかね? 言い方を変えると、プラグインにより、出力するしないの条件が異なり、そのプラグインを有効・無効にできるかどうかの判断ができないために、convert_html() を行って、そのプラグインを動かしてみる。その結果、html のタグを消す。という非常に安易な対処で文字列を取得している訳なんです。このお粗末な処理を、本当はもっと良いものにできれば、それがベストなんですよねぇ。convert_html() で判定しているわけですからねぇ。-- upk 2007-12-10 (月) 02:28:57
  • うーん、複数行プラグイン(疑似も含む)はいろいろ問題があるので、うちでは使ってないんですが。複数行プラグインは根本的に仕様を変えないと難しいでしょうね。そもそもRSS出力に複数行プラグインの実行結果まで出力すべきなのかどうか… -- Ilfa 2007-12-11 (火) 10:03:38
  • $vars['page']に適切なページ名を設定するだけではたぶん回避できないですよ。とくにPukiWikiのプラグインは$vars['page']と$vars['refer']の使い分けが明確でなく、数多くの自作プラグインが公開されていることもあって、ややこしいことになってますからねぇ… -- Ilfa 2007-12-11 (火) 10:06:05
  • 12/15にUpdateされたmixirss.inc.phpを試してみましたが、やはり依然として「#include(): Included already: などのエラーが出力されますね。$vars['page']の操作だけでは解決しないようです。 -- Ilfa 2007-12-17 (月) 15:14:57
  • ちょっとテストしただけでは、エラーにならないので、お試しサイトで結構なので、ぜひエラーを再現させて下さい。 -- upk 2007-12-18 (火) 00:38:01
  • 割り込みします。こんな感じにすると、エラーメッセージやUSAGEがそのままRSSに表示されてしまいます。$vars['cmd'] がmixirss の時はエラーメッセージを表示しない、とでもしないと回避できないんでしょうか?修正する数を考えると・・・って感じですが -- 2007-12-21 (金) 23:24:28
  • 画面ではエラーが出ず、mixirss で、そのページを処理した場合にエラーが出ることについて議論しているので、この場合は例にはなりません -- upk 2007-12-22 (土) 13:38:37
    • めんどくさがって同じページにinclude を2回書いたのがまずかったので、同じページを呼ぶページを2つにしました。これなら例になるかな? -- 2007-12-22 (土) 15:31:55
    • なりますねぇ。同じセッションで、複数回処理を行っているんで、こうなるんですね。この手の対策って、個別対応になるでしょうから、なんとか良い策はないものか?って感じですね。-- upk 2007-12-22 (土) 15:49:17
  • とりあえず、include プラグインを除外指定して、まんま出すようにしています。 -- upk 2007-12-22 (土) 18:41:03
  • // 特定階層以下の RecentChanges の RSS を出力」を使おうと、?plugin=mixirss&page=prefix にアクセスしてみましたが、出力はデフォルトままで prefix 以下のみにはなりませんでした。どのようにすれば特定階層以下の RecentChanges の RSS を出力できますでしょうか。 -- 山田? 2009-01-21 (水) 11:55:20
    • 上の方でM.Sugibuchi さんがパッチを書き込んでいるように、改造しないと実現できませんよ。 -- 2009-02-06 (金) 16:45:33
    • 既に解決されているかもしれませんが、本家pukiwikiの「特定階層下のRecentChangesの RSS0.91/RSS1.0 で出力する」プラグインで代用してみてはいかがでしょう? 自作プラグイン/rssp.inc.php自作プラグイン/rssp10.inc.php。こちらを参考に mixirss.inc.php 書き換えてみると良いかもです。 -- cola? 2010-04-27 (火) 15:58:55