API・SDK

eBay APIのGetSellerListでUserIDが機能しないことが判明した

APIの画像

こんにちは!ゆーたろうです。

eBay API、捗っていますか?

今回は、私も今勉強中のeBay APIを使っていてわかったことがあったので、紹介していきます。

セラー出品情報を取得するGetSellerListのUserIDが無効になっていた

GetSellerListとは、指定したセラーの出品情報を取得してくるAPIです。

Trading APIの中にあるので、とてもよく使うAPIですね。

GetSellerList – API Reference – Trading API

そんなGetSellerListですが、なんと、UserIDが効かないようです。

サンプルプログラム

初めは、このGetSellerListの使い方が分からなかったので、海外サイトのこの記事を参考にリクエストXMLを作成しました。

Ebay API for listing one seller’s items – GetSellerList

<?xml version="1.0" encoding="utf-8"?>
<GetSellerListRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <RequesterCredentials>
    <eBayAuthToken>--Enter your AuthToken here--</eBayAuthToken>
  </RequesterCredentials>
  <ErrorLanguage>en_US</ErrorLanguage>
  <WarningLevel>High</WarningLevel>
  <StartTimeFrom>2013-06-01T21:59:59.005Z</StartTimeFrom> 
  <StartTimeTo>2013-09-26T21:59:59.005Z</StartTimeTo>
  <EndTimeFrom>2013-09-26</EndTimeFrom>
  <EndTimeTo>2013-11-26</EndTimeTo>
  <GranularityLevel>Coarse</GranularityLevel>
  <UserID>--Enter your seller's name here--</UserID>
  <Pagination>
    <EntriesPerPage>200</EntriesPerPage>
    <PageNumber>1</PageNumber>
  </Pagination>
  <OutputSelector>ItemArray.Item.ItemID</OutputSelector>
  <OutputSelector>ItemArray.Item.Quantity</OutputSelector>
  <OutputSelector>ItemArray.Item.Title</OutputSelector>
  <OutputSelector>ItemArray.Item.PrimaryCategory.CategoryID</OutputSelector>
  <OutputSelector>ItemArray.Item.PrimaryCategory.CategoryName</OutputSelector>
</GetSellerListRequest>

これを参考に、微修正してひとまず取得できるものには仕上げることができました。この時は、自分のUserIDを指定しています。

自分の出品情報が取れたので、「もしかしたらUserIDを変えればライバルセラーの情報も取得できるのでは!?」とその後、発想して、ライバルセラーのUserIDにしてみたのです。

しかし、取得された情報は自分のセール情報でした。

UserIDが効かないと何がいけないの?

ライバルセラーの情報は、このAPIでは取ってこれないということなのです。

私はてっきり、UserIDには、自分以外の名前も設定できると思ってましたが、どうやら違うようです。

ようやく、セラーの出品情報をすべて一括で取ってこられるAPIに出会えたと思ったのに、また振り出しではないですか・・・。

UserIDが効かない理由は、仕様変更によるものだった

検索ワード:GetSellerListRequest UserID で調べてみました。

これまた海外の記事ですが、読んで解決しました。

GetSellerList Returning My Own Items With Another Userid Specified

The UserID field is being removed from the request for the GetSellerList and GetSellerEvents calls. The calls will return seller listing information for sellers based on the token only. Users will no longer be able to pull listing information for a specific seller without first having their permission grant and token. If UserID is included in the request for these calls, it will be ignored by the system.

日本語訳

GetSellerListおよびGetSellerEvents呼び出しのリクエストからUserIDフィールドが削除されています。呼び出しは、トークンのみに基づいて販売者の販売者リスト情報を返します。ユーザーは、最初に許可とトークンを取得しないと、特定の販売者のリスト情報を取得できなくなります。これらの呼び出しの要求にUserIDが含まれている場合、システムによって無視されます。

とのことでした。なるほどですね。

2020年5月21日現在、GetSellerListはAuth’nAuthキーを設定したセラーのアイテムが返されるようになっていました。

また、上記記事では、

  • findItemsIneBayStoresのModTimeFromを使う方法
  • 欲しいセラーに問いかけて、Auth’nAuthを教えて貰う

しか、GetSellerListでの他セラーの出品情報取得はできない、と書かれていました。

まぁ普通に考えて、自分の出品情報を教える人はいないので、前者のAPIを使う方法に集約されますよね。

現在のバージョンでは、確かに仕様が変わっていた

このことが判明した後、eBay APIマニュアルを確認すると、確かに変わってました。

<?xml version="1.0" encoding="utf-8"?>
<GetSellerListRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <!-- Call-specific Input Fields -->
  <AdminEndedItemsOnly> boolean </AdminEndedItemsOnly>
  <CategoryID> int </CategoryID>
  <EndTimeFrom> dateTime </EndTimeFrom>
  <EndTimeTo> dateTime </EndTimeTo>
  <GranularityLevel> GranularityLevelCodeType </GranularityLevel>
  <IncludeVariations> boolean </IncludeVariations>
  <IncludeWatchCount> boolean </IncludeWatchCount>
  <MotorsDealerUsers> UserIDArrayType
    <UserID> UserIDType (string) </UserID>
    <!-- ... more UserID values allowed here ... -->
  </MotorsDealerUsers>
  <Pagination> PaginationType
    <EntriesPerPage> int </EntriesPerPage>
    <PageNumber> int </PageNumber>

「MotorsDealerUsers」のUserIDになってますね。

Unique eBay user ID for the user. Applies to eBay Motors Pro applications only.

「eBay Motors Proアプリケーションにのみ適用されます」とのことでした。

ちなみに、このMotersというのは、調べたら車の販売ディーラーのようです。

MotorsDealerUsers(UserIDArrayType0..1 ]
特別なメトリックのセットを要求できるMotors Dealerセラーのリストを指定します。
eBay Motors Proアプリケーションにのみ適用されます。MotorsDealerUsersを使用する呼び出しについては、フィールドインデックスを参照してください。

GetSellerListRequestType(AbstractRequestType)

つまり、ebayで車を販売しているユーザのIDしかGetSellerListでは受け付けていないようでした。

まとめ

プログラムを参考にしたものが2019年3月で、たった約1年前のものでしたが、仕様がすでに変わっていて、使えないフィールドであることが分かりました。

一番最初から、eBay APIマニュアルを読んでいれば、躓くこともなかったのですが、いかんせん、この時はまだマニュアルの見方もわからなければ、APIのリクエストの出し方も分からなかったので、しょうがないです。

でも、ちゃんと最後まで理解することはできたので、良しとしましょう。

もしこれからeBay含めAPIを使って開発をする方がいれば、ぜひ、最新のものかをよく検証しながら進めていってください。