阅读
eBay API docs about
findCompletedItems
显示需要将子元素用于
ItemFilter
s、 有
a sample
这很好地说明了这一点
(link)
.
<?xml version="1.0" encoding="UTF-8"?>
<findCompletedItemsRequest xmlns="http://www.ebay.com/marketplace/search/v1/services">
<keywords>Garmin nuvi 1300 Automotive GPS Receiver</keywords>
<categoryId>156955</categoryId>
<itemFilter>
<name>Condition</name>
<value>3000</value>
</itemFilter>
<itemFilter>
<name>FreeShippingOnly</name>
<value>true</value>
</itemFilter>
<itemFilter>
<name>SoldItemsOnly</name>
<value>true</value>
</itemFilter>
<sortOrder>PricePlusShippingLowest</sortOrder>
<paginationInput>
<entriesPerPage>2</entriesPerPage>
<pageNumber>1</pageNumber>
</paginationInput>
</findCompletedItemsRequest>
查看
eBay::API::Simple::Finding
模块,我们可以看到它使用
XML::Simple
以构造请求。一般来说
XML::Simple
我们将不得不与之合作。
深入了解
项目过滤器
这表明我们可以提供一个
<itemFilter>
每个过滤器的块。这意味着多个被视为自动的。
要以在API模块中设置XML::Simple的方式创建单个项,我们只需要一个hashref。
{
itemFilter => {
name => 'Condition',
value => 3000,
},
}
将成为
<itemFilter>
<name>Condition</name>
<value>3000</value>
</itemFilter>
要获得几个,我们需要在
itemFilter
钥匙
{
itemFilter => [
{
name => 'Condition',
value => 3000,
},
{
name => 'FreeShippingOnly',
value => 'true',
},
],
}
这产生了这个XML。
<itemFilter>
<name>Condition</name>
<value>3000</value>
</itemFilter>
<itemFilter>
<name>FreeShippingOnly</name>
<value>true</value>
</itemFilter>
到现在为止,一直都还不错。我们可以很容易地将其破解到API模块调用中。我没有直接执行调用,而是准备了它,然后调用
private method
_get_request_body
,它使用XML::Simple来形成并返回请求体字符串。检查请求是否看起来正常很好。我通过阅读代码,从上面我列出的代码开始,然后逐步向基类,它提供了
execute
.
use eBay::API::Simple::Finding;
my $api = eBay::API::Simple::Finding->new( {
appid => 'APIKEY',
siteid => 'EBAY-AU',
} );
$api->prepare(
'findCompletedItems',
{
keywords => '"princess cut", "diamond ring", -"14k*"',
sortOrder => 'PricePlusShippingHighest',
itemFilter => [
{
name => 'SoldItemsOnly',
value => 'true',
},
{
name => 'Condition',
value => 'Used',
},
],
}
);
print $api->_get_request_body;
下面是XML。
<?xml version='1.0' encoding='utf-8'?>
<findCompletedItemsRequest xmlns="http://www.ebay.com/marketplace/search/v1/services">
<itemFilter>
<name>SoldItemsOnly</name>
<value>true</value>
</itemFilter>
<itemFilter>
<name>Condition</name>
<value>Used</value>
</itemFilter>
<keywords>"princess cut", "diamond ring", -"14k*"</keywords>
<sortOrder>PricePlusShippingHighest</sortOrder>
</findCompletedItemsRequest>
它没有很好地缩进并不重要。很明显,过滤器在那里。
因为我没有API密钥,所以我不能自己运行它,但我非常确定它会工作。