如何将 ItemFilters 与 eBay::API::Simple::Finding 一起使用?
How do I use ItemFilters with eBay::API::Simple::Finding?
我正在尝试使用 eBay::API::Simple::Finding 从 ebay 获取已售出的商品,我想使用 ItemFilters,但我看不到它们去了哪里。
特别是我希望使用项目过滤器
(itemFilter.name = SoldItemsOnly, itemFilter.value = true)
and
(itemFilter.name = Condition, itemFilter.value = Used)
我尝试在此处直接包含以下内容:
keywords => '"princess cut", "diamond ring", -"14k*"',
Condition => 'Sold',
SoldItemsOnly => 'true',
sortOrder => 'PricePlusShippingHighest'
我已经研究了很长时间,虽然我确信它在某种程度上很简单,但我似乎无法理解它
use eBay::API::Simple::Finding;
my $api = eBay::API::Simple::Finding->new( {
appid => 'APIKEY',
siteid => 'EBAY-AU',
} );
$api->execute(
'findCompletedItems', {
keywords => '"princess cut", "diamond ring", -"14k*"',
sortOrder => 'PricePlusShippingHighest',
}
);
if ( $api->has_error() ) {
die "Call Failed:" . $api->errors_as_string();
}
my $dom = $api->response_dom();
my $hash = $api->response_hash();
非常感谢任何帮助,
至于我看到了什么?
排序正常,按关键字搜索正常,但商品过滤器不起作用,因此它返回已完成的新的和使用过的商品,无论是已售出还是未售出
正在阅读eBay API docs about findCompletedItems
shows that you need to use child elements for ItemFilter
s. There is a sample that shows this nicely (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 module we can see that it uses XML::Simple 的源代码来构造请求。虽然通常不鼓励 XML::Simple
,但我们将不得不使用它。
深入查看 ItemFilter
的文档表明我们可以为每个过滤器提供一个 <itemFilter>
块。这意味着多个被自动视为 AND。
要使用 XML::Simple 在 API 模块中设置的方式制作单个项目,我们只需要一个 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 形成请求正文字符串并使用 return。这很适合检查请求是否正常。我通过阅读代码弄明白了这一点,从我在上面列出的代码开始,然后朝着提供 execute
.
的基础 class 努力
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 密钥,所以我自己无法 运行,但我很确定它会起作用。
我正在尝试使用 eBay::API::Simple::Finding 从 ebay 获取已售出的商品,我想使用 ItemFilters,但我看不到它们去了哪里。 特别是我希望使用项目过滤器
(itemFilter.name = SoldItemsOnly, itemFilter.value = true)
and
(itemFilter.name = Condition, itemFilter.value = Used)
我尝试在此处直接包含以下内容:
keywords => '"princess cut", "diamond ring", -"14k*"',
Condition => 'Sold',
SoldItemsOnly => 'true',
sortOrder => 'PricePlusShippingHighest'
我已经研究了很长时间,虽然我确信它在某种程度上很简单,但我似乎无法理解它
use eBay::API::Simple::Finding;
my $api = eBay::API::Simple::Finding->new( {
appid => 'APIKEY',
siteid => 'EBAY-AU',
} );
$api->execute(
'findCompletedItems', {
keywords => '"princess cut", "diamond ring", -"14k*"',
sortOrder => 'PricePlusShippingHighest',
}
);
if ( $api->has_error() ) {
die "Call Failed:" . $api->errors_as_string();
}
my $dom = $api->response_dom();
my $hash = $api->response_hash();
非常感谢任何帮助,
至于我看到了什么? 排序正常,按关键字搜索正常,但商品过滤器不起作用,因此它返回已完成的新的和使用过的商品,无论是已售出还是未售出
正在阅读eBay API docs about findCompletedItems
shows that you need to use child elements for ItemFilter
s. There is a sample that shows this nicely (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 module we can see that it uses XML::Simple 的源代码来构造请求。虽然通常不鼓励 XML::Simple
,但我们将不得不使用它。
深入查看 ItemFilter
的文档表明我们可以为每个过滤器提供一个 <itemFilter>
块。这意味着多个被自动视为 AND。
要使用 XML::Simple 在 API 模块中设置的方式制作单个项目,我们只需要一个 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 形成请求正文字符串并使用 return。这很适合检查请求是否正常。我通过阅读代码弄明白了这一点,从我在上面列出的代码开始,然后朝着提供 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 密钥,所以我自己无法 运行,但我很确定它会起作用。