如何为每个ASIN获取单独的XML?亚马逊-MWS



我有 1 个请求,其中包含 20 个 ASIN。我以包含 20 个 ASIN 的 XML 形式收到响应。我想获取一个 XML - 一个 ASIN 的响应并保存在 txt 文件 (20 XML( 中。 但是,只有在请求 1 个 ASIN 而不是 20 个 ASIN 时,我才能这样做。但是这个过程非常缓慢。我该怎么办? 问题2. 如何使用所有ASIN(例如1000(创建1个XML?

$arr = file('asin.txt',FILE_IGNORE_NEW_LINES);
$arr_chunks = array_chunk($arr, 20);
$request->setMarketplaceId(MARKETPLACE_ID);
$asin_list = new MarketplaceWebServiceProducts_Model_ASINListType();
//$request->setASINList($asin_list);
$request->setItemCondition('used');
foreach ($arr_chunks as $value){
$value = $value;
$asin_list->setASIN($value);
$request->setASINList($asin_list);
sleep(1);
invokeGetLowestOfferListingsForASIN($service, $request);
}
function invokeGetLowestOfferListingsForASIN(MarketplaceWebServiceProducts_Interface $service, $request)
{
try {
$response = $service->GetLowestOfferListingsForASIN();

file_put_contents('asin2.xml', $response->toXML());
echo ("Service Responsen");
echo ("=============================================================================n");
$dom = new DOMDocument();
$dom->loadXML($response->toXML());
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = true;
echo $dom->saveXML();
// echo("ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "n");

下面是 XML (asin2.xml( 的示例

<GetLowestOfferListingsForASINResponse
xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<GetLowestOfferListingsForASINResult
ASIN='3944660110' status='Success'>
<AllOfferListingsConsidered>true</AllOfferListingsConsidered>
<Product>
<Identifiers>
<MarketplaceASIN>
<MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
<ASIN>3944660110</ASIN>
</MarketplaceASIN>
</Identifiers>
<LowestOfferListings></LowestOfferListings>
</Product>
</GetLowestOfferListingsForASINResult>
<GetLowestOfferListingsForASINResult
ASIN='3000383964' status='Success'>
<AllOfferListingsConsidered>true</AllOfferListingsConsidered>
<Product>
<Identifiers>
<MarketplaceASIN>
<MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
<ASIN>3000383964</ASIN>
</MarketplaceASIN>
</Identifiers>
<LowestOfferListings>
<LowestOfferListing>
<Qualifiers>
<ItemCondition>Used</ItemCondition>
<ItemSubcondition>Good</ItemSubcondition>
<FulfillmentChannel>Merchant</FulfillmentChannel>
<ShipsDomestically>True</ShipsDomestically>
<ShippingTime>
<Max>0-2 days</Max>
</ShippingTime>
<SellerPositiveFeedbackRating>98-100%
</SellerPositiveFeedbackRating>
</Qualifiers>
<NumberOfOfferListingsConsidered>1
</NumberOfOfferListingsConsidered>
<SellerFeedbackCount>1388</SellerFeedbackCount>
<Price>
<LandedPrice>
<CurrencyCode>EUR</CurrencyCode>
<Amount>31.80</Amount>
</LandedPrice>
<ListingPrice>
<CurrencyCode>EUR</CurrencyCode>
<Amount>28.80</Amount>
</ListingPrice>
<Shipping>
<CurrencyCode>EUR</CurrencyCode>
<Amount>3.00</Amount>
</Shipping>
</Price>
<MultipleOffersAtLowestPrice>False</MultipleOffersAtLowestPrice>
</LowestOfferListing>
</LowestOfferListings>
</Product>
</GetLowestOfferListingsForASINResult>
<GetLowestOfferListingsForASINResult
ASIN='3000556575' status='Success'>
<AllOfferListingsConsidered>true</AllOfferListingsConsidered>
<Product>
<Identifiers>
<MarketplaceASIN>
<MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
<ASIN>3000556575</ASIN>
</MarketplaceASIN>
</Identifiers>
<LowestOfferListings></LowestOfferListings>
</Product>
</GetLowestOfferListingsForASINResult>
<ResponseMetadata>
<RequestId>3caac4dc-ca52-446f-9f4b-a8da2d685ce7</RequestId>
</ResponseMetadata>
</GetLowestOfferListingsForASINResponse>

获得 XML文档后,您可以使用 XPath 列出每个 ASIN,然后将其输出为 XML,您可以将每个段保存到适当的文件中......

$dom = new DOMDocument ();
$dom->load ( 't1.xml' );
$xp = new DOMXPath($dom);
$xp->registerNamespace("default", 
"http://mws.amazonservices.com/schema/Products/2011-10-01");
foreach ( $xp->query("//default:GetLowestOfferListingsForASINResult") as $asin ) {
echo "For ASIN:".$asin->getAttribute('ASIN').PHP_EOL;
echo "ASIN=".$xp->evaluate ("string(descendant::default:MarketplaceASIN/default:ASIN/text())", $asin) .PHP_EOL;
echo $dom->saveXML($asin).PHP_EOL;
$prices = $xp->query("descendant::default:Price", $asin );
foreach ( $prices as $price )   {
echo "LandedPrice=".$xp->evaluate("string(descendant::default:LandedPrice/default:Amount/text())",$price).PHP_EOL;
echo "ListingPrice=".$xp->evaluate("string(descendant::default:ListingPrice/default:Amount/text())",$price).PHP_EOL;
echo "Shipping=".$xp->evaluate("string(descendant::default:Shipping/default:Amount/text())",$price).PHP_EOL;
}
}

最新更新