Wowma!APIの更新スクリプトがエラーを発した理由
- 2020.04.09
- php備忘録
- API, ECシステム, Laravel, MySQL, Nullチェック, PHP, Wowma!, エラー改善, スクリプト備忘録, テーブル設計, ネットショップ, 仕様, 自作システム
Wowma!APIの更新スクリプトがエラーを発した理由
ザクッとした【出品/更新/削除】のツールを作ってからあまり動かしていなかったのですが、Wowma!を主力にしている方からシステムについてのお問合せを頂き、久しぶりに動作チェックをしていました。
そこで見つけたのが、出品済みの確認に利用していた【在庫情報取得API】のレスポンスのタイムラグです。
array(1=>[‘searchResult’][‘itemInfo’][‘publicStartDate’])は新規追加後すぐに登録されない
まず、私の行っていた実装を解説します。
- システムから出品の指示
- Wowma!商品情報内に同一商品の出品(itemCodeが同一の商品)があるか確認
- ない場合は新規出品として registerItemInfo 用プロセスにを稼働
- ある場合は商品情報更新として updateItemInfo 用プロセスを稼働
- 出品や更新に必要な情報を合成
- XMLに成型
- registerItemInfo 又は updateItemInfo に接続してInsertまたはUPDate
2項目目で存在確認をしてます。
更新の実験だったので、商品追加直後に更新プロセスを動かすべく操作したのですが、まさかのエラー。
理由は [‘searchResult’][‘itemInfo’][‘publicStartDate’]が存在しない。
なるほど、この項目は商品を追加した日時のタイムスタンプではないのね。
勝手に日付があるだろうと思ってシステムに記載する様仕込んでいたのでエラーが出てしまったようです。
解決はこの値を『あったら記録』にすればよい
販売開始日って楽天市場だととても重要な項目なので、保存したいという癖がついてます。
Wowma!での重要性はまだつかんでいませんが、いずれSEO的に見えてくるものがあるかもしれません。
と言う事で、記録はする方向で解決策を探れば、自ずと「あったら記録でいんじゃね?」となるわけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#出品確認のプロセス結果を$valueで受けたとして if(empty($value[1]['searchResult']['itemInfo']['publicStartDate'])){ $TimeStamp = NULL; }else{ $TimeStamp = strtotime($value[1]['searchResult']['itemInfo']['publicStartDate']); } #DBに保存 itemurls::find($url->id); $item->sales_date = $RegistDate; $item->review_count = $value[1]['searchResult']['itemInfo']['favoriteCount']; $item->review_check_date = today(); $item->save(); |
こんな感じ。
更新エラーの拾い方
楽天市場とWowma!、Amazonの一番の違いは商品URLの付け方です。
楽天市場は店舗に採番の権利があります。指定文字数であれば自由につけられます。
Amazonの場合は商品毎にURLが発行され、このコードをASINと呼びます。その為、JAN検索でASINを取得するので出品前から番号を登録する事が出来ます。
Wowma!の場合は店舗の商品毎に番号(lotNumber )が発行され、APIでの更新や削除指示等はこの番号が必要になります。つまりは、APIであれこれするシステム的には記録必須の番号です。
しかし、Wowma!の場合出品指示の段階では楽天市場の商品URLに当たる【 lotNumber 】は空白になります。
と言う事で、Wowma!の新規出品でのエラーの拾い方と【 lotNumber 】の受け取りは次のようになります。
[‘result’][‘status’] =1の時は異常終了。= 0 の時は正常終了なので lotNumber が返っている。
【 lotNumber 】はWowma!への商品登録が正しく行われた段階でinsertのレスポンスとして返されます。
1 2 3 4 5 6 7 8 9 10 11 |
array ( 'result' => array ( 'status' => '0', ), 'registerResult' => array ( 'lotNumber' => '440834472', 'itemCode' => '100', ), ) |
こんな感じです。一方でエラーがある場合は次のように返ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
array ( 'result' => array ( 'status' => '1', ), 'registerResult' => array ( 'itemCode' => '100', 'error' => array ( 'code' => 'PME0153', 'message' => '商品画像順序の入力に誤りがあります。', ), ), ) |
Wowma!APIによる出品管理の進捗状況
一部のパーツを除いた基礎部分【商品名/販売情報/売価】なんかは問題なく処理できています。
細かいパーツで各モール共通利用できる場所(ポイントとか販売開始日時とか)は基礎部分が出来れば実装は簡単だと思い取り合えず放置。値を渡してゴニョゴニョして(XMLに)変身すればいいだけですからね。
ただ、癖のあり過ぎる項目をどうしようかなぁと悩んでます。
【越境EC連携ステータス】とか【購入オプション(手数料型)】とかここら辺…。
本格的に入れ込もうとするとDBの大工事が待ってそうだし、そうなると初期設定で登録しなきゃいけない値がまた増えて結局煩雑になっていくと「何でもできるけど面倒臭い」になりそうでね。
基礎部分の残りは一斉更新
シングル更新では問題なく動作してますが、一斉更新となるとちょっと課題が出てきます。
Sleep時間どれくらいが最適??
Sleepしないと多分怒られるし、Sleepしすぎると処理時間が掛かり過ぎるし。
この辺を探りながらですね。
まとめ
まぁいい感じまで来てるので、使いたい方はお気軽にお声がけください。
初期はバグだしも兼ねてしまうので、割引してご提供させて頂きます。
という事で、よろしくです。
-
前の記事
Laravel:送信メールをshop.rakuten.co.jpに切り替える方法 2020.03.31
-
次の記事
画面サイズに合わせて最適な場所で長い文字を省略表示するOverflow 2020.04.09
コメントを残す