eBay 是一个买卖商品的巨大市场。 但是,假如您像我一样周围堆着一箱箱的标着 eBay 出售的物品的话,那么在这些物品放到 eBay 出售前将需要较长的一段时间。因为有那么多的工作要做,首先要登录到 Web 站点,然后为每一个不同的物品都建立一个商品列表。eBay 列表接口对于一次只为一个商品建立列表很好用。我过去经常设想:如果可以直接通过电子表格或数据库的形式来提交商品信息,有什么东西使得提交的信息自动在 eBay 在列出该多好啊。
eBay Web 服务的出现使得我梦想成真。 值得庆幸的是,现在 eBay 提供了方便访问 eBay 市场的Web 服务。 自从 2000 年,eBay 就提供一组 XML API ,它被用来在 HTTPS 在以 XML 文档的形式传送数据。就在这年之前, eBay 发布了一组 SOAP API ,它通过 SOAP 和 WSDL 来定义一种 eBay 脚本,简化了对 eBay 平台的访问。这两组 API 都利用了 eBay Web 服务来提供对于同样功能和数据的访问。这些 API 使得定制与 eBay 交互的应用程序变得简单。
这些 API 的作用是显而易见的,事实上,目前超过 40% 的 eBay 列表都是通过调用 API 来实现的。
为进一步简化基于 eBay 的 Web 服务来定制应用程序的过程, eBay 提供了 2 个 SDK 来封装 eBay Web 服务的 API ,使得您可以选择是通过 .NET 技术在 Windows 平台进行开发还是基于 Java 语言进行开发。eBay SDK 是一个强大、灵活、极易上手的工具包,它直接与 eBay 进行交互。在 SDK 出现之前,您不得不格式化自己的 XML 来适应 eBay API 调用,但 eBay API 至今仍是访问 eBay 数据库的有力手段。
过去的几年里,一直只有一种 Windows 平台上的 eBay SDK 。但现在,也有了针对 Java 技术平台的 eBay SDK。Windows 平台的 SDK 封装了 XML API ,Java 平台的 eBay SDK 封装了 SOAP API 。通过封装XML API 或 SOAP API ,二者都提供给您简单易用的对象。其它编程语言仍然可以通过直接调用 API 来访问 eBay Web 服务。
图 1 说明了 eBay 的 Web 服务体系结构 。
图 1. eBay Web 服务体系结构
为使用 eBay Web 服务,您必须加入 eBay 开发者计划,因此,第一步便是注册您在 eBay 的帐号。
根据您的需要,您可以注册免费的个人帐户,或付费的商业帐户。当前收费价格如 表 1 所示。为获取全面、最新的价格信息。请访问 eBay 会员服务和收费页面
表 1. eBay 开发者计划收费
| 个人 | 基本 | 专业 | 企业 | |
| API | ||||
| 许可类型 | 个人的 | 商业的 | 商业的 | 商业的 |
| 请求中包含的 API | 每天 50 | 每月 30,000 | 无限制 | 无限制 |
| 收费 | ||||
| 会员年费 | 免费 | $500 | $1,000 | $5,000 |
| 月度 API 使用收费 | 无 | 超过 30,000 每 1,000 收取 $2.90 | 每 1,000 收取 $1.60 | 每 1,000 收取 $1.25 |
| 认证收费 (每应用程序) | $100 | $200 | $200 | 已包含 (每年1个) |
说明:请求中包含的 API 中的请求指的是除 AddListItem 和 ReListItem 以外的请求, AddListItem 和 ReListItem 请求在任何时候都是免费的。
在 12 小时之内将接收到一封邮件,在其中包含的“沙箱“测试环境中通过使用密钥,开发者计划帐户马上被激活。
您的帐户一旦建立完,就可以下载并安装 eBay SDK 了,同时还将获得大量有用的开发信息。您可以使用 Windows 版本或者 Java 技术版本的 SDK 。
eBay SDK 的版本选择主要决定于您开发应用程序时使用的语言。这两个版本的 SDK 提供了非常相似的对象集以及同样的功能和数据。二者的主要区别在于 Windows 版本 SDK 将对象存储在本地 综合数据库中,当你与 eBay 同步时,则将整个对象集合发送到 eBay 数据库。 对于 Java 版本的 SDK ,本地没有综合数据库,每一次调用都实时地写到 eBay 数据库。
一旦您拿到了密钥,您需要建立一个测试用户来测试“沙箱(Sandbox)”中的您的应用。这也非常简单,您所要作的就是按照 eBay 使用说明一步步执行。
现在,您已经准备好测试您的应用了,现在让我们看看如何利用 SDK 来列出商品。
表 2 是我的商品的一个列表。商品数据可以是简单的文本文件、电子表格或数据库,它们可以由任意应用产生。 不管这些应用程序是如何实现,我们假设应用总能够正确解析数据并使得 SDK 对象可以通过调用一个名为 MyStuff 的对象来访问这些数据。对于每一列的列头, MyStuff 总有一个塑像与之相对应,如 MyStuff.Description 对应 Description 列。下面的示例代码假设此对象存在。
表 2. eBay 出售的示例商品
| 标题 | 描述 | 位置 | 分类ID | 底价 | 一口价 | 拍卖周期 |
| Code Complete book | Steve McConnell的著作, 保存良好。 | 西雅图.华盛顿 | 2228 | $10.00 | $25.00 | 7 |
| TiVo | TiVo 有 10 小时录音时间。工作状况良好。 | 西雅图.华盛顿 | 79865 | $30.00 | $75.00 | 7 |
| 索尼爱立信 T610 手机 | T-Mobile cell phone, excellent condition. | 西雅图.华盛顿 | 64355 | $50.00 | $125.00 | 7 |
为建立执行环境,创建一个 API 请求上下文对象,认证请求用户,并确定 Web 服务的 URL 。
清单 1 向您展示了如何建立一个执行环境,并调用
AddItemCall 来列出一个新商品。
清单 1. 建立执行环境
// Import the applicable libraries import com. eBay .sdk.*; import com. eBay .sdk.call.AddItemCall; import com. eBay .soap.eBLBaseComponents.*; import com. eBay .soap.CoreComponentTypes.AmountType; ... // Create an API CallContext object for the call API Context API Context = new API Context(); API Credential cred = API Context.get API Credential(); API Account ac = cred.get API Account(); eBay Account ec = cred.get eBay Account(); // Authenticate the requesting user: // Specify the eBay SOAP server URL API Context.set API ServerUrl(mServerURL); |
下面,定义一件新的商品,并设置它的属性如 清单 2 所示。这一示例使用了上面提到的 MyStuff 对象
清单 2. 定义新商品
ItemType item = new ItemType();
item.setListingType(ListingTypeCodeType.Chinese);
item.setCurrency(CurrencyCodeType.USD);
item.setCountry(CountryCodeType.US);
item.setPaymentMethods(new BuyerPaymentMethodCodeType[]
{BuyerPaymentMethodCodeType.PaymentSeeDescription});
item.setRegionID("0");
item.setListingDuration(MyStuff.Duration);
item.setTitle(MyStuff.Title);
item.setDescription(MyStuff.Description);
item.setLocation(MyStuff.Location);
item.setQuantity(1);
item.setStartPrice(new AmountType(new Double(MyStuff.StartPrice));
item.setBuyItNowPrice(new AmountType(new Double(MyStuff.BuyItNowPrice));
CategoryType cat = new CategoryType();
cat.setCategoryID(MyStuff.CategoryID);
item.setPrimaryCategory(cat); |
添加商品的最后一步是对 Web 服务调用 API 请求。它遵循以下几个流程:
- 声明一个
FeesType对象。 - 将
ItemType对象传递给AddItemCall.ItemToAdd对象。 - 调用
AddItemCall.addItem()方法。 - 在
FeesType对象中保存addItem()方法的返回值。
说明:如果可能发生错误,API 调用必须总在
Try. . .Catch 块中。
清单 3. 调用 API 请求
try {
// Create the AddItemCall object
AddItemCall API = new AddItemCall( API Context);
API .setSite(siteID);
// Declare the FeesType object to hold the returned
// estimated listing fees data
FeesType fees;
// Make the call
fees = API .addItem(item);
// Store the fees to a database
...
}
catch(Exception e) {
... error handling ...
} |
至此,所有工作都完成了。这些是利用 eBay Web 服务列出商品的基本步骤。同时还会有其它一些特性,如拍卖管理、查找、管理反馈等。详细信息请参考(与 SDK 一起下载的)SDK 文档
eBay SDK 使您可以创建的应用程序更加容易地访问 eBay Web 服务,不管你是 Windows 程序员还是 Java 程序员。开发者计划 Web 站点提供的支持很有用,SDK 文档也相当不错。现在就开始动手建立您自己的应用吧!
作为系列文章中的第一篇,本文从实践的角度探究了如何利用 eBay Web 服务,如管理商品列表、完成交易以及处理反馈信息等。在接下来的文章中将包含更多的应用程序示例。
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文。
- 访问 eBay 开发者园地
主页以获取详细信息。
- 建立你的
eBay 开发者计划帐号。
- 浏览 eBay 开发者计划
收费清单以找到你需要的最佳帐户类型。
- 在 eBay 开发者园地的
社区中与其它开发者讨论。
- 下载 eBay
Java SDK(免费)。
- 下载 eBay
Windows SDK(免费)。
- 示例代码基于 SDK 文档中的示例代码(包含在 SDK 下载中),这也是一个非常不错的学习资源。