タグ: RSS

  • MagpieRSSで外部RSSを表示

    ブログは外部のブログサービスを使っているんだけど自分のサイトにブログの更新情報を表示させたい。

    そんな時に使えるのが『MagpieRSS』です。

    MagpieRSSは外部のRSS Feedを取得して解析、そしてキャッシュまでしてくれるPHPで使えるRSSパーサーです。RSS0.9とRSS1.0、RSS 1.0のモジュールとRSS 2.0、Atomの一部に対応しています。

    MagpieRSSの使い方

    例えばindex.phpにブログの更新情報を表示させる場合。

    1. MagpieRSS(magpierss-0.72.tar.gz)をダウンロードして解凍。
    2. rss_cache.inc、rss_fetch.inc、rss_parse.inc、rss_utils.incの4つのファイルとextlibフォルダをindex.phpと同じディレクトリにアップロード。
    3. index.phpのディレクトリの下にcacheという名前でディレクトリを作成パーミッションを777に変更。
    4. index.phpのブログの更新情報を表示したい位置に以下のコードを記入します。

    [php]
    <?php
    error_reporting(E_ERROR); //エラーレポートを表示しない
    require_once ‘magpie/rss_fetch.inc’;
    $url = ‘RSSFeedのURL’; //RSS FeedのURL
    if($rss = fetch_rss($url)){ /RSS Feedがなければ終了
    $title = $rss->channel[‘title’];
    $title = mb_convert_encoding($title, "UTF-8", "auto");
    echo "<h4>$title</h4>\n";
    $rss->items = array_slice($rss->items, 0, 5); //RSS Feedの表示件数
    echo "<ul>";
    foreach ($rss->items as $item ) {
    $title = $item[title];
    $title = mb_convert_encoding($title, "’UTF-8", "auto");
    $url = $item[link];
    echo "<li>$title</li>\n";
    $description = $item[description];
    $description = mb_convert_encoding($description, "’UTF-8", "auto");
    echo "<li>$description</li>\n";
    };
    echo "</ul>";
    }
    ?>
    [/php]

    解説

    [php firstline=”4″]
    $url = ‘RSSFeedのURL’;
    [/php]
    ここに表示させたいRSS FeedのURLを記入してください。

    [php firstline=”9″]
    $rss->items = array_slice($rss->items, 0, 5);
    [/php]
    この場合だと最新から0件目までは非表示、その後の5件を表示します。

    MagpieRSSの文字化け対策

    一部のRSSが激しく文字化けすることがあるのでrss_fetch.incの358行目をISO-8859-1からUTF-8に変更します。

    本文が全部表示されるんですけど

    RSS Feedでエントリー内容を全文表示にしている場合、「$description」だと全文表示されてしまいます。

    「いやいや、エントリーの最初の何文字かだけでいいんだよ。」と仰る方は以下のコードを試してみてください。

    [php]
    <?php
    error_reporting(E_ERROR); //エラーレポートを表示しない
    require_once ‘magpie/rss_fetch.inc’;
    $url = ‘RSSFeedのURL’; //RSS FeedのURL
    if($rss = fetch_rss($url)){ /RSS Feedがなければ終了
    $title = $rss->channel[‘title’];
    $title = mb_convert_encoding($title, "UTF-8", "auto");
    echo "<h4>$title</h4>\n";
    $rss->items = array_slice($rss->items, 0, 5); //RSS Feedの表示件数
    echo "<ul>";
    foreach ($rss->items as $item ) {
    $title = $item[title];
    $title = mb_convert_encoding($title, "’UTF-8", "auto");
    $url = $item[link];
    echo "<li>$title</li>\n";
    $description = $item[description];
    $description = mb_convert_encoding($description, "’UTF-8", "auto");
    $description = strip_tags($description);
    $description = ereg_replace("(\r\n|\r|\n)", "", $description);
    $description = mb_substr($description, 0, 100). "…"; ?>
    echo "<li>$description</li>\n";
    };
    echo "</ul>";
    }
    ?>
    [/php]

    解説

    [php]
    $description = strip_tags($description);
    [/php]
    HTMLタグを取り除いています。

    [php]
    $description = ereg_replace("(\r\n|\r|\n)", "", $description);
    [/php]
    改行を取り除いています。

    [php]
    $description = mb_substr($description, 0, 100). "…"; ?>
    [/php]
    この場合だと、文字列「$description」の最初から100文字目までを最後に「…」を付けて表示します。

    PRとかADとかも表示されるんですけど…

    外部のブログサービスのRSS Feedを読み込むとPRとかADとか広告も一緒に表示されてしまったりします。Amebaブログとか。
    「そんなのはいらん!」と仰る方は以下のコードを試してみてください。

    [php]
    <?php
    error_reporting(E_ERROR); //エラーレポートを表示しない
    require_once ‘magpie/rss_fetch.inc’;
    define(‘MAGPIE_OUTPUT_ENCODING’, ‘UTF-8’);
    $url = ‘RSS FeedのURL’; //RSS FeedのURL
    if($rss = fetch_rss($url)){ //RSS Feedがなければ終了
    $title = $rss->channel[‘title’];
    echo "<h2>$title</h2>\n";
    $rss->items = array_slice($rss->items, 0, 6); //RSS Feedの表示件数
    echo "<ul>\n";
    foreach ($rss->items as $item ) {
    $title = $item[title];
    $date = Date("Y.m.d",$item[date_timestamp]);
    $url = $item[link];
    if (strstr($item[link],"表示したいブログのURL") == false) { //特定のURL以外は表示しない
    echo "";
    }
    else {
    echo "<li>$date <a href=\"$url\">$title</a></li>\n";
    }
    };
    echo "</ul>";
    }
    ?>
    [/php]

    解説

    [php firstline=”9″]
    $rss->items = array_slice($rss->items, 0, 6);
    [/php]
    Amebaブログ場合だと5件に1件の割合で広告が入ってくるので5件表示させたい場合は6件分表示させときます。

    [php firstline=”15″]
    if (strstr($item[link],"表示したいブログのURL") == false) {
    [/php]
    ここに記入したURLのRSS Feedだけを表示します。

    関連サイト