Liner Note

情報(ユーザー中心デザイン・ユーザビリティ)と技術(ウェブプログラミング・ウェブサービス)についてのメモ書き

要約:ニコニコ市場のように商品の購入数・クリック数情報を入れるスクリプトを書いてみました

ニコニコ市場の購入数情報

最近は上の写真のように、ニコニコ動画の下の方にある市場の購入情報をアマゾンアソシエイトに導入したくて、ガリガリとコードを書いてました。思ったより手こずりましたよ‥。

ちなみにクリック数・購入数はAmazonのシステム上、1日毎しか更新されません。じゃ、早速ですがデモ。

B000UWRC72,clear2,http://images.apple.com/jp/keyboard/images/gallery/wireless_1_20070813.jpg

4063521060

仕組み(ざっくり)

手順としてはこんな感じ。試作版みたいなもんで実装は以下の通りダサいです、Give me a forked one。

現在はレポート取得もPHPで行っているので、もうちょっとスマートです。

  1. WWW::Mechanize(Perlモジュール)を使って、Amazonアソシエイトセントラルから注文レポートをXMLでダウンロード(スクレイピング)
  2. 上記を毎日cronで実行
  3. (1)で集めたXMLをPHPで処理
    1. SimpleXMLでXMLデータを読み込む
    2. いったん配列に組み込んでクリック数を集計
    3. 結果をSQLiteのDBに書き出す
  4. Amazon Linkageプラグインから上記処理をしているスクリプトを読み込む
  5. Amazon-Linkageプラグインが呼び出される毎にSQLiteのDBから該当する商品の情報を読み込んで表示する

仕組み(詳しく)

まず、処理がperlとPHPに分かれてることにツッコミが入ると思うのだけど、これは単純にPHPでAmazonアソシエイトセントラルの情報が入手できなかったからです。

PHPでスクレイピングする手法はいろいろと解説されているんですが(詳しくは文末のリンクを参照)、今回はsnoopyというスクレイピング用のクラスライブラリがあったので、それを使ったみたんですよ‥が、撃沈。何度フォームにアクセスしてもログイン画面でやり直せと言われちゃいます。PHPでやるのは無理なのかな‥。

それで、GORRYさんがperlを使って注文レポートを自動で受け取るスクリプトを公開されていたので、そちらを利用させていただくことにしました。

URLにアクセスする部分をデータを全取得できるよう以下のように改造しました1 。ちなみに、さくらのサーバーではWWW::Mechanizeが使えないようだったので、CoreServerで動かしてます。

これをcronで動かす際は、権限をきちんと設定するようにしてください。一例を挙げれば、スクリプトを格納するパスの属性は777、perlスクリプトを実行するシェルスクリプト2 の属性は755に設定しておいてください

PERLソースコード
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
my $date = sprintf("endMonth=%d&endDay=%d&endYear=%04d", $mon + 1, $mday, $year + 1900);
 
$url_base = "https://affiliate.amazon.co.jp/gp/associates/";
$url_af = "/network/reports/report.html/?ie=UTF8&reportType=ordersReport&periodType=exact&startMonth=1&startDay=1&startYear=2002&";
$url_start = $url_base . "/login/login.html";
$url_html = $url_base . $url_af . $date ."&reportLevel=verbose";
$url_xml = $url_base . $url_af . $date ."&submit.download_XML";

こうしてXMLがダウンロードできたら、次はPHP側の処理に移ります。この辺はスクリプトを置いておくので、興味があったら眺めてください。

ダウンロード
アマゾン購入数・クリック数取得スクリプト
ライセンス
GNU GPL v2

で、Amazon-Linkageプラグインからこのスクリプトを経由して情報を取得するという寸法です。Pear::MSB2とか初めて触ったのでいささか疲れました。

著作権もあるのでまだプラグインのパッケージの中には組み込めませんが、著作者のGORRYさんに許可を頂いたら、パッケージに含めて配布していこうと思います。

参考リンク

スクレイピング一般

そのほか

  1. 改変後のスクリプトの著作権はGORRYさんに帰します[戻る]
  2. シェルスクリプト経由じゃないと、うまく動きません[戻る]
キーワード:

似たもの記事

読者の皆さんの反応サイト内コメントの更新情報(RSSフィード)

読者のコメント

0

ブックマークコメント

4

他サイトの関連記事

0

読者のコメント

コメントはまだ寄せられていません

はてなブックマークでつけられたコメント

poeticevilさんのプロフィール画像  poeticevil
これは実装したい!
mitainaさんのプロフィール画像  mitaina
Amazon
myrmecoleonさんのプロフィール画像  myrmecoleon
自分のアソシエイトIDで,ってことね。
PHPで扱えないのはなんの問題なんだろ。
mxgさんのプロフィール画像  mxg
購入数

他サイトの関連記事

トラックバックはまだ寄せられていません


トラックバックとは
この記事に言及したサイトをこちらに掲載する仕組みをトラックバックと言います。ここでは、このサイトに頂いたトラックバックを一覧表示しています。
トラックバックしてくださる方へ
この記事への言及がない記事など、トラックバック受信方針に沿っていないものは、読者にお見せしても仕方ないこともあり削除させていただいることをご了承ください。
トラックバックを受け取るためのURI