API・SDK

【PHP】eBayのAPIを使って出品されている商品を取得するまでの備忘録

APIの画像

こんにちは!プログラミングを使えば、ほとんどの作業は外注化しなくても自動化できると考えている、ゆーたろうです。

今回は、私が今実際に取り組んでいるeBayに関わるお話しです。

今の時代、ほとんどのサイトではAPIと言われる、開発者向けのツールが公開されています。

AmazonもYahooショッピングもAPIを公開していて、eBayも例外なくAPIを公開しています。

スクレイピングでも収集はできますが、規約上の問題や挙動の不安定さが払拭できない、動作が遅いなどがありますので、APIが公開されているサイトでは、APIを使うのが定石になるかと思います。

さて、そんな中、私は以前から自動化したいなと思っていたeBayのデータ収集(出品リストや販売履歴などの情報)を行うべく、ついにAPIを使ったプログラミングに着手しました。

実は、ひと月前にもチャレンジしたことがあったのですが、時間がなかったり、よく理解できなかったりしたので、一度、挫折してました(笑)

ゴールデンウィークのようにまとまった休みがあると、一気に事を済ませたい私にとってはありがたいです。

そもそもeBayは英語サイトのため、いろいろ設定などで詰まった部分があったので、自身の備忘録もかねて、紹介していきます。

※前提条件

APIについて

今回は、「eBay Developers program」に登録していることを前提としています。

こちらですね。
私はここから「Sell APIs」に進んでユーザ登録をしました。

してない方は、APIで使用するキーが発行されますので、登録必須です!

※Sell APIsで登録すると、販売者用のeBayアカウントが必要になりますので、もし取得するだけならBuy APIsでもいいのかなとは思います。

私はセラーなのでSell APIsで登録しています。
Sell APIsなら、商品の収集や出品も可能です。

開発環境について

私の環境は以下で開発を行いました。

プログラムは、1つバージョンが異なるだけでも、使える関数が増減したり、サーバーが動かなかったりするので、ご注意くださいね。

不安な方は下記の環境を揃えるか、精通している方はご自身の環境に置き換えて読み進めていただければと思います。

サーバー:ロリポップ スタンダードプラン以上

→SSH接続をして、サーバーにcomposerをインストールするため。

PHP:バージョン 7以上

→今回使用するSDKで使うプログラムが、PHPバージョン7以上でしか使えないため。

その他、あると便利なツール

  • SSH接続ツール:WinSCP
  • ファイル転送ツール:FFFTP

なお、今回大変参考にさせていただいたサイトはこちらです。

tohokuaiki様、貴重な情報ありがとうございます<(_ _)>

David T. Sadler様、SDKを開発いただきありがとうございます!

これらを参考にした中で、補足というか個人的に備忘録しておきたい内容を、この記事でまとめています。

ではさっそくAPIを使っていきまっしょう!

SDK開発者が作った手順を見る

※最後まで行って思ったのが、開発者が作った手順の通りに行えば、行けることに気付きました。

やってるときは暗中模索でいろんなサイトをあさりましたが、結論としては、開発者の手順+ちょこちょこググるだけで十分でした。

開発者の手順はこちらです。

https://github.com/davidtsadler/ebay-sdk-examples/blob/master/README.md

もちろん英語ですので、分からなければGoogle翻訳です。

そのままベタ打ちで大丈夫です。

プロジェクトをダウンロードする

では1つ目の手順「プロジェクトをダウンロード」をします。

GITに記載されているパス「https://github.com/davidtsadler/ebay-sdk-examples.git」から、ZIP形式でダウンロードします。
その際、下記図の左上の赤丸が「davidtsadler/ebay-sdk-examples」となっていることを確認してください。

イーベイSDKのダウンロード

「davidtsadler/ebay-sdk-php」ではないですので、ご注意ください。

ダウンロードしたら、解凍して、FFFTPなどを使い、サーバ側にアップロードします。

ファイル構成としては、このようになります。

/web
┗ebay-sdk-examples
 ┣account
 ┣analysts
 ┣ :
 ┗configuration.php.example

ebay-sdk-examplesディレクトリからComposerをインストールする

ひと月前の私ではcomposer?なにそれ。どうやってロリポップにどうやっていれるの?状態だったけど、あれからサーバ関連の勉強をしてたので、すぐイメージつきました。

やはり勉強の継続は大事ですね。

やることは「SSHツールを使って、composerのコマンドを打ち、対象のディレクトリにインストールする」です。

