* amazon.inc.phpのAWS4.0対応 [#te6914c1]

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

** メッセージ [#qf272a72]
関連: [[official:自作プラグイン/amazon.inc.php]]

***変更点 [#w8a54d09]
-''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追記 [#e4cc8912]
-''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'' 定数を追加((''SwatchImage'' < ''SmallImage'' ≒ ''ThumbnailImage'' < ''TinyImage'' < ''MediumImage'' < ''LargeImage''から選択可能だが''SwatchImage'', ''ThumbnailImage'', ''TinyImage''は商品によってはタグが用意されていないこともある。またLargeは画像サイズが大きすぎてページが非常に重くなるので''SmallImage'', ''MediumImage''あたりが無難?))
 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追記 [#j0513612]
2.2を元にECS4.0対応を施して見ました。~
が、まだ多くの商品でテストしたわけではないので''人柱版''という位置付けとさせて頂きます。~
またプラグイン使用には以下のパラメータが必要となります。各自で用意してください。~

-AMAZON_AID(アソシエイトID、任意)
-AWS_ACCESS_KEY_ID(アクセスキーID、''&color(red){必須};'')
-AWS_SUBSCRIPTION_ID(サブスクリプションID、買い物かごを使う場合必要)
~
~
[[アクセスキーID、サブスクリプションID発行>http://www.amazon.co.jp/gp/feature.html?docId=451209]]~
[[アソシエイトID 登録>https://affiliate.amazon.co.jp/]]~
~
-使い方は[[PukiWiki/1.4/自作プラグイン/amazonプラグイン]]参照
--------
- 情報有り難うございます。このPukiwiki付属版向けの修正を参考に、[[閑舎さん作成版>PukiWiki/1.4/自作プラグイン/amazonプラグイン]]も自分が使っている機能についてはAWS4.0対応出来ました。 -- [[You&I]] &new{2008-04-12 (土) 23:01:43};
- 修正後使ってて気づいたのですが、Amazon公式の画像無い状態かつユーザーが投稿した画像がある場合にもno image状態になっていたので、リクエストの部分を修正して投稿画像を取得しようとしたのですが、その投稿画像取得できるリクエストキーが見当たりませんでした。(ItemLookupのImages, Largeに該当要素なし。) -- [[萬Q]] &new{2008-04-14 (月) 15:08:43};
- You&Iさん、パッチを公開されませんでしょうか?ぜひ使わせていただきたいのですが・・・ -- [[もみもみ]] &new{2008-04-16 (水) 04:37:33};
-- 自分用に色々改修が入っているので、一般公開は控えさせて頂きたいのですが。動いたと思っていても自分の修正が色々問題があったりで。どうしてもというなら、[[事例紹介>official:PukiWiki/活用事例/話題/コンピュータ#l805ff7b]]に自分のサイトも紹介されているのでそちらから。 -- [[You&I]] &new{2008-04-16 (水) 12:55:24};
- こんにちは。修正して動きました。[[dev:PukiWiki/1.4/自作プラグイン/amazonプラグイン]]の方に修正を加えたのをそちらにアップする予定です。 -- [[TOBY]] &new{2008-04-17 (木) 23:42:23};
- 首を長~くしてお待ちしております。 -- [[まったりな]] &new{2008-05-21 (水) 19:09:34};
- 比較的新しめの(?)商品の画像がいつのまにやらハッシュコード化されたファイル名になってしまったため画像が取得できない状態でした。
~対策は完了しましたが、以前のとき同様ファイルをアップロードする権限がないため自分が手を加えた個所を記載しておきます。 -- [[萬Q]] &new{2008-06-10 (火) 16:59:22};
- この変更点はv 1.1用?ver2.3ではplugin_amazon_cache_image_fetchの呼び元がないし -- [[霧姫]] &new{2008-09-06 (土) 09:50:40};
- 自分が今まで修正してたのはv1.1だったのかorz 
~アップされているv2.2見たところ初めて見る機能(買い物カゴ)があるのでしんどそうですが合い間を縫っていじってみようと思います。-- [[萬Q]] &new{2008-09-09 (火) 18:40:11};
- 画像は表示するようになったのですが、案の定買い物カゴの機能が動かない。 
~v2.2のソース内にECS 4.0では無効と思われるタグがいくつか使われていて、それらに取って代れるような情報タグが見つからないorz -- [[萬Q]] &new{2008-09-11 (木) 20:39:14};
- 人柱版を外部にアップロードさせていただきました。 %%amazon22b.tgz%%-- [[萬Q]] &new{2008-09-18 (木) 11:53:31};
- 使い方の説明[[こっち>PukiWiki/1.4/自作プラグイン/amazonプラグイン]]に詳しく書いてありました。 
~補足するとCACHE機能使用していないので''delete'',''deleteimage'',''deletetitle''は削除しました。-- [[萬Q]] &new{2008-09-18 (木) 12:12:44};
- 細かい修正とCACHEの使用/未使用の切り替えを可能にしました。%%amazon22b rev1.tgz%%-- [[萬Q]] &new{2008-09-29 (月) 11:25:28};
- ''Product Advertising API''に対応したため↑のversion削除します。 ([[BugTrack2/323]]) -- [[萬Q]] &new{2009-06-29 (月) 09:02:03};

#comment
//#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.051 sec.

SourceForge