PEAR::Services_Amazon を使おうとしたけど諦めた話

投稿者: | 2017/11/14

せっかくPEAR を入れたので、Amazonの商品紹介API、Product Advertising APIを使えるらしい「PEAR::Services_Amazon」を使ってみようとしましたが、いろいろ試したうえで諦めました。結論だけ言えば「PHP5.6なら動かせるけど、PHP7.1では動かない」です。

Product Advertising API とは?

Product Advertising API を利用すれば、Amazon のデータベースにアクセスでき、Amazon の提供する高性能な E コマースデータやオンライン機能が利用できるようになるということです。Amazonの商品や自分の売りたい品物を販売するオンラインストアを自分で構築できるようになります。

Product Advertising API 開発者ガイドより引用

手っ取り早く言えば、APIを使うとこんなリンクが簡単に作れるようになりますよ、という意味ですね。アフィリエイト用のurlや、画像のurl、金額、商品説明などの情報がXML形式で取得できるので、XSLTなんかでパースするだけできれいに表示できますよ、ということです。

 

まずは PEAR::Services_amazon をインストール

JETBOY では cPanel の「ソフトウェア > PHP PEAR パッケージ」を開いて、「amazon」で検索をしたら出てくる「Services_Amazon(0.9.0)」をインストール。

 

 

インストールの最初に大量のWarning&失敗のログ。Services_Amazon はインストールできていませんでした。

Warning は HTTP_Request、Console_Getopt、Net_URL が全部古いから新しいほうを使ったほうが良いよっていうことらしい。XML_Serializer は逆にβ版なのでインストールできないよっていうことですね。

 

 

ひとまず失敗した XML_Serializer だけ個別に再インストール。今度は XML_Parser が古いよって Warning が出たけど、気にせずに進めてみる。そして、Services_Amazon を再度インストール。

 

 

こんどはインストール出来ました。

 

PEAR::Services_Amazon を実行してみる

簡単なコードを書いて実行。

<?php
ini_set("include_path", '/home/***/php:' . ini_get("include_path") );

$amazon_api_aid="アソシエイトID";
$amazon_api_akey="アクセスキー";
$amazon_api_skey="シークレットキー";
require_once 'Services/Amazon.php';

$amazon = new Services_Amazon($amazon_api_akey, $amazon_api_skey, $amazon_api_aid);

// デフォルトではamazon.comの検索結果として帰ってくるので、
// 検索対象を日本にしたい時はこのようにする
$amazon->setBaseUrl('http://ecs.amazonaws.jp/onca/xml');
$keyword = 'B00R22Y2XK';
$options['Keywords'] = $keyword;
$options['Sort'] = 'salesrank';
$options['ItemPage'] = 1;
$options['ResponseGroup'] = 'ItemIds,ItemAttributes,Images';
$response = $amazon->ItemSearch('KindleStore', $options);
print_r($response);
?>

HTTP ERROR 500 が表示されました。

エラーを見てみると・・・インストールした Amazon.php でシンタックスエラー。new の前に & がついているのがいけないらしい。php7から、newで作成したオブジェクトの参照渡しが廃止されているんですね。

PHP Parse error: syntax error, unexpected 'new' (T_NEW) in /home/***/php/Services/Amazon.php on line 950

    function _sendHttpRequest($url)
    {
        $http = &new HTTP_Request($url);
        $http->setHttpVer('1.0');

 

試しに、 &new になっているところを、片っ端から & を外して回ると、次はこんなエラーが。
PHP Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Services_Amazon has a deprecated constructor in /home/***/php/Services/Amazon.php on line 103

PHP7では PHP4形式のコンストラクタ (クラス名と同じ名前のメソッドを定義するもの) も廃止されています。

 

ここまで来たら、単純に PEAR::Services_amazon がPHP7に対応してないことが明白ですが、一応試しにサーバーのPHPのバージョンを5.6にするとサクサク動いたので、PHPのバージョンで原因確定です。

 

PEAR::Services_amazon のドキュメントを見ると、「PHP Version: PHP 4.0.0 or newer」とは書かれているものの、「Release date: 2011-12-22」なので、ずいぶん前から更新が止まっているみたいですね。

https://pear.php.net/package/Services_Amazon/download

 

 

結論

使い勝手が良さそうだったので残念ですが、Wordpress は PHP7 で動かしたいのでバージョンを下げたくないし、Amazon.php を片っ端から PHP7 対応に書き換える手間を考えたら、自前でクラスを用意したほうが早いので、あきらめることにしました。残念!!

おすすめレンタルサーバー

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください