Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

使用Amazon Product Merchandising API构建自定义联盟链接

by
Difficulty:IntermediateLength:LongLanguages:

Chinese (Simplified) (中文(简体)) translation by Wei Zhang (you can also view the original English article)

Amazon Associates计划与亚马逊网络服务(AWS)相结合,为开发人员提供了一种使用RESTful API搜索亚马逊商店目录的强大方法,并将几乎任何产品列表的数据集成到网页中。 如果您是具有商业思维并且正在寻找通过网站获利的方式的程序员,您可以注册成为亚马逊联盟会员,并在用户每次点击您的产品链接并完成购买时获得佣金。 (就联盟收入计划而言,亚马逊的佣金是最慷慨的。)

对于那些不熟悉联盟营销理念的人,我们假设您正在运行一个博客或网站,其中包含电影评论。 对于发布的每个电影评论,您都可以通过添加链接供读者在您的文章附近购买电影。 为了使点击更具吸引力,链接可以包括DVD的缩略图,完整的电影名称,可用的最低价格和“购买”按钮。

在本教程中,我将向您展示如何在PHP中创建一个专用的,可重用的类,该类连接到Product Merchandising API并根据产品名称和购物类别(在本例中为“Movies”)获取XML数据。 最后,我们将这些数据填充到一个小的,完全可定制的HTML模板中,以便我们最终得到一个迷你联盟模块的工作演示。 让我们开始吧。

[请注意,在访问示例演示之前,如果您选择从提供的链接购买或租借DVD,则会向Envato Tuts +支付佣金。]

注册会员ID并获取凭证

首先,在affiliate-program.amazon.com注册一个帐户。 它是免费的,您只需按照步骤为您的网站创建个人资料。 通过输入您的电话号码,接听自动呼叫并输入您提供的密码,系统会要求您在流程结束时验证您的身份。

完成注册后,您将获得一个Amazon Affiliate ID(在此示例中,它是“envtuts-20”)。 使用您的用户名和密码登录您的主帐户区域,然后单击Product Merchandising API选项卡。 在那里,点击链接开始使用API。

如果您尚未注册,则需要注册Amazon Web Services(aws.amazon.com)。 在AWS控制台的Security Credentials下,您可以生成用于发出API请求的访问密钥和密钥。 (注意:保持这些凭据的私密性和安全性非常重要。切勿在GitHub或其他任何其他地方公开公开它们。)

设置我们的PHP助手类

出于本示例的目的并保持相对简单,我们将实现Singleton设计模式以创建名为AmazonAssocHelper的静态助手类。 它将包含一个公共方法,该方法连接到API,搜索目录,并使用我们传递的某些参数返回产品数据。 以下是我如何设置它:

前几行为我们的类声明了一个命名空间,并包含一个第三方类,我们需要使用我们的凭据向API发出签名请求。 我定义的三个常量是我们在注册后获得的最重要的联盟ID,以及AWS访问密钥和密钥。 当我们发出API请求时,会员ID会自动插入到我们检索的产品链接中,以便购买可以适当地追溯到我们的帐户并获得付款! 请务必为自己填写所有这三个值。

这三个私有变量指的是我们为每个请求提供的搜索参数。 我使用“ItemSearch”作为查找结果的操作选择。 “2013-08-01”是最新API版本的日期,我们还需要提供给我们签名的请求,最后,我们必须指定我们想要返回的响应组。 共有55种选择,它们的大小和返回的数据类型各不相同。 出于我们的目的,我们正在寻找电影的完整标题和详细信息页面的完整URL,这两者都在“小”响应组中。 我们还需要来自“Images”响应组的缩略图图像,以及来自“OfferSummary”组的最低新价格。

fetch_product_data()函数是我们公开公开的方法,它接受两个参数:

  1. 一个特定的关键短语,指的是我们要搜索的产品的名称
  2. 已接受的亚马逊产品类别

它最终将返回与从XML响应中解析的顶部搜索结果有关的数据数组。 (在许多情况下,第一个结果将是我们想要的产品,假设我们提供的关键词足够具体。作为替代方案,您可以决定修改此示例以按产品的特定ASIN或ID号进行搜索 相反,但这种方法有利有弊。 如果您拥有一个包含不同电影的大型文章页面数据库,那么使用基于名称的方法很可能会更有效,因为它可以让您立即自动生成所有文章的产品链接,并节省您的额外时间和 必须手动查找并插入每个ID的工作。)

生成签名请求

下一步是添加一个帮助程序类,该类将对产品API发出签名请求。 我使用了由Ulrich Mierendorff编写的第三方函数,并将其包装在自己的静态类中,称为AWSSignedRequest。 它需要几个参数,包括区域(对于美国商店,我们使用“com”),请求参数数组,我们的AWS密钥,响应组以及我们已经定义的API版本。 get_signed_request()方法实质上构建并从所有这些部分返回完整的URL请求字符串。

