amazon.inc.phpのAWS4.0対応

  • ページ: BugTrack2
  • 投稿者: 萬Q
  • 優先順位: 低
  • 状態: 却下
  • カテゴリー: プラグイン
  • 投稿日: 2008-04-11 (金) 18:43:22
  • バージョン:

メッセージ

関連: official:自作プラグイン/amazon.inc.php

変更点

  • AWS_ACCESS_KEY_ID 定数を追加

    ↓のページ登録IDの取得(英語)から取得したID を使います。

    http://www.amazon.co.jp/gp/feature.html?docId=451209

    define('AWS_ACCESS_KEY_ID', '取得したID');
  • PLUGIN_AMAZON_XML 定数のパスを変更
    define('PLUGIN_AMAZON_XML', 'http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=' .
        AWS_ACCESS_KEY_ID . '&Operation=ItemLookup&Version=2007-10-29&ItemId=');
  • XMLタグ名変更による修正

    <ProductName><Title>

これら3点を修正したら元の通り表示するようになりました。

6/10追記

  • PLUGIN_AMAZON_XMLの定数のパスを変更
    define('PLUGIN_AMAZON_XML', 'http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=' .
        AWS_ACCESS_KEY_ID . '&Operation=ItemLookup&Version=2007-10-29&ResponseGroup=ItemAttributes,Images&ItemId=');
  • PLUGIN_AMAZON_IMAGE_SIZE 定数を追加*1
    define('PLUGIN_AMAZON_IMAGE_SIZE', 'MediumImage');
  • plugin_amazon_cache_image_fetchメソッドの修正
    • XMLプラグインURLからXMLファイル取得。
    • UTF-8にエンコード。
    • <MediumImage><URL>hoge</URL>取得。(<PLUGIN_AMAZON_IMAGE_SIZE><URL>hoge</URL>)
    • 以降の処理は以前と同様URLから画像オブジェクト生成へ繋げる。
  • あくまでほんの一例ですが。実際のソースコードを載せておきます。(↑の説明じゃ伝わりきれていないと思うので。)
    人によって使用しているバージョンが違うはずなので、そのままコピペして使うのは避けたほうが無難です。
    試す前に必ず現在使用しているバージョンのバックアップを取ってください。
