サポート » 使い方全般 » ・feed.php、fetch_feedによるRSS取得のカスタマイズについて

  • 解決済 ittto

    (@ittto)


    皆様お世話になります。初投稿の初心者のため、手落ちがあるかもしれませんが何卒よろしくお願いいたします。

    以下のようなコードで複数のブログのRSSを時系列(最新順)で表示したいと考えています。
    ただし、それぞれのブログについては最大3件づつ表示させたい場合、どのようなコードを書けばよいでしょうか。コードの記述例までお教えいただければ大変助かります。

    <?php include_once(ABSPATH . WPINC . '/feed.php');
    $rss = fetch_feed(array(
    'RSS1',
    'RSS2',
    'RSS3',
    'RSS4',
    'RSS5',
    ));
    if (!is_wp_error( $rss ) ) :
        $rss->set_cache_duration(1800);
        $rss->init();
        $maxitems = $rss->get_item_quantity(15);
        $rss_items = $rss->get_items(0, $maxitems);
        date_default_timezone_set('Asia/Tokyo');
    endif;
    ?>
    <?php echo '<h5>各ブログの新着記事 ' . $maxitems . ' 件を時系列で表示しています</h5>'; ?>
    <?php if ($maxitems == 0) echo 'No items.';
        else
        foreach ( $rss_items as $item ) : ?>
    <?php echo $item->get_feed()->get_title(); ?>
    
    <?php echo $item->get_date("Y-n-j"); ?>  <a href='<?php echo $item->get_permalink(); ?>' target="_blank"><?php echo $item->get_title(); ?></a>
    		<br />
    	<?php endforeach; ?>

    何卒よろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは

    試していませんけど

    $maxitems = $rss->get_item_quantity(3);

    とかで、取れませんか?

    ご回答ありがとうございます!
    ただ、現状の
    $maxitems = $rss->get_item_quantity(15);
    となっている部分をご指摘のように
    $maxitems = $rss->get_item_quantity(3);
    にしても
    全ブログの表示合計が最大3件という形になり、
    「各RSSから最大3件、合計表示数最大15件」
    という表示にはなりませんでした。

    こんにちは

    fetch_feedでrssをマージしているのでそうなってしまいますね

    一つ一つ、新着を表示するという事では、満足いかないという事かもしれませんね

    思いつきでしかありませんが、

    パーマリンクのURLからブログを特定して、3回目以降はエコーしないというようなスクリプトを書くとかという事もありそうだと思います

    私も試したことは無いですが、
    simplepie で set_item_limit() というメソッドが用意されているようです。
    http://simplepie.org/wiki/reference/simplepie/set_item_limit

    Set the max number of items per feed to return with Multifeeds

    試してみました。RSSを2つ引っ張ってくるパターンは問題なく動作しました。(RSSの部分を増やせば5つでもいけると思います)

    include_once(ABSPATH . WPINC . '/class-simplepie.php');
    $feed = new SimplePie();
    $feed->set_feed_url(array('RSS1', 'RSS2'));
    $feed->set_item_limit(3);
    $feed->init();
    $items = $feed->get_items();
    foreach($items as $item) {
      echo $item->get_title(); // ここは適宜変更してください
    }

    php-webさま nobitaさま
    誠にありがとうございます!解決しました!!
    今後、同じ悩みの方が現れた時のために、アドバイスを元に追記した私のコードを貼っておきます(本件と関係ない部分のコードも入っていますが)。

    <?php include_once(ABSPATH . WPINC . '/feed.php');
    $rss = fetch_feed(array(
    'RSS1',
    'RSS2',
    'RSS3'
    ));
    if (!is_wp_error( $rss ) ) :
        $rss->set_item_limit(3);
        $rss->set_cache_duration(1800);
        $rss->init();
        $maxitems = $rss->get_item_quantity(200);
        $rss_items = $rss->get_items(0, $maxitems);
        date_default_timezone_set('Asia/Tokyo');
    endif;
    ?>
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「・feed.php、fetch_feedによるRSS取得のカスタマイズについて」には新たに返信することはできません。