アマゾンセラーセントラルで商品を一括登録したい
ヘッドライン
以前から商品の一括登録はやっていましたが、毎回、元データを手動で、価格設定も毎回計算しながらやっていました。
登録するためのデータを作るという意味ではそこまで時間がかかるわけでもなかったのですが、今回ほぼ全自動で一括登録用データを生成するプログラムをPHPで作ってみました。
なぜPHPだったのか
これは、私が最も経験が深く、ある程度理解ができている言語だから。
本来ならVBなどで整理できるプログラムを作って、登録まで自動化してしまうのもアリですが、なにぶん、言語の経験が本当に浅いもので、できるだけ、知識不足による問題を起こさない言語としてPHPを選びました。
一括登録データ生成システムを製作するに至る背景
今回生成システムを作ろうと思ったきっかけは、まず、登録できるだけのデータを作る分には大した手間もないのですが、それでもいくつかやらなければいけないことがありました。
- タイトルの命名ルールが厳密化(命名ルールに従ったタイトルづけ&必要事項の追記の必要性)
- 商品のカテゴリによる手数料の違いを販売価格へ反映(手数料が安いものは販売価格も安く、高いものは、赤字にならない程度の価格設定)
- オプション情報の記載
- 色などの記載
など、元データをある程度加工しないことには展開できないデータが出てきていました。
ぎりぎりまで、元データ(CSVで提供)されるものをエクセルの関数だけで処理していましたが、私自身がそこまでエクセルに詳しくないことと、はっきり言ってしまうと、キリがない(現状で5000元データほどあり、毎日50~100の在庫切れによるリストからの削除と、毎日50~100程度の新商品の追加がある)ので、詳細の展開を外注さんにお任せし詳細データを作っていました。
実際に詳細を展開した商品は、アマゾン内で検索されやすく、イコール売れる可能性が高いことから、定期的にお願いできればベストだろうと判断していました。
大体、1か月で差し引き1000件ほどの新商品が展開されるので、1か月に1回程度お願いするのであれば価格帯的にも割に合うしそのつもりでいました。
しかしながら、1か月に1回ということは、新展開後1か月経過する手前は、大体1000件ほどのデータが在庫切れで消えていることになります。
1/5商品がなくなり、、突然1/5ほどの穴埋めに新データが展開されるという流れです。
また、せっかくの新商品なのに、1か月後にしかお目見えできないことにもつながります。
だからと言って、毎日、50~100件単位でお願いしていると、小口単価なので外注費がばかにならなくなってしまいます。
そこで、ある程度、自分で展開できれば大体OKということにして、何とかならないものだろうかと、以前から思っていました。
ちょっと面倒だなと思いつつも、これで、ある程度いつでも好きなだけ商品データが生成できるようになればこんな楽なことはないということで思い切って作ることにしました。
生成の反対の削除から作ることに
もし、私が間違ったデータを生成するようなプログラムを作ってしまった場合、削除しなければなりません。
アマゾンには、一括ですべて削除できるボタンがありますが、展開している商品データの中には、この一括登録ではなく手動で追加した商品もたくさんあります。
それらも消えることにつながりますので、できれば消す必要のあるものだけを削除できればいいと。なので、SKUリストがあればそのリストをベースに、オプション用SKUなども一括して生成するプログラムをまず作ろうと考えました。
当店のSKUルール
当店のSKU設定にはルールがあります。
まず、問屋ですぐ検索できるように基本は問屋が設定しているSKU(商品ID)を基本的にはSKUとして利用しています。
しかし、当店では、該当商品、該当商品に付随するオプション商品を組み入れた別商品も作っています。
要は、Aの商品と、Aの商品とオプション品(化粧箱など)は別の商品として登録しています。
実に、11万点に及ぶ商品が展開されています。
なぜ、このような商品展開をしているのかといいますと、一緒に買ってもらえば一つのダンボールに同梱します。
よって、その分送料を浮かせることができますので、バラバラのものを組み合わせるより、最初からパックになっているほうがお安く提供できるからです。
おかげさまでお客様にご理解いただいているのでしょうか。約半分は収納ケース付や、専用工具付き商品が売れております。残りの半分はオプション品がない商品です。
そのオプション品が同梱される商品も、メインの商品のSKUは同じものですが、オプション品によって接頭辞をつけるルールで展開しています。
たとえばケース付商品ならcase-××といったようにです。
この接頭辞がつくオプションが役20種類あります。
手動で一括削除ファイルを生成していたときは、在庫切れ取り下げ商品のリストから商品IDを呼び出し削除ファイルを作り、それから接頭辞を頭につけ多ファイルを20個作って各々のファイルをアマゾンセラーセントラルからアップロードしていました。
また、在庫切れリストは問屋さんが蓄積式で展開しており、創業から今日にいたるまでの削除リスト(再出品のものは削除される)を展開していたので、現在で50,000件近くのリストを20個に分けて展開していました。
実に1日100万リストです。
もちろんその中には、すでに公開していない(昨日の削除処理で昨日分までは削除されているはず)ので、実質50件から100件の新削除リスト、オプション分20通りで、どんなに多くても2000~3000件程度なのです。
しかし、手動でやっている場合、最も効率のいい方法が先述の通りリスト一式を20回接頭辞を付け替えながらアップする方法でした。
このやり方では、この先新しいオプションが1件増えるたびに、削除リスト約50,000件が増えていくことになり、こちら側が整理がつかなくなりそうな不安もありました。
現状は私が一人で商品展開、仕入れから顧客対応、経理までやっていますが、近く新人さんに業務を移管しようと思ったら、今のやり方では削除処理すらミスが起きそうです。
なので、2クリック程度で処理が完了できるように作る必要があり、そうすることでオプション品の展開が一気にできるようになります。
削除プログラムはシンプル
PHPで削除用プログラムを作る際に、必要だと感じたものは、実行の際に、年月日を入力してもらい、その年月日以降の日付で登録された削除リストだけを抜き出し書き出すことで全件数を減らすこと、オプション接頭辞は自動で付与し1ファイルにすべての削除対象リストが生成されるようにしました。
これにより、
- PHPプログラムへアクセス(日付指定でアクセス)
- 削除リストダウンロード
- 削除リストをアマゾン指定の一括登録用ファイルに貼り付け、アップロード
の3手順で削除処理が完了します。我ながらシンプルで手早く確実なプログラムをかけました。
オプション品が今後増えた場合、プログラムファイル内の接頭辞リストを追加するだけで、次から新接頭辞も追加されて書き出されます。
必要のなくなったオプション接頭辞はリストから消すだけで次からは書き出されなくなります。
最新の在庫切れリストは問屋がネットで公開しているので、自動的にその公開データから展開しますので個別にダウンロードしたり何かに追加したりする必要がありません。
日付に関しては、入力した年月日以降、入力年月日から未来にかけて、登録されているデータで回すようにしました。
これは、土・日など、2日ほど仮にサボってしまった時でも、サボった日より先のデータを一括して書き出してくれるようにすることで、昨日やったかどうか怪しいときは、昨日の日付で実行してしまえば昨日と今日の分が1ファイルになって出てくれる仕組みにしました。
削除が安全で手早く少なくともこちら側の処理として安定・一定の確実なデータの書き出しができるようになったことで、オプションを20種類展開できるようになったのでした。
手動では先ほど言っていたように、接頭辞の付け替えを手動で20回、毎日5万件のデータで回すのは実は骨が折れるのです。
収拾がつかなくなり、結果的にお客様に迷惑をかけることになりそうだからです。
それまではオプションは5つほどでしたが、これが完成し、確実なデータ生成ができることがわかって20個に増やしました。
新商品の一括登録プログラムの生成
いよいよメインの新規一括登録のプログラムの生成ですが、こちらも削除同様、まずオプション品のついていない一番シンプルな商品データを作ります。
この中で特に重要なのはアマゾンが徴収していく販売手数料が商品のジャンルによりほんの少しだけ違うところです。
2つの手数料があり、一つはアマゾンでは一般的な15%、もう一つは特別な6%です。9%の違いは、商品価格に反映させれば10%以上の値段差になることにつながります。
私が販売する商品販売単価は、現在1万円を超える程度ですので、この手数料差を販売価格に反映させれば1000円近い値段の差が生まれます。
絶対にこの差を反映させなければなりません。
そこで、問屋から納入されるデータから15%になる商品と6%になる商品を判断し販売価格設定の公式を振り分けるわけですが、この処理はエクセルでも十分可能です。IF文を使えばすぐさまにでもできることです。
しかし、だれでも人の子です。ちょっとした凡ミスをしてしまうことがあります。
数字の計算ですから、間違うと0円になってしまう可能性もあるのです。
特に、エクセルで、データを生成するたびに式を作っているようではいつかミスも起きます。
また、数日触らないと、係数を忘れてしまい、価格の公式にまで差が出ることだってあります。
これも削除同様、別の人に仕事を移管できるような仕事になっていません。
データ生成の際にはこれ以外にもたくさんの問題があります。
削除はそのリストに該当するSKUは、削除してしまうわけですから、生み出すものがないのですが、新商品をアップするというのは人の目に触れ、買っていただくかもしれないものを展開するわけです。
こちらのスキル不足や忘れていたといって許させる範囲と許されない範囲があります。
たとえば、レディース・メンズなどの性別・年齢の仕分けや、代引き可・不可の意思設定、商品発送までの目安時間など商品、価格、年齢・性別によって違うのです。
もちろん、冷静で慌てず確実に毎回チェックしながらやっていけば防げるだろうミスではありますが、やはり、毎日毎日やっていると、抜けたりミスったりすることが多いのです。
ほぼ毎日、何かを忘れて再設定しなければいけなくなります。
また、先述のオプション品も展開しようとすると、100商品新商品が出たということは実に2000点になって展開されるのです。
これは、もはや手動でやろうと思うのなら専属の人に依頼するか、データ生成に責任を持てる方に外注をかけるしかないということなのです。
しかし、利益率や現状の販売数を考えると、外注をかけていては利益がほぼないに等しいので、自動的に一律のルールで展開できればよしとするとして、一回の処理実行ですべてのオプション品追加商品も生成されるようプログラムを作りました。
エクセルより経験値があるのでPHPで柔軟な処理が可能だった
私にとっては、エクセルより経験が多いPHPでの開発でしたので、ある意味、エクセルの関数を探すより手軽で、基本的な処理を複合させることでたいして難しいこともなくプログラム化できました。
それにもまして、1つのオプション付き商品を追加した場合に、全商品から一つのオプションデータだけを生成する亜種プログラムは1時間程度で生成できました。
これにより、ミス・忘れ・同じことの繰り返しを、すべて防いだプログラムが作れました。
新商品データを生成するときは、
- 展開したいデータリストをサーバーへアップ
- PHPプログラム実行
- 生成されたデータをアマゾン指定の一括登録ファイルへデータを貼り付け
- 一括登録実行
削除と違い、生成プログラムはリストデータは自分でアップロードしなければいけない仕様にしました。
理由は、禁止ブランドや、ブランド名の振り直しなど削除と違いどうしても目視や多少の修正を絶対に必要とするので、元データを目視で確認させるように作りました。
あとは、ダウンロードしたリストファイルをコピー貼り付けして一括登録なので、手間で説明すると1/30ほどの手間になりました。
視野が大きく広がるのがプログラム
今回、このプログラムを生成したことにより、いったんすべての展開データを削除しそれから一括登録しました。
なぜこうしたのかというと、結局プログラムで生成したデータなので、いくつかピックアップし、間違いがないことが確認できれば、それは結果的にすべての生成データが信頼できることにつながるので、すべて自信のあるデータにしたかったからです。
また、中途半端に展開していたオプションデータもすべての商品に対して該当するオプション商品はすべてアップした。
それによりトータル10万件となった。
そして、本日、新しいオプションが提供され始めたので、そのオプション付随商品をすべての商品に対して生成。これによって11万件に達した。
削除と新商品を追加は1日1回2つで5分の仕事
削除は大体帰宅前に本日の在庫切れ情報が更新されるので帰る直前に削除処理を行う。
新商品は翌日の朝一番に追加するようにしている。
これができるようになってから、商品購入件数が伸びてきた。
新しい商品と、在庫切れがリアルタイムに更新されるからではないかと思っている。
プログラムのいいところを存分に発揮できたいいスクリプトを作った。
と、言っても、たった数百行のソースコードだ。
なんでもごついDBがガリガリ動けばいいものだとは限らないのだ。
もし、これがほしいという方がいたら、おそらく、数十万、数百万の値でも買いたいのではないだろうか。
もし自分がプログラムを組めない人間で、このプログラムであれば100~200万は払ってもいいと感じるかなと思いました。