function plugin_amazon_cache_image_fetch($dir)
{
   global $asin, $asin_ext, $asin_all;

   $filename = $dir . 'ASIN' . $asin . '.jpg';

   $get_img = 0;
   if (! is_readable($filename)) {
       $get_img = 1;
   } elseif (PLUGIN_AMAZON_EXPIRE_IMAGECACHE * 3600 * 24 < time() - filemtime($filename)) {
       $get_img = 1;
   }

   if ($get_img) {
-      $url = 'http://images-jp.amazon.com/images/P/' . $asin . '.' . $asin_ext . '.MZZZZZZZ.jpg';
-      if (! is_url($url)) return FALSE;
-
-      $body = plugin_amazon_get_page($url);
-      if ($body != '') {
-          $tmpfile = $dir . 'ASIN' . $asin . '.jpg.0';
+      $url = PLUGIN_AMAZON_XML . $asin;
+      $xml = plugin_amazon_get_page($url);
+      if ($xml != '') {
+          $xml = mb_convert_encoding($xml, SOURCE_ENCODING, 'UTF-8');
+          $tmpary = array();
+          preg_match('/<' . PLUGIN_AMAZON_IMAGE_SIZE . '><URL>([^<]*)</', $xml, $tmpary);
+          $tmpfile = trim($tmpary[1]);
+          $body = plugin_amazon_get_page($tmpfile);
           $fp = fopen($tmpfile, 'wb');
           fwrite($fp, $body);
           fclose($fp);
           $size = getimagesize($tmpfile);
           unlink($tmpfile);
       }
-      if ($body == '' || $size[1] <= 1) { // 通常は1が返るが念のため0の場合も(reimy)
+      if ($xml == '' || $size[1] <= 1) { // 通常は1が返るが念のため0の場合も(reimy)
           // キャッシュを PLUGIN_AMAZON_NO_IMAGE のコピーとする
           if ($asin_ext == '09') {
-              $url = 'http://images-jp.amazon.com/images/P/' . $asin . '.01.MZZZZZZZ.jpg';
-              $body = plugin_amazon_get_page($url);
-              if ($body != '') {
-                  $tmpfile = $dir . 'ASIN' . $asin . '.jpg.0';
+              $xml = plugin_amazon_get_page($url);
+              if ($xml != '') {
+                  $xml = mb_convert_encoding($xml, SOURCE_ENCODING, 'UTF-8');
+                  $tmpary = array();
+                  preg_match('/<' . PLUGIN_AMAZON_IMAGE_SIZE . '><URL>([^<]*)</', $xml, $tmpary);
+                  $tmpfile = trim($tmpary[1]);
+                  $body = plugin_amazon_get_page($tmpfile);
                   $fp = fopen($tmpfile, 'wb');
                   fwrite($fp, $body);
                   fclose($fp);
                   $size = getimagesize($tmpfile);
                   unlink($tmpfile);
               }
           }
-          if ($body == '' || $size[1] <= 1) {
+          if ($xml == '' || $size[1] <= 1) {
               $fp = fopen(PLUGIN_AMAZON_NO_IMAGE, 'rb');
               if (! $fp) return FALSE;
               
               $body = '';
               while (! feof($fp)) $body .= fread($fp, 4096);
               fclose ($fp);
           }
       }
       plugin_amazon_cache_image_save($body, CACHE_DIR);
   }
   return $filename;
}

9/18追記

2.2を元にECS4.0対応を施して見ました。
が、まだ多くの商品でテストしたわけではないので人柱版という位置付けとさせて頂きます。
またプラグイン使用には以下のパラメータが必要となります。各自で用意してください。


  • 情報有り難うございます。このPukiwiki付属版向けの修正を参考に、閑舎さん作成版も自分が使っている機能についてはAWS4.0対応出来ました。 -- You&I? 2008-04-12 (土) 23:01:43
  • 修正後使ってて気づいたのですが、Amazon公式の画像無い状態かつユーザーが投稿した画像がある場合にもno image状態になっていたので、リクエストの部分を修正して投稿画像を取得しようとしたのですが、その投稿画像取得できるリクエストキーが見当たりませんでした。(ItemLookupのImages, Largeに該当要素なし。) -- 萬Q 2008-04-14 (月) 15:08:43
  • You&Iさん、パッチを公開されませんでしょうか?ぜひ使わせていただきたいのですが・・・ -- もみもみ? 2008-04-16 (水) 04:37:33
    • 自分用に色々改修が入っているので、一般公開は控えさせて頂きたいのですが。動いたと思っていても自分の修正が色々問題があったりで。どうしてもというなら、事例紹介に自分のサイトも紹介されているのでそちらから。 -- You&I? 2008-04-16 (水) 12:55:24
  • こんにちは。修正して動きました。dev:PukiWiki/1.4/自作プラグイン/amazonプラグインの方に修正を加えたのをそちらにアップする予定です。 -- TOBY? 2008-04-17 (木) 23:42:23
  • 首を長~くしてお待ちしております。 -- まったりな? 2008-05-21 (水) 19:09:34
  • 比較的新しめの(?)商品の画像がいつのまにやらハッシュコード化されたファイル名になってしまったため画像が取得できない状態でした。

    対策は完了しましたが、以前のとき同様ファイルをアップロードする権限がないため自分が手を加えた個所を記載しておきます。 -- 萬Q 2008-06-10 (火) 16:59:22

  • この変更点はv 1.1用?ver2.3ではplugin_amazon_cache_image_fetchの呼び元がないし -- 霧姫? 2008-09-06 (土) 09:50:40
  • 自分が今まで修正してたのはv1.1だったのかorz

    アップされているv2.2見たところ初めて見る機能(買い物カゴ)があるのでしんどそうですが合い間を縫っていじってみようと思います。-- 萬Q 2008-09-09 (火) 18:40:11

  • 画像は表示するようになったのですが、案の定買い物カゴの機能が動かない。

    v2.2のソース内にECS 4.0では無効と思われるタグがいくつか使われていて、それらに取って代れるような情報タグが見つからないorz -- 萬Q 2008-09-11 (木) 20:39:14

  • 人柱版を外部にアップロードさせていただきました。 amazon22b.tgz-- 萬Q 2008-09-18 (木) 11:53:31
  • 使い方の説明こっちに詳しく書いてありました。

    補足するとCACHE機能使用していないのでdelete,deleteimage,deletetitleは削除しました。-- 萬Q 2008-09-18 (木) 12:12:44

  • 細かい修正とCACHEの使用/未使用の切り替えを可能にしました。amazon22b rev1.tgz-- 萬Q 2008-09-29 (月) 11:25:28
  • Product Advertising APIに対応したため↑のversion削除します。 (BugTrack2/323) -- 萬Q 2009-06-29 (月) 09:02:03

*1 SwatchImage < SmallImageThumbnailImage < TinyImage < MediumImage < LargeImageから選択可能だがSwatchImage, ThumbnailImage, TinyImageは商品によってはタグが用意されていないこともある。またLargeは画像サイズが大きすぎてページが非常に重くなるのでSmallImage, MediumImageあたりが無難?

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-07-23 (木) 09:26:02
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.346 sec.

OSDN