【Magpie RSS】RSS内に入り込む広告をスキップする

2011年11月28日 - Yutaka Moromizato

自分のサイトに、ブログ記事へのリンクを表示させるのに使えるPHPパーサー”Magpie RSS”

■MagpieRSSで出来ること

ブログ記事を追加するたびに、勝手に記事へのリンクを取得してきてくれるので、
かなりメンテナンスが楽になります。

Magpieは、ブログのRSS(ブログの要約をまとめたファイル)を読み込んで、
そこから記事のタイトルや、記事へのリンク、投稿日時などを取得しています。

→MagpieRSSをダウンロードする(別窓、英文サイト)

■RSSについて

RSSには、いくつかの書式があります。

ATOM
RSS 0.92
RSS 2.0

それぞれ元はXMLファイルなのですが、書式が全て違います。
例えば、Wordpressが自動発行してくれるRSSの場合、
それぞれの”日付”は、以下のように書き方が異なっています。

各RSSの日付の書式
ATOM = published
RSS 0.92 = 該当なし
RSS 2.0 = pubDate

他のRSSでは、dc:date という書き方で投稿日時を表していたりします。

また、一つの記事のくくり方も違います。

RSSによって違う記事ごとの単位・括り方
ATOM = entry
RSS系統 = item

RSSを読み込んでパース(展開)して、さて何を読み込んで表示させよう、となった段階で、
この書式の違いに結構ハマりました。

■もしRSS内に広告が入ってきたら

さて、前置きが長くなりましたが、ここからが今日の本題です。

例えば、無料ブログで、エキサイトブログを使っていて、
RSSを読み込んでサイトトップページに新着情報的にブログ記事へのリンクを表示させていた時に、
ナニヤラ広告的なリンクが勝手に入り込んでいる、という状況に遭遇したとします。(というか、した)

この広告的なやつ、勝手に入り込んでいるから困ったもんです。

RSSを改めて読んでみると、あらまぁしっかりと入れ込まれている。
エキサイトブログは方針を変えたのかな?だとしたら、仕方ないな、と思うわけですが、
この状況は頂けない。

■欲しいものだけ貰う

よくよくRSSを見返すと、本来の記事と、広告とでは執筆者が違うのに気づきました。
本来の記事では、常に同一の執筆者になっているのですが、
広告は、広告ごとに違うのです。

つまり、本来の執筆者だけのブログ記事を取得して表示させれば、問題は解決するのではないか、と。

■いらないものはスキップしちゃえ

やり方はいくつかあると思うのですが、
私並みの考えられる方法としては、「執筆者の情報かどうかを判別して、それ以外はスキップさせる」
というのが一番簡単で分かりやすかったので、そうしました。
以下にソース。

error_reporting(E_ERROR);    //エラーレポートを表示しない

require_once 'magpie/rss_fetch.inc';
require_once 'magpie/jcode.php';
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
$url = 'http://rss.exblog.jp/rss/exblog/テスト/index.xml';     //RSSFeedのURL
$rss = fetch_rss($url);
$rss->items = array_slice($rss->items, 0, 5);    //Feedの表示数(左の場合だと5件表示)
echo "
\n";
foreach ($rss->items as $item ) {

	if($item['dc']['creator'] == 'hogehoge'){  //もし執筆者がhogehogeだったら
		$title = $item[title];			// 件名を取得
		$url = $item[link];			// リンク先を取得
	}else{
		continue;            //hogehoge以外だったら、処理をスキップ
	}
	if($item['dc']['date']){		// 日付を取得
		$date = strtotime($item['dc']['date']);
	}
	if($date){
		$s_date = date("Y.m.d ", $date);
	}

$title = JcodeConvert($title, 4, 4);
$date = JcodeConvert($date, 4, 4);
echo "

\n";
};
echo "
<table id="\&quot;blog_table\&quot;" cellspacing="\&quot;0\&quot;">
<tbody>
<tr class="\&quot;odd\&quot;">
<td class="\&quot;date\&quot;">$s_date</td>
<td class="\&quot;text\&quot;"><a href="\" target="\&quot;_blank\&quot;">$title</a></td>
</tr>
</tbody>
</table>
\n";

13~18行目で、執筆者がhogehogeだったらそれ以降の日付やタイトルの取得・代入を処理して、
それ以外だった(hogehogeじゃなかった)ら、処理をスキップして、foreachの頭からやり直す、
というような感じになっています。

広告が度々入ってくると、処理がスキップしまくるので、表示件数(この場合は5件表示を設定している)が
スキップ分だけ減る形になり、全然表示されない~!みたいな状態になったら他の方法を考えるしかないですね。

他にもこんな記事があります。

ホームページ制作のYOUE - ブログTOPへ »
ホームページ制作のYOUE - ホームへ »

コメントをどうぞ



ページTOPに戻る