ebayのGetMyeBaySellingで一部情報がロストする場合の対処法

未分類

一部エラーが発生

  var url = "https://api.ebay.com/ws/api.dll";

  var xmlRequest = '<?xml version="1.0" encoding="utf-8"?>' +
    '<GetMyeBaySellingRequest xmlns="urn:ebay:apis:eBLBaseComponents">' +
    '<RequesterCredentials><eBayAuthToken>' + userToken + '</eBayAuthToken></RequesterCredentials>' +
    '<ActiveList>' +
    '<Include>true</Include>' +
    '<Sort>TimeLeft</Sort>' +
    '<Pagination>' +
    '<EntriesPerPage>200</EntriesPerPage>' +
    '<PageNumber>1</PageNumber>' +
    '</Pagination>' +
    '</ActiveList>' +
    '</GetMyeBaySellingRequest>';

  var options = {
    'method': 'post',
    'contentType': 'text/xml',
    'payload': xmlRequest,
    'headers': {
      'X-EBAY-API-SITEID': '0',
      'X-EBAY-API-DEV-NAME': X_EBAY_API_DEV_NAME,
      'X-EBAY-API-APP-NAME': X_EBAY_API_APP_NAME,
      'X-EBAY-API-CERT-NAME': X_EBAY_API_CERT_NAME,
      'X-EBAY-API-COMPATIBILITY-LEVEL': '967',
      'X-EBAY-API-CALL-NAME': 'GetMyeBaySelling',
    }
  };

上記でコールすると・・・

<Errors><ShortMessage>Data is truncated.</ShortMessage><LongMessage>Partial data or invalid summary data is returned due to system limit. Please narrow your requested data and try again.</LongMessage><ErrorCode>21366</ErrorCode><SeverityCode>Warning</SeverityCode><ErrorClassification>RequestError</ErrorClassification></Errors>

「システムの制限により、部分的なデータまたは無効な概要データが返されます。要求したデータを絞り込んで再試行してください。」

と出てしまう。

これは、商品点数が25000点を超える場合に発生する。

GetMyeBaySellingではなく、「GetSellerList」のAPIを使うことで回避できます。

コードは

var url = "https://api.ebay.com/ws/api.dll";

    var xmlRequest = '<?xml version="1.0" encoding="utf-8"?>' +
      '<GetSellerListRequest xmlns="urn:ebay:apis:eBLBaseComponents">' +
      '<RequesterCredentials>' +
      '<eBayAuthToken>' + userToken + '</eBayAuthToken>' + // eBay Auth Token をここに挿入します
      '</RequesterCredentials>' +
      '<EndTimeFrom>' + currentDateFormatted + '</EndTimeFrom>' +
      '<EndTimeTo>' + threeMonthsLaterFormatted + '</EndTimeTo>' +
      '<Pagination>' +
      '<EntriesPerPage>200</EntriesPerPage>' +
      '<PageNumber>' + page + '</PageNumber>' +
      '</Pagination>' +
      '<IncludeWatchCount>true</IncludeWatchCount>' +
      '<DetailLevel>ReturnAll</DetailLevel>' +  // DetailLevelをReturnAllに設定
      '<OutputSelector>ItemArray.Item.ItemID</OutputSelector>' + //アイテムID
      '<OutputSelector>ItemArray.Item.Title</OutputSelector>' + //タイトル
      '<OutputSelector>ItemArray.Item.ListingDetails.StartTime</OutputSelector>' + //開始時刻
      '<OutputSelector>ItemArray.Item.HitCount</OutputSelector>' + //PageView
      '<OutputSelector>ItemArray.Item.SellingStatus.QuantitySold</OutputSelector>' + //総販売数
      '<OutputSelector>ItemArray.Item.WatchCount</OutputSelector>' + //WatchCount
      '<OutputSelector>ItemArray.Item.SKU</OutputSelector>' + //SKU
      '<OutputSelector>ItemArray.Item.Quantity</OutputSelector>' + //在庫数
      '<OutputSelector>ItemArray.Item.BuyItNowPrice</OutputSelector>' + //USDの判別
      '<OutputSelector>ItemArray.Item.ProductListingDetails.UPC</OutputSelector>' + //USDの判別
      '<OutputSelector>ItemArray.Item.UPC</OutputSelector>' + //USDの判別
      '<OutputSelector>PaginationResult.TotalNumberOfPages</OutputSelector>' +
      '<OutputSelector>ItemArray.Item.Country</OutputSelector>' +
      '<OutputSelector>ItemArray.Item.SellingStatus.CurrentPrice</OutputSelector>' +
      '</GetSellerListRequest>';

    var options = {
      'method': 'post',
      'contentType': 'text/xml',
      'payload': xmlRequest,
      'headers': {
        'X-EBAY-API-SITEID': '0',
        'X-EBAY-API-DEV-NAME': X_EBAY_API_DEV_NAME,
        'X-EBAY-API-APP-NAME': X_EBAY_API_APP_NAME,
        'X-EBAY-API-CERT-NAME': X_EBAY_API_CERT_NAME,
        'X-EBAY-API-COMPATIBILITY-LEVEL': '1271',
        'X-EBAY-API-CALL-NAME': 'GetSellerList',
      }
    };

OutputSelectorで絞り込みを行うとAPIを節約できるそうです。

なお、200点までなのでなんやかんやで、かなり185件前後回さないといけない。

注意点としては、15秒で300回まわすとアプリがブロックされるようなので、注意が必要。

また、別記事で「GetSellerList」のUPC、EANなどが取得できるか問題について言及するので、見てください。

コメント

タイトルとURLをコピーしました