2009年11月24日

モバイル版 Google Analytics を PHP4 で動かす

 先日からサービスの提供が始まったモバイル版の Google Analytics ですが、アクセス解析用の PHP スクリプトである ga.php は PHP4 では動きません。PHP4 のアップデートはすでに終わっているので、PHP5 にアップグレードするべきなのですが、レンタルサーバなどで PHP のアップグレードをしてくれないところもあると思います。そこで、PHP4 でも動くように、ga.php を修正してみました(ライセンス的な問題がちょっと気になりますが…)。

 準備として、PEAR の PHP_Compat をインストールします(stable版の1.5.0ではなく、alpha版の1.6.0a2が必要)。

 次に、ga.php の先頭部分に

require_once 'PHP/Compat/Function/setrawcookie.php';
require_once 'PHP/Compat/Function/file_get_contents.php';

を追加します。そして、97行目と100行目にある file_get_contents を php_compat_file_get_contents に書き換えます。さらに、144行目以降を

    setrawcookie(
        COOKIE_NAME,
        $visitorId,
        $timeStamp + COOKIE_USER_PERSISTENCE,
        COOKIE_PATH);

から

    setrawcookie(
        COOKIE_NAME,
        $visitorId,
        $timeStamp + COOKIE_USER_PERSISTENCE,
        COOKIE_PATH,
        '',
        false,
        false);

に変更します。

 これで動くようになるはずです(PHP4.4.9 の環境で確認)。

 種明かしをすると、setrawcookie は PHP5 から新たに登場した関数です。また、file_get_contents のコンテキストサポート(第3引数)も PHP5 以降にサポートされたものです。このため、これらを使えるようにしなければなりません。setrawcookie は、PHP4 にもともとない関数ですので、それほど問題ない(せいぜい 1.6.0a2 をインストールすることと、引数を省略せずに記載することくらい)のですが、file_get_contents は、PHP4.3.0 以降ではすでに登場しているため、PHP_Compat::loadFunction を使う PEAR PHP_Compat の通常の使い方だと、PHP ネイティブの関数が優先されてしまいます。そこで、上記のように個別の関数を手動で読み込んだうえで、PHP_Compat 側の関数を使うようにしているのです。

 不具合等があれば、コメント欄などでご指摘ください。

posted by まいける at 12:32 | Comment(2) | TrackBack(1) | PHP

2009年11月08日

Amazon の書籍を楽天ブックスで買うためのブックマークレット(続き)

 前回のエントリーで書いたAmazon の書籍を楽天ブックスで買うためのブックマークレットですが、処理の流れとしては、

  1. javascript で表示中の Amazon の URL から ASIN を取得
  2. 取得した ASIN を Amazon の API に渡して ISBN を取得
  3. 取得した ISBN を楽天の楽天ブックス書籍API に渡して楽天ブックスの商品ページを取得
ということをやっています。

 書籍の場合はこれでうまくいくのですが、雑誌の場合はうまくいきません。雑誌には ISBN ではなく、JANコードが付けられており、ASIN→ISBN変換では値を返さないからです。

 いろいろ調べてみると、Amazon API の ItemAttributes レスポンスグループの中にある EAN が日本の雑誌の場合には JANコードになっていることがわかりました。そこで、ASIN→ISBN変換で値を返さない場合は、EAN を取得し、これを楽天ブックス雑誌検索API に渡すことで、雑誌でも楽天ブックスの商品ページを取得できるようになりました。

 これを応用すれば、CD や DVD でも Amazon→楽天の検索ができるかもしれません(未検証ですが)。

posted by まいける at 00:51 | Comment(0) | TrackBack(0) | その他

2009年11月05日

Amazon の書籍を楽天ブックスで買うためのブックマークレット

 厳密にいうと、Trend Antenna の開発とは直接関係がないのですが、ちょっとしたツールを作りましたので、ご報告。

 API の使い勝手の良さもあって、Webサービスで書籍を紹介する場合、大概のサービスは Amazon へのリンクを張っています。私がよく使うはてなもメディアマーカーも同様です。レビューの充実度をみても、確かに便利なのですが、実際に買う段になると、個人的にはポイントがたまっている楽天ブックスで買いたいのです。そこで、Amazon の商品紹介ページから楽天ブックスの商品紹介ページに橋渡しをするブックマークレットを作ってみました(下のリンクをブックマークに保存すれば利用できます)。私個人で使う分には、直接飛ばしてもよさそうな感じですが、一応確認ページをはさんでいます。

 Amazon to Rakuten

 Amazon の URL に ASIN または dp が含まれている場合のみに対応しています。それ以外の場合には、うまく動きませんので、ご了承ください。

posted by まいける at 13:11 | Comment(0) | TrackBack(2) | その他