• 解決済 kopeo1977

    (@kopeo1977)


    先日WP3.2からアップグレードしたのですが、その後fetch_feedを使って出力していたRSSの出力結果がおかしくなってしまいました。

    google newsやtwitterの検索RSSなど、URLに日本語を含んだものをfetch_feedすると結果が0になってしまいます。

    ・google news rssにおいて『日本語+OR+ワードプレス』など、きちんと結果が帰ってくるはずのフィードURLを投げると『OR』のみの検索結果が帰ってきます。
    ・キーワードが英数字のみの場合は問題なく結果が出力されます。
    ・その際返ってくるRSSを見てみると、『日本語』『ワードプレス』の部分が文字化けしていました。
    ・urlencodeを使ってみましたが変わりませんでした。
    ・fetch_feedのキャッシュの値を変えてみましたがダメでした。
    ・fetch_rssの方を試してみましたがダメでした。
    ・WP Multibyte Patchを1.5に戻してみましたがダメでした。
    ・関連するファイル(wp-include/class-feed.php、wp-include/class-simplepie.php、wp-include/feed.php)のエンコードを確かめ、古いバージョンのものと差替えてみたりしましたがダメでした。
    ・WP3.2や3.3.xのままにしている他のサイト(同じレンタルサーバの同じプラン)だと同じコード(テーマのfunction.phpに記述)で動いています。

    感覚的にはfetch_feed関数の中で文字化けしているようなイメージなのですが、
    手詰まりになってしまい、フォーラムを利用させてもらいました。

    宜しくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 状況の確認をさせてください。

    google newsやtwitterの検索RSSなど、URLに日本語を含んだものをfetch_feedすると結果が0になってしまいます。

    具体的にはどういうURLでしょうか。

    ・WP Multibyte Patchを1.5に戻してみましたがダメでした。

    WP Multibyte Patchは、プラグイン名だと思われますが、この他にもプラグインを使っているでしょうか。
    使っている場合は、それらのプラグインをオフにしても現象が発生するでしょうか。

    ・WP3.2や3.3.xのままにしている他のサイト(同じレンタルサーバの同じプラン)だと同じコード(テーマのfunction.phpに記述)で動いています。

    テーマは twentyten か twentyeleven でしょうか。
    それ以外のテーマを使っている場合、twentyten か twentyeleven に戻した場合でも現象が発生するでしょうか。

    また、functions.php に記述したコードは具体的にはどのようなものでしょうか。

    トピック投稿者 kopeo1977

    (@kopeo1977)

    レスありがとうございます。

    ≪URL≫
    http://news.google.com/news?ned=us&ie=UTF-8&oe=UTF-8&q=日本語+OR+ワードプレス&output=atom&num=30&hl=ja

    http://search.twitter.com/search.atom?q=検索ワード
    です。

    テーマはtwentytenをベースにカスタマイズしたものです。
    ページテンプレートからfunction.phpに記述した関数を呼び出しているので、テーマの変更で戻るかどうかを確認するのはローカル環境で試してみますので後でご報告いたします。(プラグインに関しても)

    ≪function.php≫
    大体以下のような感じです。

    function getRssNews($key, $num){
    	include_once(ABSPATH .WPINC .'/feed.php');
    
    	$item = (int)$num;
    	$keyword = urlencode($key);
    	if($keyword){
    		$rss = fetch_feed("http://news.google.com/news?ned=us&ie=UTF-8&oe=UTF-8&q=$keyword&output=atom&num=30&hl=ja");
    		if(!is_wp_error($rss)){
    			$rss->set_cache_duration(3600);
    			$rss->init();
    			$rss_items = $rss->get_items(0, $rss->get_item_quantity($item));
    			date_default_timezone_set('Asia/Tokyo');
    		}
    		return $rss_items;
    	}
    	return false;
    }

    宜しくお願い致します。

    トピック投稿者 kopeo1977

    (@kopeo1977)

    追記です。

    ローカルに移してやってみました。
    プラグインを全て無効化し、テーマをtwentytenに戻してやってみましたが、やはり同様の症状でした。

    先程のURLをFirefoxなどで見るときちんと適切な情報が閲覧できるのですが、
    上記コードでfetch_feedを受け取った$rssを見ると、この段階でおかしくなっているようです。
    何故だろう???

    私も getRssNews のコードをコピーしてみましたが、表示がおかしくなりました。

    公式マニュアルを読むと下記の記述がありました。

    http://wpdocs.sourceforge.jp/Version_3.4#.E5.85.A8.E8.88.AC

    RSS フィード内の言語を適切に反映

    http://search.twitter.com/search.atom?q=%E6%A4%9C%E7%B4%A2%E3%83%AF%E3%83%BC%E3%83%89
    だと、xml:lang=”en-US” になるので、
    twitter で検索するときに、日本語を選択してあげないといけないのではないでしょうか。(twitter の設定は私は分からないので、twitter のサイトで確認してください。)
    google news も明示的な言語設定が無いので、おそらくこれが原因でしょう。

    ja.wordpress.org のフィードだと、(フィードの出力に) language ja がはいっているので、こちらは正常に表示されました。
    http://ja.wordpress.org/feed/?s=%E3%83%96%E3%83%AD%E3%82%B0

    トピック投稿者 kopeo1977

    (@kopeo1977)

    なるほど、原因はそれのようですね。
    が、twitterもgoogleもlanguage:jpにする術を見つけられませんでした。

    googleの方はURLのned=usがフィードの出力言語を指定しているようです。
    ned=deなどは通るのですが、肝心のned=jpやned=jaが通らない。。。

    となると後は3.4での改良点をソース上で見つけてそれをスルーするようなフィルタリングをするしか無いのでしょうかね。(何かヒントがあれば是非お願いします)

    ともあれバグではなくwordpressの改良によるものだと分かりましたので、解決済みとさせていただきます。本当にありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「WP3.4アップグレード後のfetch_feed関数」には新たに返信することはできません。