RSS取得プラグイン(ショートコード)

記事中に表示

RSSを取得してHTML化し、記事中に表示するショートコードです。 利用にはWordPress2.5以降、PHP5以降が必要です。文字コードはUTF-8のみ動作確認しています。

RSSとは

RSSとは、XML準拠のフォーマットで、ウェブページのタイトル、URL、要約、更新日時などを記述したものです。 RSS1.0は情報の多さを重視しており、RSS2.0はシンプルさを重視しています。 微妙に仕様が異なるほか、名称も、RSS1.0はrdf site summary、RSS2.0はreally simple syndicationとなっています。

RSS取得ショートコード

当サイト管理人が作成したショートコードです。 simplexmlを使用しているので、PHP5以降でのみ利用可能です。 (スクリプトソースだけを見る場合は»rsshtml.txt)

    class Rsshtml {
        private $num_of_data;
        private $length_of_desc;
        private $tmpdata;
        private $rssdata;
        private $outdata;
        
        function __construct( $url ) {
            $this->tmpdata = simplexml_load_file( $url );
            if (( is_object($this->tmpdata->item) == false) || (sizeof($this->tmpdata->item) <= 0 )) {
                $this->rssdata = $this->tmpdata->channel;
            } else {
                $this->rssdata = $this->tmpdata;
            }
        }

        function getlink( $num, $desc, $header, $footer, $itemheader, $itemfooter ) {
                $this->num_of_data = intval($num) ;
                $this->length_of_desc = intval($desc);
            
                $this->outdata = $header;
            for ( $i=0; $i<$this->num_of_data; $i++ ) {
                $this->outdata .= $itemheader;
                $this->outdata .= "<a href=\"" . htmlspecialchars($this->rssdata->item[$i]->link, ENT_QUOTES) . "\">" . htmlspecialchars($this->rssdata->item[$i]->title, ENT_QUOTES) . "</a>";
                $this->outdata .= mb_strimwidth(htmlspecialchars($this->rssdata->item[$i]->description, ENT_QUOTES),0,$this->length_of_desc,"...");
                $this->outdata .= $itemfooter;
            }
                $this->outdata .= $footer;
            
            return $this->outdata;
        }
    }

function rsshtml_output_func( $atts, $content = null ) {
    extract( shortcode_atts( array(
                                 'num'        => '3',
                                 'desc'       => '100',
                                 'header'     => '<ul>',
                                 'footer'     => '</ul>',
                                 'itemheader' => '<li>',
                                 'itemfooter' => '</li>',
                                 ), $atts ));
    if ( $content ) {
        $obj = new Rsshtml($content);
        $outdata = $obj->getlink( $num, $desc, $header, $footer, $itemheader, $itemfooter );
        if ( "UTF-8" != get_bloginfo('charset') ) {
            return mb_convert_encoding( $outdata, get_bloginfo('charset'), "UTF-8" );
        } else {
            return $outdata;            
        }
    }

}

add_shortcode( 'rsshtml', 'rsshtml_output_func' );

[rsshtml][/rsshtml]の間に、RSSファイルを指定します。 外部のRSSを取得する場合は、php.iniの設定でallow_url_fopenがonである必要があります。
※スクリプトでは最低限のサニタイズを行っていますが、外部サイトのRSS取得は信頼できるサイトに限定してください。

ショートコードの属性はnumdescheaderfooteritemheaderitemfooterを用意しています。

numは表示アイテム数で、デフォルト値は3です。 descは説明の表示文字数で、デフォルト値は100です。 日本語等のマルチバイト文字(全角)は2文字としてカウントします。

headerfooterは全体のヘッダーとフッターで、デフォルト値はそれぞれ<ul></ul>です。

itemheaderitemfooterは各アイテムのヘッダーとフッターで、デフォルト値はそれぞれ<li></li>です。

例えば、表示するアイテム数5、説明の長さを60文字、<ol>でマークアップする場合のショートコードは、下のようになります。(itemheaderitemfooterは変更無し)

[rsshtml num="5" desc="60" header="<ol>" footer="</ol>"]http://www.kyoto-math.jp/feed[/rsshtml]
Copyright (C) 2008-2009. さくらインターネットでWordPress All rights reserved.