はあなたのことを示していItemFilter
の子要素を使用する必要があります。これをうまく示しているのa sampleがあります。
<?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>
我々はそれが要求を構築するためにXML::Simpleを使用していることがわかりますeBay::API::Simple::Findingモジュールのソースコードを見てみます。一般的にはXML::Simple
が推奨されていませんが、我々はそれを使用しなければなりません。
ItemFilter
のドキュメントを詳しく見てみると、フィルタごとに1つのブロックを提供できることがわかります。つまり、複数のものが自動的にANDとして扱われます。
XML :: SimpleがAPIモジュールに設定された方法で単一の項目を作成するには、単にハッシュリファレンスが必要です。
{
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キーを持っていないので、これを自分で実行することはできませんが、うまくいくと確信しています。
構文上の強調マークアップは、私の答えでは正しく動作しません。 – simbabque
ありがとう非常にありがとう、私はそれをチェックアウトし、私はそれを働くことができるかどうかを参照して、あなたにお知らせします –
華麗な、あなたの助けを大変感謝! –