« Google APIが使えないPHP4の悲哀 | トップページ | 備忘録としてのblog »

そんなに.phpがイヤなのか

 Google APIを諦めたのにもかかわらず、なぜまだPHPなのか。
 それはただ一つ、日ごと変わる検索範囲、daterange:xxxxxxx-yyyyyyy の為。
 gregoriantojd()関数でyyyyyyyを求め、そこから2を引いた数をxxxxxxxに代入すれば今日から二日前までの三日間を検索範囲に限定できます。
 あとはリンクごとに検索したい言葉をaタグに固定してあるのでその後ろにこれを流すだけ。
 
 が、ここに落とし穴が。
 PHPからprintで吐き出す検索クエリーがGoogle側では文字コード化けを起こしてしまいます。
 いえいえPHPに文字化けはつきもの、mb_convert_encodingなどでそれはしのぐのですが、urlサフィックスに乗せた日本語文字列をGoogleがどう解釈するかまではコントロールできません。 なにせ相手はこういう用途のために別途APIを用意しているわけですから。
 
 ではなぜ普通のGoogle検索で返ってきた文字列に化けが起きないのか?
 理屈はともかく、実験として開くファイルの拡張子を.htmlにしてやると問題解決で、.phpにすると化けることが判明。 ブラウザのコード解釈もかかわっているようです。
 なんか面倒くさそう... じっくりと原因追及している時間的余裕も無し。
 
 それじゃ.htmlファイルをPHPから毎日書き換えて吐き出してやればいいじゃん。 Oh! 行き当たりばったり〜♪
 
 ということで本来のページを表示する前にindex.phpを通過させて既にあるhtmlページを読み込み、daterange:xxxxxxx-yyyyyyyを正規表現で書き換え。 再度htmlに書き戻し、以後本来のページへheaderリダイレクト。
 以前からfile_get_contentsを使っているので、これを読み込みに使い、書き戻しはえっとfile_put_contentsね、とやると「未定義の関数」とエラーメッセージ。 調べてみたら前者はPHP4から、後者はPHP5からの関数だとさ。 いや、これだけ綺麗にgetとputを対比させていたら一対やと思うがな。
 ということでfopen, fwrite, fcloseで対処。 う〜ん、なんかBASICみたい。
 あ、OSレベルでの該当ファイルへの書き込み権限にもご注意を。

 いやぁ、空でPHPガシガシ打てるような若者にしてみれば噴飯ものの物語なんでしょうね。 というかここに至るまでにいくつものスマートな解決策があるでしょうし。
 でも、一応実験の結果、期待通りに動きまして、取引先には取り急ぎ対策例の一つして報告することはできました。
 
 というわけで夜中の3:30頃に家に帰り、こういう時の恒例である乾杯。 と言ってもちょっと寒いので焼酎。
 今回も美しくはないけれど何とか無事生還、ということで...

|

« Google APIが使えないPHP4の悲哀 | トップページ | 備忘録としてのblog »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« Google APIが使えないPHP4の悲哀 | トップページ | 備忘録としてのblog »