アメブロ対応::phpで外部ブログRSSを自サイトに組み込もう

最近新規でホームページを制作したときに、「更新機能」をつけるかつけないかで少々悩むことがありました。というのも、依頼者さんはかなり前からアメブロを更新してきていたため、今更新しい環境で更新はちょっと…となったワケです。
しかしホームページを作る以上、SEO的な面でもなんとか更新性を出したいなーと模索していた時に以下の記事を見つけました。
ウェブデザイナーの日記:php :: MagpieRSS :: 他サイトのRSSを表示するクラスライブラリ
今回は上記の内容をもとに、PHPを使ってアメブロのRSSを別ドメインのホームページに表示する方法をご紹介します。

MagpieRSS: RSS for PHPをダウンロード

まずはMagpieRSS: RSS for PHPをダウンロードします。
ダウンロード&解凍が完了したら、フォルダごとサーバにアップロード。

PHPをソースに挿入

次に、以下をホームページ上の表示させたい部分に挿入します。

<?php
 
// モジュールを読み込む
require_once("magpierss/rss_fetch.inc");
 
// キャッシュ期間を秒数にて設定
// 例では30分
define("MAGPIE_CACHE_AGE", 60*30);
 
// キャッシュディレクトリへのパスを設定
// キャッシュディレクトリをchmod 777 (or 707 or 700)
define("MAGPIE_CACHE_DIR", "/path/2/cache/");
 
// 日本語バケないためにOUTPUT_ENCODINGをUTF-8にする
define("MAGPIE_OUTPUT_ENCODING","UTF-8");
 
// 取得したいRSSのurl
$url = "http://www.cybergal.jp/?feed=atom";
 
// ブログのタイトルは$rss->channel['title']という変数、
// RSSは$rss->itemという変数に入る。
// key値、link/title/descriptionで取得できる。
$rss = fetch_rss( $url );
echo "Title:". mb_convert_encoding($rss->channel['title'],"EUC-JP","auto");
echo '<p>';
foreach ($rss->items as $item) {
    $link = mb_convert_encoding($item['link'],"EUC-JP","auto");
    $title = mb_convert_encoding($item['title'],"EUC-JP","auto");
    $description = mb_convert_encoding($item['description'],"EUC-JP","auto");
    echo "<a href=$link>$title</a><br />$description"<br />;
}
echo '</p>';
 
?>

PHPモジュールを呼び出すために、上記ソース3-4行目

// モジュールを読み込む
require_once("magpierss/rss_fetch.inc");

の /rss_fetch.inc 部分を自分のサーバ上に置いたMagpieRSSへのパスに書き換えます。

// ブログのタイトルは〜以下は文字コードの変換に関する部分です。 セーノの場合はUTF-8に統一しているので、EUC-JPをUTF-8に置き換えて使用しました。 余談ですが、

echo '<p>';
echo '</p>';

のpをliなど、使いたいタグに置き換えることで表示を制御する事ができます。 その他の部分については、ウェブデザイナーの日記さんが丁寧にコメントを入れてくれているので分かりやすいですね。簡単な表示であれば、このまま挿入するだけでも十分オーケーです。

アメブロ用にカスタマイズ

上記のソースでアメブロのRSSを表示しようとしたものの、記事と一緒にアメブロのPR広告が入り込んできたり、投稿時間表時が出来なかったりしたので、このブログにたまに出演するsukobuto.comさんにカスタマイズをお願いしました。 出来上がったソースはこれ。

<ul>
        <?php
 
// モジュールを読み込む
require_once("magpierss/rss_fetch.inc");
 
// キャッシュ期間を秒数にて設定
// 例では30分
define("MAGPIE_CACHE_AGE", 60*30);
 
// キャッシュディレクトリへのパスを設定
// キャッシュディレクトリをchmod 777 (or 707 or 700)
define("MAGPIE_CACHE_DIR", "/path/2/cache/");
 
// 日本語バケないためにOUTPUT_ENCODINGをUTF-8にする
define("MAGPIE_OUTPUT_ENCODING","UTF-8");
 
// 取得したいRSSのurl
$url = "http://feedblog.ameba.jp/rss/ameblo/akira-shiotsuka/rss20.xml";
 
// ブログのタイトルは$rss->channel['title']という変数、
// RSSは$rss->itemという変数に入る。
// key値、link/title/descriptionで取得できる。
$rss = fetch_rss( $url );
//var_dump ($rss);
$max_lines = 3;
$line = 0;
//echo "". mb_convert_encoding($rss->channel['title'],"UTF-8","auto");
foreach ($rss->items as $item) {
    $link = mb_convert_encoding($item['link'],"UTF-8","auto");
    $title = mb_convert_encoding($item['title'],"UTF-8","auto");
    $description = mb_convert_encoding($item['description'],"UTF-8","auto");
    $date = date("Y/m/d", intval($item['date_timestamp']));
    if (preg_match("/^PR:.+$/", $title) != 0) continue;
    if ($line++ == $max_lines) break;
    //echo "<a href=$link>$title</a><br />$description";
    echo "<li> $date <a href=\"$link\" target=\"_blank\">$title</a>" . '<img src="http://seno.x0.com/img/common/new.gif"></li>';
}
 
?>
</ul>

主に変更したのは33行目以下です。

if (preg_match("/^PR:.+$/", $title) != 0) continue;
if ($line++ == $max_lines) break;

が、PR広告をはじいて表示してくれる部分で、[PR]から始まる文章をカットする仕組み。

$date = date("Y/m/d", intval($item['date_timestamp']));

が、記事の投稿時間を取得・表示してくれる部分だそうです。 記事のdescriptionもコメントアウトしてます。 セーノの場合はlistで表示したかったのでulで囲んでいますが、

echo '<p>';
echo '</p>';

を変更するだけだと、記事3件が一つのli扱いになってしまうので、 37行目にliタグを挿入することで代用しました。
これを実際にサイトに組み込むとこんな感じとなり完成です。

このPHPではアメブロ以外のRSSでも取得出来るので、ホームページの新着情報として外部ブログのRSSを利用したい時などに試してみてはいかがでしょうか。外部ブログのRSSを利用したい時などに試してみてはいかがでしょうか。