2016-07-31 5 views
0

Я использую Amazon Product Advertising API PHP Class from Codediesel.Amazon Product Advertising API Чтение сперва Предложение

Я использую функцию getItemByAsin и изменил ResponseGroup к Offers, потому что я хочу, чтобы получить IsEligibleForPrime для самого дешевого предложения (см Amazon JSON response.

Поскольку существует более 1 предложение в ответ внутри offer тега, Я не знаю, как читать первый

Вот что réponse выглядит следующим образом:.

<Item> 
    <ASIN>047061529X</ASIN> 
<Offers> 
    <TotalOffers>2</TotalOffers> 
    <TotalOfferPages>1</TotalOfferPages> 
    <MoreOffersUrl>http://www.amazon.com/gp/offer-listing/047061529X/?SubscriptionId=AKIAI44QH8DHBEXAMPLE&ie=UTF8&tag=adrpik-20&creative=386001&camp=2025&linkCode=xm2 </MoreOffersUrl> 
    <Offer> 
     <OfferAttributes> 
     <Condition>New</Condition> 
     </OfferAttributes> 
     <OfferListing> 
     <OfferListingId>6vZH%2FR4dOoabV7sTSv3vC0Np5xK1c8MKOhAl5HYbCIJhxOLlJw1O2AM6mLYyVhjnI8s2gMkx7yq%2F%2BEC7yKPWkQTqhVhFBeUDm71EdpaYwrXpppfcAL1yPzyQFkOuK6MsK8aLPSNSWVs%3D </OfferListingId> 
     <Price> 
      <Amount>1025</Amount> 
      <CurrencyCode>USD</CurrencyCode> 
      <FormattedPrice>$10.25</FormattedPrice> 
     </Price> 
     <AmountSaved> 
      <Amount>974</Amount> 
      <CurrencyCode>USD</CurrencyCode> 
      <FormattedPrice>$9.74</FormattedPrice> 
     </AmountSaved> 
     <PercentageSaved>49</PercentageSaved> 
     <Availability>Usually ships in 1-2 business days</Availability> 
     <AvailabilityAttributes> 
      <AvailabilityType>now</AvailabilityType> 
      <MinimumHours>24</MinimumHours> 
      <MaximumHours>48</MaximumHours> 
     </AvailabilityAttributes> 
     <IsEligibleForSuperSaverShipping>0</IsEligibleForSuperSaverShipping> 
     <IsEligibleForPrime>1</IsEligibleForPrime> 
     </OfferListing> 
    </Offer> 
    <Offer> 
    <OfferAttributes> 
    <Condition>Used</Condition> 
    </OfferAttributes> 
    <OfferListing> 
    <OfferListingId>uXUlLeu7rH5t3ogkZJ%2Bd11tWCsdsj5kHhjoscRF1D1GuBuDwCyrz0XyR%2BTEOJO7PgpfwLjtX4ojhbXeHZgM0Br4DiWsPhNZTduzvYC8zLgG0z1e%2FgYiiuuR0wTyKqssY6ncHyVjZK1A%3D </OfferListingId> 
    <Price> 
     <Amount>1110</Amount> 
     <CurrencyCode>USD</CurrencyCode> 
     <FormattedPrice>$11.10</FormattedPrice> 
    </Price> 
    <AmountSaved> 
     <Amount>889</Amount> 
     <CurrencyCode>USD</CurrencyCode> 
     <FormattedPrice>$8.89</FormattedPrice> 
    </AmountSaved> 
    <PercentageSaved>44</PercentageSaved> 
    <Availability>Usually ships in 1-2 business days</Availability> 
    <AvailabilityAttributes> 
     <AvailabilityType>now</AvailabilityType> 
     <MinimumHours>24</MinimumHours> 
     <MaximumHours>48</MaximumHours> 
    </AvailabilityAttributes> 
    <IsEligibleForSuperSaverShipping>0</IsEligibleForSuperSaverShipping> 
    <IsEligibleForPrime>1</IsEligibleForPrime> 
    </OfferListing> 
</Offer> 
</Offers> 

Как я могу прочитать IsEligibleForPrime с первых <Offer></Offer>?

+0

На какой элемент вы хотите сделать заказ? Самое дешевое или первое предложение? – Zl3n

+0

Я хотел бы получить содержание IsEligibleForPrime первого (самого дешевого) предложения, где условие «новое». – Paul

+0

Хорошо, давайте попробуем что-нибудь – Zl3n

ответ

1

Допустим, вы работаете в среде namepace

Сначала объявить пространство имен

namespace Amazon; 

Во-вторых, переменные создании экземпляра. Затем вызовите функцию конструкта вашего класса:

/** 
* Check from Amazon 
* @param string The ASIN we are looking for 
*/ 
public function __construct($asin) 
{ 
    $this->amazonAPI = new AmazonProductAPI(); // Or call from it right place 
    $this->asin = $asin; 
    $this->getResults(); 
} 

И там, вы вызываете функцию, который ищет результат вы хотите:

private function getResults() 
{ 
    // Call public function getItemByAsin($asin_code) from AmazonProductAPI class 
    $items = $this->amazonAPI->getItemByAsin($this->asin); 

    foreach ($items->Items->Item->Offers as $offer) { 

     if ($offer->Offer->OfferAttributes->Condition == 'New') { 
      $IsEligibleForPrime = $offer->Offer->OfferListing->IsEligibleForPrime; 
     } 
    } 
    $this->eligible = $IsEligibleForPrime == 1 ? 1 : 0; 
} 

Я проверил этот код и он работает для ASIN вы даете в своем вопросе. Вот результат:

  1. имеет право

    Amazon {#17 ▼ 
        +asin: "047061529X" 
        -amazonAPI: AmazonProductAPI {#16 ▼ 
        -public_key: "**********" 
        -private_key: "**********" 
        -associate_tag: "**********" 
        } 
        -eligible: 1 
    } 
    
  2. Не имеет права

    Amazon {#17 ▼ 
        +asin: "B01E67UWX2" 
        -amazonAPI: AmazonProductAPI {#16 ▶} 
        -eligible: 0 
    } 
    

Полный источник:

namespace devSO\Amazon; 

class Amazon 
{ 
    /** 
    * @var string 
    */ 
    public $asin; 

    /** 
    * @var object 
    */ 
    private $amazonAPI; 

    /** 
    * @var int 
    */ 
    private $eligible; 

    /** 
    * Check from Amazon 
    * @param string The ASIN we are looking for 
    */ 
    public function __construct($asin) 
    { 
     $this->amazonAPI = new AmazonProductAPI(); // Or call from it right place 
     $this->asin = $asin; 
     $this->getResults(); 
    } 

    private function getResults() 
    { 
     // Call public function getItemByAsin($asin_code) from AmazonProductAPI class 
     $items = $this->amazonAPI->getItemByAsin($this->asin); 

     foreach ($items->Items->Item->Offers as $offer) { 

      if ($offer->Offer->OfferAttributes->Condition == 'New') { 
       $IsEligibleForPrime = $offer->Offer->OfferListing->IsEligibleForPrime; 
      } 
     } 
     $this->eligible = $IsEligibleForPrime == 1 ? 1 : 0; 
    } 
} 

И действительно, вы должны указать

"ResponseGroup" => "Medium,Offers" 

в getItemByAsin функции от AmazonProductAPI класса

+0

Thx для быстрого ответа, к сожалению '' IsEligibleForPrime' остается пустым. Я попытался отобразить '$ items-> Offers-> TotalOffers', но даже это пусто (по какой-либо причине). Поэтому я проверяю «responseGroup» в классе, но кажется правильным, так как я использую «ResponseGroup» => «Medium, Offers». Что я делаю неправильно? – Paul

+1

См. Мое редактирование. Я переписал все – Zl3n