とはいっても、今私が契約しているロリポップサーバは「ライトプラン」であり、SSH接続はできないので、スタンダードプランにあげる必要があります。

ですが1度UP GRADEしてしまうと戻せない=毎月のレンタル費が嵩むので、スタンダードプランで新しいアカウントを作り、10日間無料で借りることにしました。

これなら、ちょうどいまGW中で1日中フルで時間使えますし、ちゃんとAPIが動くのかを最初は試したいので、打って付けです。

動くのを確認出来たら、本サーバをアップグレードすればいいし、もし10日間で完成できず、動かせなくても、契約を閉じれば余分なお金は嵩まないという狙いです。

インストール用のコマンドを打つため、サーバにSSH接続をする

スタンダードプランのサーバを用意出来たら、SSH接続をしていきます。

使い勝手もFFFTPと似ている「WinSCP」を使います。

設定方法はロリポップ公式サイト(WinSCPのSSH設定について)に載っています。

インストールするためのコマンドは、READMEに記述ありますね。

1. From the `ebay-sdk-examples` directory install Composer with:

“`
curl -sS https://getcomposer.org/installer | php
“`

参考までに、勉強のために使ったサイトを紹介しておきます。こちらが分かりやすかったです。

初心者も迷わずできる! lolipopにlaravelをcomposerインストール

間違いやすいですが、冒頭についている「$」マークは不要なので、入れないように。

composerのコマンド

いきました!
試しに、インストールできたことを確認するために、バージョン情報を出力してみます。

composerバージョン

いいですね!ちゃんと出力されました=インストールOKです。

依存関係をインストールする

では次。3つ目の手順です。

1. Install the dependencies.

“`
php composer.phar install
“`

「依存関係をインストールする」といわれてもなんのこっちゃ分かりませんよね^^;

とりあえずこれまでと同じように「php composer.phar install」をコマンドに打ち込みます。

するとこのようなエラーが発生しました。

依存関係のインストールエラー

和訳すると以下になります。

パッケージ情報を含むComposerリポジトリの読み込み
ロックファイルからの依存関係(require-devを含む)のインストール
要件をインストール可能なパッケージのセットに解決できませんでした。

問題1
-twig / twig v2.4.8のインストール要求-> twig / twig [v2.4.8]で対応可能。
-twig / twig v2.4.8にはphp ^ 7.0が必要です->お使いのPHPバージョン(5.5.35)はその要件を満たしていません。
問題2
-twig / twig v2.4.8にはphp ^ 7.0が必要です->お使いのPHPバージョン(5.5.35)はその要件を満たしていません。
-slim / twig-view 2.4.0には、twig / twigが必要です^ 1.18 | ^ 2.0-> twig / twig [v2.4.8]で充足可能。
-slim / twig-view 2.4.0のインストール要求-> slim / twig-view [2.4.0]で対応可能。

「twig/twig v2.4.8 requires php ^7.0 -> your PHP version (5.5.35) does not satisfy that requirement.」を検索欄に入れてググったところ、以下のサイトが見つかりました。

Twigのインストール

Twigエラー解決

ほおほお。PHP5になっているが、本当はPHP7以上でコマンドを実行する必要がある。ということのようです。

※ここでピンときました。
以前、PHPのexec()を使って非同期を実行させようとした際、

$cmd = “/usr/local/php/7.3/bin/php xxxxx.php > /dev/null &”;
exec($cmd);

としたことを思い出しました。
つまり、「php」ではなく「/usr・・・/php」にする必要があるんだなと気づきました。

念のために、実際にサーバ側にphp7があるかどうかも確認しておきます。

phpバージョン

WinSCPで上の階層に上がっていき、「usr」ディレクトリの「local」を確認すると、ありました!

私の借りたサーバではphp7.3と7.4がありましたが、中身を確認したところ「php7.4」の中身よりも「php7.3」の方が更新日時が最新だったので、php7.3を指定することにしました。

「/usr/local/php/7.3/bin/php composer.phar install」

これで通りました。

composerインストールOK
composerインストールOK-コンソール

エラーとなっていますが、「戻り値0」となっており、また、「Generating autoload files」となっているので、これで成功しています。

試しに、composerをインストールしたディレクトリ(=今回は「…/web/ebay-sdk-examples」を見てみるとインストールできた証拠である「vendor」が作成されています。
ちゃんとインストールできてます。

composerインストール後に生成されたvendorフォルダ

念のため、「guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware) Generating autoload files」で検索して、インストールされたらvendorができることを確認しました。

