BLOG ENTRY

外部複数ブログのRSS情報をWordPress上で表示する[WordPress]

wordpress

例えばアメブロとか外部ブログ複数の更新情報をWordPress上で表示する。
・複数の外部ブログからそれぞれ最新の記事を1件ずつ表示させる
・複数の外部ブログから最新の記事を●件表示させる
の2つのやり方をメモしておきます。

WordPress上でのRSS取得&表示は、プラグインでもありそうですけど、標準でfetch_rss()という便利な関数がrss.phpというファイル内に用意されていて、それを使えば簡単に取得できます。

複数の外部ブログからそれぞれ最新の記事を1件ずつ表示させる方法

方法としてはベースの部分はこれだけでOK

include_once(ABSPATH . WPINC . '/rss.php'); //wordpress標準定数
$rss_url = array(
                'ブログタイトルAのRSSのURL',
                'ブログタイトルBのRSSのURL',
                'ブログタイトルCのRSSのURL'
                );
foreach ($rss_url as $key => $value) {
    $rss = fetch_rss($value);
    $maxitems       = 1; //最新情報1件だけを表示する
    $items[$key] = array_slice($rss->items, 0, $maxitems);
}

これを、例えばこんな感じでindex.phpやらsidebar.phpに書く。

<?php

/*---------------------

外部RSSの取得と表示

-----------------------*/

include_once(ABSPATH . WPINC . '/rss.php'); //wordpress標準定数

//RSSのキャッシュ設定
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_CACHE_DIR', './cache');
define('MAGPIE_FETCH_TIME_OUT', 30);
define('MAGPIE_CACHE_AGE', 60*60);

//取得feedのURLリスト
$rss_url = array(
                'ブログタイトルAのRSS',
                'ブログタイトルBのRSS',
                'ブログタイトルCのRSS'
                );

foreach ($rss_url as $key => $value) {
    $rss = fetch_rss($value);
    $maxitems       = 1;
    $items[$key] = array_slice($rss->items, 0, $maxitems);
}

//ブログURLから、そのブログのタイトルを返す関数
function blog_title($url) {
    //ブログタイトル名とルートURL
    $rss_blog = array(
                    0 => array(
                            'url'   => 'ブログAのURL',
                            'title' => 'ブログタイトルA'
                            ),
                    1 => array(
                            'url'   => 'ブログBのURL',
                            'title' => 'ブログタイトルB'
                            ),
                    2 => array(
                            'url'   => 'ブログCのURL',
                            'title' => 'ブログタイトルC'
                            )
                    );

    $blog_title = '';
    foreach ($rss_blog as $v) {
        if (strpos($url, $v['url']) !== FALSE) {
            $blog_title = $v['title'];
            break;
        }
    }
    return $blog_title;
}

<?php if (!empty($items)) : ?>
<?php foreach ($items as $value) : ?>
    <?php foreach ($value as $item) : ?>
        <?php
            if ($item['dc']['date']) {
                $date = substr($item['dc']['date'], 0, 4) . '/' . substr($item['dc']['date'], 5, 2) . '/' . substr($item['dc']['date'], 8, 2);
            } else {
                $date = '';
            }
        ?>
        <h3 class="entry_title"><a href="<?php echo $item['link']; ?>" title="<?php echo $item['title']; ?>" target="_blank"><?php echo $item['title']; ?></a></h3>
        <p class="rss_text"><?php echo $date; ?> <a href="<?php echo $item['link']; ?>" title="<?php echo $item['title']; ?>" target="_blank">「<?php echo blog_title($item['link']); ?>」</a>が更新されました</p>
    <?php endforeach; ?>
<?php endforeach; ?>
<?php endif; ?>

これで【複数の外部ブログから最新1件ずつを表示する】ことができます。

ちなみにアメブロのRSSを取得する場合は
http://feedblog.ameba.jp/rss/ameblo/ユーザーID
これでいけました。
※WordPressのversionによっては、fetch_rss()の動きが違うので、その場合は取得先RSSのURLを変更してみると取得できたりする。

複数の外部ブログから最新の記事を●件表示させる

