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取得は信頼できるサイトに限定してください。
ショートコードの属性はnum、desc、header、footer、itemheader、itemfooterを用意しています。
numは表示アイテム数で、デフォルト値は3です。 descは説明の表示文字数で、デフォルト値は100です。 日本語等のマルチバイト文字(全角)は2文字としてカウントします。
header、footerは全体のヘッダーとフッターで、デフォルト値はそれぞれ<ul>と</ul>です。
itemheader、itemfooterは各アイテムのヘッダーとフッターで、デフォルト値はそれぞれ<li>と</li>です。
例えば、表示するアイテム数5、説明の長さを60文字、<ol>でマークアップする場合のショートコードは、下のようになります。(itemheader、itemfooterは変更無し)
[rsshtml num="5" desc="60" header="<ol>" footer="</ol>"]http://www.kyoto-math.jp/feed[/rsshtml]