やったこと

webサービスを作るときに考えたことを垂れ流します

【Wordpress】gooブログのRSSがワードプレスから取得できない!

ワードプレスの「fetch_rss()」関数でいろんなブログのRSSを取得していたんですが、なぜか「gooのブログ」だけは取得失敗してしまう…。

噂によると、gooブログはアクセス元のユーザーエージェントをチェックしていて、ワードプレスからのアクセスを弾いてしまうのだそうな…。
日本語 » Tag: fetch_feed - Recent Posts

なので、「fetch_rss()」関数をオリジナル様に改造して、useragent情報を騙ってアクセスをしてみました。
以下のようなコードをfuntions.php追記します。

  //オレ様仕様のfetch_feed
   function my_fetch_feed($url){
    if ( ! class_exists( 'SimplePie', false ) ) {
      require_once( ABSPATH . WPINC . '/class-simplepie.php' );
    }
    require_once( ABSPATH . WPINC . '/class-wp-feed-cache.php' );
    require_once( ABSPATH . WPINC . '/class-wp-feed-cache-transient.php' );
    require_once( ABSPATH . WPINC . '/class-wp-simplepie-file.php' );
    require_once( ABSPATH . WPINC . '/class-wp-simplepie-sanitize-kses.php' );

    $feed = new SimplePie();

    $feed->set_sanitize_class( 'WP_SimplePie_Sanitize_KSES' );
    $feed->sanitize = new WP_SimplePie_Sanitize_KSES();
    $feed->set_cache_class( 'WP_Feed_Cache' );
    $feed->set_file_class( 'WP_SimplePie_File' );
    $feed->set_feed_url( $url );
    $feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) );
    do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) );
    $feed->set_useragent('hogege_rss'.SIMPLEPIE_USERAGENT);
    $feed->init();
    $feed->set_output_encoding( get_option( 'blog_charset' ) );

    if ( $feed->error() )
      return new WP_Error( 'simplepie-error', $feed->error() );

    return $feed;
  }

これは「wp-includes/feed.php」にあるfetch_feed()関数の内容を、たった1行変えただけです(set_useragentの箇所)
使い方もfetch_feed()と全く同じです。

これを使えば、gooブログRSSも取得可能。
でも、ほんとにこんなことしていいのかな、怒られちゃったりしないのかな…?