最终签名的请求URL如下所示:

AmazonAssocHelper类中,将get_signed_request()调用放在名为get_search_results()的方法中,并传入包含四个搜索参数($params)的数组以及其他参数,如下所示:

我们的$params数组包括我们已经定义的操作和响应,以及'Title'和'SearchIndex'的值。 在这种情况下,SearchIndex只是我们正在搜索的产品类别。 现在,我们可以调用PHP的内置file_get_contents()函数来生成请求的响应,并且由于响应是XML文档,我们使用另一个内置函数simplexml_load_string()来加载它作为我们的对象 可以解析。

测试响应和预览XML数据

此时,我们希望能够使用一些真实的产品值来尝试我们的API请求,这样我们就可以在解析之前看到返回的XML数据的实际示例。 如上所示,添加一些测试行以将标头设置为application / XML,并在返回之前打印出$response

现在,创建一个文件,该文件将作为显示产品链接的主页面。 我决定将其称为index.php。 在顶部,添加以下代码:

前两行声明了我们的命名空间,并包含一个允许我们的类文件自动加载的全局函数,因为我们没有使用PHP框架。 下一行是重要的一行。 我们在AmazonAssocHelper类上调用fetch_product_data()公共方法,并将其分配给名为$product_data的数组变量,传入特定的电影名称作为关键短语(我从当前畅销书列表中选择“Jurassic World”)和 “电影”作为类别。

加载页面时,XML响应的开头应如下所示:

如果滚动并扫描输出,您应该能够看到对我们的演示有用的所有数据,包括<DetailPageURL><Title><LargeImage><LowestNewPrice>,<LargeImage>和<LowestNewPrice>。 我们将专注于解析节点。

解析响应对象

AmazonAssocHelper类中,创建另一个名为get_top_result_data()的方法,该方法将XML响应对象作为参数。 我们现在可以开始读取包含我们想要捕获的数据的节点,但在我们去那里之前,让我们计划合并一些错误检查。 我在函数的顶部添加了几行来调用一个方法,该方法将为我们解析Error节点,我将在本教程结束时详细介绍它。

正如您在上面的代码中看到的,我们首先从XML对象中检索第一个项目节点(Item[0])并将其存储在变量($first_item)中。 然后,我们对每个孩子进行操作以收集我们想要的信息($item_title$item_link$item_image$item_price)。 最后,我们将它们全部打包到一个带有命名属性的数组中并返回数组。

处理错误

创建一个名为handle_errors()的方法并传递相同的XML对象。 根据此API的设置方式,将具有特定代码和消息的多个错误节点设置为显示在<OperationRequest>节点或Items<Request> 节点中。 您可以通过设置无效的搜索索引或响应组来测试它们。 以下代码循环遍历每个节点,并将错误消息推送到我们返回的数组中:

填充HTML模板中的数据

此时,您可以删除XML测试调用,因为我们已准备好查看最终的数据输出。 在index.php中,打印返回的$product_data数组并加载页面。 你应该看到这样的东西:

一旦您确认我们感兴趣的四个属性中的每个属性的数据都是正确的,您可以尝试在其他电影或产品上运行该呼叫以进行比较。 请注意,会员ID(在本例中为“envtut-20”)已自动插入到“链接”中,正如我们所期望的那样。

最后一步,让我们编写一个简单的HTML代码块来显示我们的电影数据,并将其链接到购买页面。 在index.php中,在PHP块下面添加以下内容:

请注意,如果返回错误,我选择完全隐藏显示,但是,您可以在其位置显示相应的错误消息。

现在,添加CSS样式后,最终输出将如下所示:

Amazon Affiliate Link Demo

你有它! 将联盟模块推向全球后,您可以登录自己的帐户跟踪所有购买和收入。

结论

在本教程中,我们介绍了PHP程序员构建可扩展代码解决方案所需的所有步骤,该解决方案可立即为Amazon Store中的任何产品生成自定义联盟链接。 根据您的需求或偏好,您可以决定使用不同的参数更改或扩展此示例。

您还可以自己更详细地浏览API文档,以发现更多可能的内容。 使用Product Merchandising API的真正优势在于它为安排和显示有关产品或产品列表的全方位实时信息提供的灵活性。 使用亚马逊的默认链接生成器(无需编码知识),您获得的控制量几乎不同,并且您的选项有限。

API非常适用于动态生成的网页,以及需要对链接外观进行更高级别控制的页面,因此,如果您正在沿着这些方向开展网站或博客,并希望合并获利,我希望 您发现本教程很有用。

Envato qr branded
关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.