基本的には上と同じなんですがファイルを分けてみました。で、配列を再整形して時間によってソートします。

quall_rss.php(新規ファイル)

<?php

/*---------------------

外部RSSの取得と表示

-----------------------*/

include_once(ABSPATH . WPINC . '/rss.php'); //wordpress標準定数

//RSSのキャッシュ設定
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_CACHE_DIR', './cache');
define('MAGPIE_FETCH_TIME_OUT', 30);
define('MAGPIE_CACHE_AGE', 60*60);

//取得feedのURLリスト wordpress ver2.8系で取得する場合はこちら
$rss_url = array(
                'ブログAのfeed(RSS)のURL',
                'ブログBのfeed(RSS)のURL',
                'ブログCのfeed(RSS)のURL',
                'ブログDのfeed(RSS)のURL',
                );

foreach ($rss_url as $key => $value) {
    $rss = fetch_rss($value);
    $maxitems       = 4;    //4件表示させる
    $items[$key] = array_slice($rss->items, 0, $maxitems);
}

//配列の整形
$total_items = array();
foreach($items as $key => $val){
    foreach ($val as $k => $v){
        $total_items[] = $v;
    }
}

foreach($total_items as $k => $v) {
    $dc[$k] = $v['dc']['date'];
}

array_multisort($dc, SORT_DESC, $total_items);

//ブログURLから、そのブログのタイトルを返す関数
function blog_title($url) {
    //ブログタイトル名とルートURL
    $rss_blog = array(
                    0 => array(
                            'url'   => 'ブログAのTOPページURL',
                            'title' => 'ブログAのタイトル'
                            ),
                    1 => array(
                            'url'   => 'ブログBのTOPページURL',
                            'title' => 'ブログBのタイトル'
                            ),
                    2 => array(
                            'url'   => 'ブログCのTOPページURL',
                            'title' => 'ブログCのタイトル'
                            ),
                    3 => array(
                            'url'   => 'ブログDのTOPページURL',
                            'title' => 'ブログDのタイトル'
                            )
                    );

    $blog_title = '';
    foreach ($rss_blog as $v) {
        if (strpos($url, $v['url']) !== FALSE) {
            $blog_title = $v['title'];
            break;
        }
    }
    return $blog_title;
}

このソースを表示したいファイルでインクルードしてこんな感じで使う
(※HTMLタグは各サイトで任意にやっちゃってください)

index.php

<?php include('quall_rss.php'); ?>
<?php if (!empty($total_items)) : ?>
    <?php $i = 0; ?>
        <?php foreach ($total_items as $item) : ?>
            <?php if ($i > 3) break; ?>
                <?php
                    if ($item['dc']['date']) {
                        $date = substr($item['dc']['date'], 0, 4) . '/' . substr($item['dc']['date'], 5, 2) . '/' . substr($item['dc']['date'], 8, 2);
                    } else {
                        $date = '';
                    }
                ?>
                <div class="news_text">
                    <div class="rss_title">
                        <h3 class="entry_title"><a href="<?php echo $item['link']; ?>" title="<?php echo $item['title']; ?>" target="_blank"><?php echo $item['title']; ?></a></h3>
                    </div>
                    <div class="news_content">
                        <p class="rss_text"><?php echo $date; ?> <a href="<?php echo $item['link']; ?>" title="<?php echo $item['title']; ?>" target="_blank">「<?php echo blog_title($item['link']); ?>」</a>が更新されました</p>
                    </div>
                </div>
    <?php $i++; ?>
    <?php endforeach; ?>
<?php endif; ?>

複数の外部ブログから最新の記事を4件表示させることができました。

終わり。

関連記事

  1. CakePHP1.2上で外部サイトのRSSを取得&表示[CakePHP]
  2. CakePHP1.2でRSS2.0を出力する[RSS][CakePHP]
  3. $_SERVER['PATH_INFO']でやる擬似rewrite[PHP]
  4. 文字列を、1行上限★バイトで改行させて、上限★行まで表示する[PHP]
  5. ページの短縮URLを貼り付けたTwitter投稿をしてもらう

WRITE COMMENT


(required)


(required)


(required)

MENU

veltica creative of