【问题标题】:Amazon Product Advertising API Reading reading first Offer亚马逊产品广告 API 阅读阅读优先优惠
【发布时间】:2016-07-31 19:42:22
【问题描述】:

我使用Amazon Product Advertising API PHP Class from Codediesel

我使用函数getItemByAsin 并将ResponseGroup 更改为Offers,因为我想以最便宜的价格获得IsEligibleForPrime(请参阅Amazon JSON response

由于offer标签内的响应中有超过1个offer,我不知道如何阅读第一个。

这是响应的样子:

<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>

如何从第一个 &lt;Offer&gt;&lt;/Offer&gt; 中读取 IsEligibleForPrime

【问题讨论】:

  • 您要订购哪个元素?最便宜的还是第一个报价?
  • 我想获取条件为“新”的第一个(最便宜的)offer 的 IsEligibleForPrime 的内容。
  • 好吧,我们试试看

标签: php json amazon-product-api


【解决方案1】:

假设您在命名空间环境中工作

首先声明你的命名空间

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

【讨论】:

  • 感谢您的快速回复,不幸的是$IsEligibleForPrime 保持空白。我试图显示$items-&gt;Offers-&gt;TotalOffers,但即使是空的(无论出于何种原因)。因此,我在课堂上检查了responseGroup,但似乎是正确的,因为我使用了"ResponseGroup" =&gt; "Medium,Offers"。我做错了什么?
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2012-03-07
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多