サポート » 使い方全般 » fetch_feed関数でのRSS取得ができなくなった

  • お世話になります。
    fetch_feedで外部サイトのRSSを取得し、更新情報を表示するようにしています。
    元旦に更新された該当ブログのRSSは正常に表示されていたのですが、先日初めて、記事がない時に表示される「No item」という表示がされました。しかし、該当のブログは最新の記事が更新されており、直接RSSを見ると最新のものが正常に表示されました。
    つまり、私のWPサイトで外部ブログのRSSが取得できなくなった状態なのですが、私のサイトでの変更内容を考えてみても、記事を新規投稿する以外に変更を加えた覚えがありません。

    コードは

    <?php
    $rss = fetch_feed('http://取得したい外部ブログのRSS');
    if (!is_wp_error( $rss ) ) {
        $maxitems = $rss->get_item_quantity(5);
        $rss_items = $rss->get_items(0, $maxitems);
    }
    ?><?php if ($maxitems == 0) echo '<li>No items.</li>';
        else
        foreach ( $rss_items as $item ) : ?><a href="<?php echo esc_url( $item->get_permalink() ); ?>"
            title="<?php echo '更新'.mysql2date(get_option('date_format'), $item->get_date()); ?>">
            「<?php echo esc_html( $item->get_title() ); ?>」</a>―
        <?php echo '更新:'.mysql2date(get_option('date_format'), $item->get_date()); ?>
        <?php endforeach; ?>

    プラグインを全停止も試しましたが状況は変わらず、原因がどこにあるのかわかりません。
    どうかお力を貸してください。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター Daisuke Takahashi

    (@extendwings)

    取得元のサイトのフィードは妥当なXMLでしょうか?
    妥当ではない場合、is_wp_error($rss)がtrueを返していて、$maxitems == 0の部分で変数が未定義であるという旨のNOTICEレベルのエラーが出ていると思います。

    不正な文字が含まれているかもしれません。
    http://validator.w3.org/feed/

    トピック投稿者 RAY

    (@rewrew)

    ありがとうございます。
    教えていただいたサイトでチェックしたところ、

    This feed does not validate.
    line 288, column 0: XML parsing error: <unknown>:288:0: not well-formed (invalid token) [help]
    取得元ブログの中の一文<br />

    というエラーが出ていました。
    これは、該当ブログの本文に問題があるということなのでしょうか?

    トピック投稿者 RAY

    (@rewrew)

    連投すみません。
    外部ブログの該当箇所を見たところ、文頭に「半角スペース」が入っていたのでこれが原因かと思われます。
    取得するブログが自分のものではないため修正できませんが、fetch_feedで取得する場合、外部ブログでこういうことが起きる度にRSSが取得できなくなるのは仕方がないのでしょうか?
    何か対策はあるでしょうか?

    モデレーター Daisuke Takahashi

    (@extendwings)

    そのスペースが原因かどうかはフィードのURLがわからないので、なんとも答えられませんが、基本的には相手のサイトにエラーが出ている旨を伝えるしかないかと思います。

    XMLパーサを気合いで自作するという選択肢もなくはないですが。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「fetch_feed関数でのRSS取得ができなくなった」には新たに返信することはできません。