Я пытаюсь получить цены на номер ASIN с помощью API рекламы продукта Amazon.
Код:
$artNr = "B003TKSD8E"; $base_url = "http://ecs.amazonaws.de/onca/xml"; $params = array( 'AWSAccessKeyId' => self::API_KEY, 'AssociateTag' => self::API_ASSOCIATE_TAG, 'Version' => "2010-11-01", 'Operation' => "ItemLookup", 'Service' => "AWSECommerceService", 'Condition' => "All", 'IdType' => 'ASIN', 'ItemId' => $artNr); $params['Timestamp'] = gmdate("Ymd\TH:i:s.\\0\\0\\0\\Z", time()); $url_parts = array(); foreach(array_keys($params) as $key) $url_parts[] = $key . "=" . str_replace('%7E', '~', rawurlencode($params[$key])); sort($url_parts); $url_string = implode("&", $url_parts); $string_to_sign = "GET\necs.amazonaws.de\n/onca/xml\n" . $url_string; $signature = hash_hmac("sha256", $string_to_sign, self::API_SECRET, TRUE); $signature = urlencode(base64_encode($signature)); $url = $base_url . '?' . $url_string . "&Signature=" . $signature; $response = file_get_contents($url); $parsed_xml = simplexml_load_string($response);
Я думаю, что это должно быть правильно, но я не получаю предложений в ответ:
<?xml version="1.0" ?> <ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2010-11-01"> <OperationRequest> <RequestId>*********************</RequestId> <Arguments> <Argument Name="Condition" Value="All"> </Argument> <Argument Name="Operation" Value="ItemLookup"> </Argument> <Argument Name="Service" Value="AWSECommerceService"> </Argument> <Argument Name="ItemId" Value="B003TKSD8E"> </Argument> <Argument Name="IdType" Value="ASIN"> </Argument> <Argument Name="AWSAccessKeyId" Value="*********************"> </Argument> <Argument Name="Timestamp" Value="2011-11-29T01:49:01.000Z"> </Argument> <Argument Name="Signature" Value="*********************"> </Argument> <Argument Name="AssociateTag" Value="*********************"> </Argument> <Argument Name="Version" Value="2010-11-01"> </Argument> </Arguments> <RequestProcessingTime>0.0083130000000000</RequestProcessingTime> </OperationRequest> <Items> <Request> <IsValid>True</IsValid> <ItemLookupRequest> <Condition>All</Condition> <IdType>ASIN</IdType> <ItemId>B003TKSD8E</ItemId> <ResponseGroup>Small</ResponseGroup> <VariationPage>All</VariationPage> </ItemLookupRequest> </Request> <Item> <ASIN>B003TKSD8E</ASIN> <DetailPageURL>http://www.amazon.de/Apple-iPhone-4-32GB-schwarz/dp/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003TKSD8E</DetailPageURL> <ItemLinks> <ItemLink> <Description>Add To Wishlist</Description> <URL>http://www.amazon.de/gp/registry/wishlist/add-item.html%3Fasin.0%3DB003TKSD8E%26SubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>Tell A Friend</Description> <URL>http://www.amazon.de/gp/pdp/taf/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>All Customer Reviews</Description> <URL>http://www.amazon.de/review/product/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>All Offers</Description> <URL>http://www.amazon.de/gp/offer-listing/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> </ItemLinks> <ItemAttributes> <Manufacturer>Apple Computer</Manufacturer> <ProductGroup>CE</ProductGroup> <Title>Apple iPhone 4 32GB schwarz</Title>/ItemAttributes> </Item> </Items> </ItemLookupResponse>
Группа<?xml version="1.0" ?> <ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2010-11-01"> <OperationRequest> <RequestId>*********************</RequestId> <Arguments> <Argument Name="Condition" Value="All"> </Argument> <Argument Name="Operation" Value="ItemLookup"> </Argument> <Argument Name="Service" Value="AWSECommerceService"> </Argument> <Argument Name="ItemId" Value="B003TKSD8E"> </Argument> <Argument Name="IdType" Value="ASIN"> </Argument> <Argument Name="AWSAccessKeyId" Value="*********************"> </Argument> <Argument Name="Timestamp" Value="2011-11-29T01:49:01.000Z"> </Argument> <Argument Name="Signature" Value="*********************"> </Argument> <Argument Name="AssociateTag" Value="*********************"> </Argument> <Argument Name="Version" Value="2010-11-01"> </Argument> </Arguments> <RequestProcessingTime>0.0083130000000000</RequestProcessingTime> </OperationRequest> <Items> <Request> <IsValid>True</IsValid> <ItemLookupRequest> <Condition>All</Condition> <IdType>ASIN</IdType> <ItemId>B003TKSD8E</ItemId> <ResponseGroup>Small</ResponseGroup> <VariationPage>All</VariationPage> </ItemLookupRequest> </Request> <Item> <ASIN>B003TKSD8E</ASIN> <DetailPageURL>http://www.amazon.de/Apple-iPhone-4-32GB-schwarz/dp/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003TKSD8E</DetailPageURL> <ItemLinks> <ItemLink> <Description>Add To Wishlist</Description> <URL>http://www.amazon.de/gp/registry/wishlist/add-item.html%3Fasin.0%3DB003TKSD8E%26SubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>Tell A Friend</Description> <URL>http://www.amazon.de/gp/pdp/taf/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>All Customer Reviews</Description> <URL>http://www.amazon.de/review/product/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>All Offers</Description> <URL>http://www.amazon.de/gp/offer-listing/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> </ItemLinks> <ItemAttributes> <Manufacturer>Apple Computer</Manufacturer> <ProductGroup>CE</ProductGroup> <Title>Apple iPhone 4 32GB schwarz</Title>/ItemAttributes> </Item> </Items> </ItemLookupResponse>
Группа<?xml version="1.0" ?> <ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2010-11-01"> <OperationRequest> <RequestId>*********************</RequestId> <Arguments> <Argument Name="Condition" Value="All"> </Argument> <Argument Name="Operation" Value="ItemLookup"> </Argument> <Argument Name="Service" Value="AWSECommerceService"> </Argument> <Argument Name="ItemId" Value="B003TKSD8E"> </Argument> <Argument Name="IdType" Value="ASIN"> </Argument> <Argument Name="AWSAccessKeyId" Value="*********************"> </Argument> <Argument Name="Timestamp" Value="2011-11-29T01:49:01.000Z"> </Argument> <Argument Name="Signature" Value="*********************"> </Argument> <Argument Name="AssociateTag" Value="*********************"> </Argument> <Argument Name="Version" Value="2010-11-01"> </Argument> </Arguments> <RequestProcessingTime>0.0083130000000000</RequestProcessingTime> </OperationRequest> <Items> <Request> <IsValid>True</IsValid> <ItemLookupRequest> <Condition>All</Condition> <IdType>ASIN</IdType> <ItemId>B003TKSD8E</ItemId> <ResponseGroup>Small</ResponseGroup> <VariationPage>All</VariationPage> </ItemLookupRequest> </Request> <Item> <ASIN>B003TKSD8E</ASIN> <DetailPageURL>http://www.amazon.de/Apple-iPhone-4-32GB-schwarz/dp/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003TKSD8E</DetailPageURL> <ItemLinks> <ItemLink> <Description>Add To Wishlist</Description> <URL>http://www.amazon.de/gp/registry/wishlist/add-item.html%3Fasin.0%3DB003TKSD8E%26SubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>Tell A Friend</Description> <URL>http://www.amazon.de/gp/pdp/taf/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>All Customer Reviews</Description> <URL>http://www.amazon.de/review/product/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> <ItemLink> <Description>All Offers</Description> <URL>http://www.amazon.de/gp/offer-listing/B003TKSD8E%3FSubscriptionId%3DAKIAI6NFQHK2DQIPRUEQ%26tag%3Dbanholzerme-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D12738%26creativeASIN%3DB003TKSD8E</URL> </ItemLink> </ItemLinks> <ItemAttributes> <Manufacturer>Apple Computer</Manufacturer> <ProductGroup>CE</ProductGroup> <Title>Apple iPhone 4 32GB schwarz</Title>/ItemAttributes> </Item> </Items> </ItemLookupResponse>
Может кто-нибудь объяснить мне, почему я не получаю никакой информации о ценах?
большое спасибо
Чтобы получить цены на предмет, вам нужно OfferFull
параметр ResponseGroup
для Offers
или OfferFull
и параметр MerchantId
для All
:
$params = array( 'AWSAccessKeyId' => self::API_KEY, 'AssociateTag' => self::API_ASSOCIATE_TAG, 'Version' => "2010-11-01", 'Operation' => "ItemLookup", 'Service' => "AWSECommerceService", 'Condition' => "All", 'IdType' => 'ASIN', 'ResponseGroup' => 'Offers', <- important 'MerchantId' => 'All', <- important 'ItemId' => $artNr);
Если вы не указали MerchantId
of All
вы получите только списки предложений для Amazon (по умолчанию MerchantId
). Это вернет списки предложений, и ваш ответ будет включать в себя следующее:
<Items> ... <Item> ... <Offers> ... <Offer> ... <OfferListing> <Price> <Amount>1350</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$13.50</FormattedPrice> </Price> ... </OfferListing> ... </Offer> ...
Дополнительную информацию см. В документации для группы ответов на предложения . Также см. Описание параметра запроса группы ответов для операции ItemLookup для более допустимых групп ответов.
Я предлагаю вам использовать группу ответов OfferSummary, которая вернет что-то вроде этого: …
["Items"]=> object(stdClass)#72 (2) { ... ["Item"]=> object(stdClass)#75 (2) { ["ASIN"]=> string(10) "1405910232" ["OfferSummary"]=> object(stdClass)#76 (6) { ["LowestNewPrice"]=> object(stdClass)#77 (3) { ["Amount"]=> int(247) ["CurrencyCode"]=> string(3) "GBP" ["FormattedPrice"]=> string(6) "£2.47" } ["LowestUsedPrice"]=> object(stdClass)#78 (3) { ["Amount"]=> int(297) ["CurrencyCode"]=> string(3) "GBP" ["FormattedPrice"]=> string(6) "£2.97" }
…
Используйте параметр «medium» для параметра ResponseGroup, допустимые значения – малые, средние и большие. маленький ответ не будет содержать детали цены.
http://docs.aws.amazon.com/AWSECommerceService/latest/DG/RG_Small.html
Xarem, пожалуйста, ознакомьтесь с API рекламы продукта (API Reference / Operations). Вы запросили операцию ItemLookup, и цена не была обещана для вас. Используйте функцию SalesListingLookup (или некоторую другую) для получения доступных цен. Это понятно, потому что у Amazon есть большой пул продавцов, и цены отличаются друг от друга, поэтому они не могут предоставить цены на товары, а для пар товаров и продавцов.
Если бы у меня было достаточно репутации, я бы прокомментировал более раннее решение, но, увы, я ограничился предоставлением нового ответа …
Итак, если вы передадите значение MerchantId для All, вы увидите это в своем ответе:
<MerchantId>Deprecated</MerchantId>
что указывает на то, что, возможно, вы не должны указывать этот параметр, что соответствует выбранному ответу.
Более того, я подозреваю, что происходит что-то еще. Я, вероятно, задаю здесь совершенно новый вопрос, но я отправляю запрос на продукт с действующим ASIN, возвращаясь True, запрашивая группы ответов Предложения, OfferFull и OfferSummary, и я не возвращаю никакой цены Информация. Тем не менее, когда я смотрю на тот же продукт на amazom.com, я вижу информацию о цене.
Так что здесь может быть что-то другое.
Вы можете использовать парсер из ассоциированного скрипта для ответа на свой вопрос.
Отредактируйте свою группу ответов, как показано ниже: responseGroup («Medium, OfferSummary, VariationSummary»)
В группе ответов вы получите ключ «VariationSummary», и внутри этого объекта вы можете проверить ниже параметры для цены:
Обратите внимание, что вы не можете получить все выше 4 параметров в объекте VariationSummary.