composerでインストールしたlaravelの配置場所は?

これで、各種インストールは完了です。

ちなみにここまでで約1時間経ってました。個人的に以前よりも問題解決時間が短くなっているので、何気にうれしいですね。

実行前に、各種設定する

この時点ではまだ完全には動きませんので、プログラムの設定をしていく必要があります。

configuration.php.exampleをconfiguration.phpに名前を変更する

eBaySDKのコンフィグファイルのリネーム

これをしていないと以下のようなエラーが発生します。

簡単に言えば、「configuration.phpファイルが指定の場所にありませんよ」と言っているわけです。

PHP Warning: require(/home/users/2/main.jp-test0503/web/ebay-sdk-examples/finding/../configuration.php): failed to open stream: No such file or directory in /home/users/2/main.jp-test0503/web/ebay-sdk-examples/finding/01-simple-keywords-search.php on line 29

ソースコードで言うと、この部分でエラーです。

設定ファイル未設定時のエラー

この名称変更(=リネーム)を見逃しており、すべて完了して「いざ、実行!」となった時にこのエラーが出て、すこし躓いたので、忘れずにリネームしておきましょう。

リネームは、configration.phpがあるディレクトリ上で「cp configuration.php.example configuration.php」コマンドを打ってもいいですし、FFFTPやWinSCP、レンタルサーバー上で名前変更しても問題ありません。お好きな方法でリネームください。

APIキーを設定する

以下の、eBay DEvelopers program サイトのAPIキー設定画面にアクセスします。

https://developer.ebay.com/my/keys

eBayAPIのアプリケーションキー

これら6つの文字列を、configration.phpに設定していきます。

eBayAPIのアプリケーションキーをconfigration.phpに設定した画面

次に、上のプログラムの「P」と「Q」の部分を設定していきます。

「Sandbox」でも「Production」でもどちらでもいいので「User Tokens|Notifications|API Reports」のページへ行きます。

eBayAPIのアプリケーションキーの認証key

このような画面になるので、

  • Auth’nAuth
  • OAuth (new security)

を押して、トークンを生成していきます。

なお、Auth’nAuthで生成したトークンの文字列は、上のプログラムで言うところの「P」に設定し、OAuth (new security)は「Q」に設定します。

最後に「R」の部分は、こちらです。

eBayAPIのリターンネーム

ここの「R」の部分を、configuration.phpのruNameの場所に転記します。

これで、configuration.phpの設定は以上です。

「/usr/local/php/7.3/bin/php finding/01-simple-keywords-search.php」コマンドで、いざ、実行!

さあやってきました、待ちに待ったこの瞬間です!

遂に実行の時がやってきました。

eBaySDKの実行コマンド

とりあえず、READMEに書かれているものを実行してみます。

「find」と書かれているので、商品リサーチでしょうかね。

コマンドは「php finding/01-simple-keywords-search.php」です。

例に倣って、コマンドプロンプトを開きます。

eBaySDKの実行コマンド

「実行」ボタンを押すと・・・・・・・。

・・・・・・・。

eBaySDKのfindプログラム―成功

やりました!!成功です!!!

試しに、ブラウザからでもアクセスしてみました。

eBaySDKのfindプログラム―ブラウザ実行ー成功

取得できてます!!

念のために取ってこれた商品IDの中から、1つ選択して、eBayサイトに検索を掛けてみます。

eBaySDK-取得成功確認

完璧ですね!

「(362222826329) The Marauder’s Map Hogwarts School of Witchcraft & Wizardry – Harry Potter, NEW!: USD 7.99」

の商品です!!

いやー、無事にできて何よりです。お疲れ様でした。

まとめ

完成までに、開始から約2時間半かかりましたが、無事にeBaySDKを自分の環境に実装することができました。

もしこれができなかったりしたら、クラウドワークスとかで依頼を掛けようかと思っていましたが、しなくてよくなりました^^

お金が浮きましたし、なにより技術知識が勉強になったので、また一つ資産が増えたのはとても有意義です。

あとは、収集したデータから売れ筋分析したり、出品したりなど、煮るなり約なり何でもできますね。

もし、これからeBaySDKを使おうと考えている方がいらっしゃれば、この記事が手助けになれば幸いです。

最後にですが、この素晴らしいSDKを作っていただいたDavid T. Sadler様に改めて感謝です。
ありがとうございます<(_ _)>