Googleブログ検索は検索結果をRSSやAtomで取得できます。
それは良いのですが、このRSSを取得してみると、文字コードがどうもおかしいです。
RSSヘッダにはUTF-8とあるのですが、実際にはShift JISで出力されているようです。
気になって検索してみると、次のようなページがありました。
GoogleのRSSはやっぱり変! – ☆女の徒然草☆ – Yahoo!ブログ
こちらによると、httpヘッダではShift JISになっていて、RSSヘッダではUTF-8。実際の内容はShift JISとのことです。
Google ChromeでRSSのURLにアクセスして、手動でhttpヘッダを見てみると、「content-type: text/xml; charset=UTF-8」となっています。どうもコレはUTF-8のようですが、phpのスクリプトからアクセスすると、どう見ても結果はShift_JISです。
そこで次のような感じでphpからヘッダ内容を見てみました。
$url = “https://www.google.co.jp/search?q=%E3%81%BB%E3%81%92&tbm=blg&output=rss”;
$opts = array(‘http’ =>
array(
‘method’ => ‘GET’,
‘max_redirects’ => ‘0’,
‘ignore_errors’ => ‘1’
)
);
$context = stream_context_create($opts);
$stream = fopen($url, ‘r’, false, $context);
var_dump(stream_get_meta_data($stream));
var_dump(stream_get_contents($stream));
fclose($stream);
結果は「Content-Type: text/xml; charset=Shift_JIS」。やはりヘッダはShift_JISです。
こちらのUser Agentを見ているのか、他の何かか分かりませんが、アクセス元によってUTF-8で返す時とShift_JISで返す時があるようです。
ちなみに、
Google Blog Search: 検索結果 RSS の文字化け回避方法 – 過去ログ(-2007):ひろの雑記帳@神戸芸術工科大学デザイン教育研究センター
でクエリで文字コード指定する、という方法があったのですが、スクリプト経由でアクセスした場合には、文字コード指定の有無に関わらずShift_JISで返ってきました(RSSヘッダは相変わらずUTF-8、内容はShift_JIS)。
どういうことなのでしょう・・。
追記:
UTF-8で返ってくる時と、Shift_JISで返ってくる時があります。結局HTTPヘッダを見て判定するしかないようです。