注意: zendservice-amazon附带的演示不会直接运行。请求必须包括您的App ID、Secret Key和Associate Tag,但演示脚本默认情况下不会包含这些信息。我花了一段时间才弄清楚,没有这些信息,所有查询都会抛出异常,显示HTTP响应状态为400。不幸的是,异常没有响应正文,无法得知缺少哪些参数。
下面是一些代码,可以帮助您开始使用ZF2和ZendService\Amazon
。
首先,让我概述一下我将为此示例放置文件的目录结构:
testing
|-Zend
|---Crypt
|---Escaper
|---Http
|---I18n
|---Loader
|----+AutoloaderFactory.php
|----+... more files
|----+StandardAutoloader.php
|-----Exception
|---Stdlib
|---Uri
|---Validator
|-ZendRest
|-ZendService
|---Amazon
|-----Authentication
|-------Exception
|-----Ec2
|-------Exception
|-----Exception
|-----S3
|-------Exception
|-----SimpleDb
|-------Exception
|-----Sqs
|-------Exception
|----+AbstractAmazon.php
|----+...more files
|----+SimilarProduct.php
|-+test.php
要点是我创建了一个名为
testing
的目录,我们将在其中放置ZF2自动加载程序以及Amazon类及其依赖项。在testing下有一个包含自动加载程序(在
Loader
中)的
Zend
文件夹,还有一个
ZendService
文件夹,其中包含
Amazon
服务。
首先,我们需要获取来自ZF2的自动加载程序副本。你遇到麻烦的部分原因是看起来你正在使用与ZF2不兼容的ZF1自动加载程序。要获取ZF2的Autoloader,可以
下载最新的ZF2软件包,并从
ZendFramework-2.0.x/library/Zend/
中复制
Loader
目录到我们在
testing
目录中创建的
Zend
文件夹中。
现在我们有了自动加载文件,让我们获取Amazon服务文件。我将写一篇详细的答案,介绍如何使用Composer获取最新的包,但现在我将解释如何手动获取它。要获取可用的ZF2软件包的完整列表,请加载
http://packages.zendframework.com/packages.json中的JSON文件。在其中找到
zendframework/zendservice-amazon
,确定列表中可用的最高版本,并获取相应的dist。
编辑截至2013年7月11日,这是最新的
zendservice-amazon软件包。
从
ZendService_Amazon-2.0.2.zip
的
library
目录中,将整个
ZendService
目录复制到
testing
目录中。现在您拥有了ZF2 Amazon服务文件。
接下来,处理依赖项。从ZF2库中复制目录
Crypt
、
Escaper
、
Http
、
I18n
、
Json
、
Stdlib
、
Uri
和
Validator
到
testing
文件夹内的
Zend
目录。
您还需要
ZendRest 包。将 ZendRest 包中的
library
中的
ZendRest
文件夹复制到
testing/ZendRest
。
现在是一些代码。在
testing
文件夹内创建
test.php
文件,并添加以下内容:
<?php
require_once './Zend/Loader/StandardAutoloader.php';
$autoloader = new Zend\Loader\StandardAutoloader(array(
'namespaces' => array(
'Zend' => dirname(__FILE__) . '/Zend',
'ZendRest' => dirname(__FILE__) . '/ZendRest',
'ZendService' => dirname(__FILE__) . '/ZendService',
),
'fallback_autoloader' => true));
$autoloader->register();
$tag = 'prdesign-20';
$appId = '1JT2V3QNEHDAMKYR5F02';
$secretKey = 'Qgjeiw39f8UNzjJgeerrgDs1a193du/v7djDAtn/x';
$query = new ZendService\Amazon\Query($appId, 'US', $secretKey);
$query->Category('Books')->Keywords('PHP')->AssociateTag($tag);
$result = $query->search();
foreach($result as $item): ?>
<div class="item">
<a href="<?php echo $item->DetailPageURL ?>" target="_blank"><?php echo $item->Title ?></a>
by <?php if (is_array($item->Author)): ?>
<?php echo implode(', ', $item->Author) ?>
<?php else: ?>
<?php echo $item->Author ?>
<?php endif; ?>
</div>
<?php endforeach; ?>
首先,我们从ZF2中
require_once
了
StandardAutoloader
类。一旦自动加载器被注册,这是唯一需要手动包含的类。
接下来,我们创建一个新的自动加载器并传递一些选项。这告诉自动加载器命名空间
Zend
和
ZendService
中的类所在位置。我们告诉自动加载器它们位于当前目录中各自的文件夹中。根据需要更改
dirname(__FILE__)
为正确的路径。
fallback_autoloader
选项告诉自动加载器在
include_path
中查找任何命名空间或供应商的类。
然后调用
$autoloader->register();
实际上在PHP中注册了我们设置的自动加载器。现在自动加载器的设置已经完成。
接下来的三行定义了API所需的一些必要参数。
下面的3行代码很简单,我们现在创建一个新的
ZendService\Amazon\Query
实例,并传递我们的亚马逊应用程序ID和密钥。然后通过指定在图书类别中搜索并将关键字设置为PHP来构建查询。我们还添加了所需的AssociateTag。最后,我们执行搜索。
我还没有使用过
ZendService\Amazon
,因此无法提供有关使用该类的详细说明,但包含的演示脚本应该可以帮助您开始发送基本查询到亚马逊并处理结果。
希望这有所帮助。