2017-01-07 8 views
2

私はeBay::API::Simple::Findingを使ってeBayから売り切れた商品を手に入れています。私はItemFiltersを使いたいですが、どこに行くのが見えません。eBay :: API :: Simple :: FindingでItemFiltersを使用するにはどうすればよいですか?

keywords => '"princess cut", "diamond ring", -"14k*"', 
Condition => 'Sold', 
SoldItemsOnly => 'true', 
sortOrder => 'PricePlusShippingHighest' 

私はそれでかなり長い間されていると私は確信していながら、それは次のとおりです。 は特に、私はちょうどここに、以下に直接含むしようとしたアイテムのフィルターに

(itemFilter.name = SoldItemsOnly, itemFilter.value = true) 
and 
(itemFilter.name = Condition, itemFilter.value = Used) 

を使用することを探しています何とか、非常にまっすぐ進む、私は、すべてのヘルプは非常に高く評価され、それ

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(); 

ように見えることはできません

私は何を見ていますか? ソートは、キーワードによる検索が働いている、働いているが、itemfiltersは働いていないので、完成した新しい&使用アイテムを返している、売却かどうか売れ残りeBay API docs about findCompletedItemsを読む

答えて

2

はあなたのことを示してい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>&quot;princess cut&quot;, &quot;diamond ring&quot;, -&quot;14k*&quot;</keywords> 
    <sortOrder>PricePlusShippingHighest</sortOrder> 
</findCompletedItemsRequest> 

いいえインデントされていても問題ありません。フィルターがあることは明らかです。

私はAPIキーを持っていないので、これを自分で実行することはできませんが、うまくいくと確信しています。

+0

構文上の強調マークアップは、私の答えでは正しく動作しません。 – simbabque

+0

ありがとう非常にありがとう、私はそれをチェックアウトし、私はそれを働くことができるかどうかを参照して、あなたにお知らせします –

+0

華麗な、あなたの助けを大変感謝! –

関連する問題