8月中旬くらいから、うちのサイトで表示していたGoogleの検索結果(NP_Relatedを利用)がおかしくなる問題、解決いたしました。
発端はNucleus日本語フォーラムの記事。あんまりNP_Relatedを利用している人は少ないのかとか、いつか直るだろうと思っていたんですが、そのレスの中に、
で、なぜこのように仕様変更したのかというと、たぶんajaxがらみですね。(まったーーく違うかもしれないけど)
javascriptに文字列を渡してやり取りするときに、なんだかこのコード体系がイイらしいんですよ。(全く勘。)
NP_TrackBack2.0xで実装されています。
というお話が。そういえば結果がおかしくなったころに、Google Mapsで日本語の地名での検索が可能になったり、Google Localでお店が検索できるようになったりしたので、それがらみの変更かも。
Google APIを使った検索スクリプトの修正はnakahara21からダウンロードできます。
それではNP_Related修正点を紹介。
私の使用サーバはXREAで、文字コードはUTF-8です。
まず、nakahara21さんの
http://nakahara21.com/?itemid=602
から、サンプルスクリプトのzipファイルをダウンロード。
解凍してできるファイルのうち、「de.php」をUTF-8に変換して保存。
次に、NP_Related.phpファイルを修正
78行目付近
include("nusoap.php");
行のあとに
include("de.php");
を追加。
671行目付近
$parameters = array(
行の前に
$c = new ENC;
if (_CHARSET != 'UTF-8') {
$q2 = $c->_restore_to_utf8(stripslashes($q));
}else{
$q2 = $c->_decode_entities(stripslashes($q));
}
$q2 = $c->_utf8_to_entities($q2);
を追加。
そのそばの
"q" => mb_convert_encoding(stripslashes($q),'UTF-8',_CHARSET),
を
"q" => $q2,
に変更。
最後に、NP_Related.phpと同じフォルダにde.phpをアップロードします。
ただ、NP_Relatedがgoogleにデータを取りに行くタイミングは、記事投稿時とユーザが設定した時間間隔ごとですので、過去の検索結果が残ってる場合にはすぐに反映されないことにご注意ください。
これについて日本語フォーラムで、nakahara21さんから
de.phpをincludeするのは、
// Not in cache or outdated. Get new data
と書いてある行の直後くらいが良いと思います。
キャッシュ読み込み時はincludeしない方が少しかメモリ節約になると思うので。
というコメントもいただいています。確かにincludeの位置はそちらの方が、呼出しごとにincludeされないのでよさげですね。
コメント