Laravel:NextEngineAPIで商品登録に失敗していた理由が判明
- 2021.01.21
- 4. 改善 php備忘録 ひとりごと
- &, API, Laravel, PHP, エスケープ処理, エラー改善, スクリプト備忘録, ネクストエンジン, ネットショップ, ひとりごと, 自作システム, 自動処理, 自動化
Laravel:NextEngineAPIで商品登録に失敗していた理由が判明
大枠では動いているのになぜか途中でレコード追加(商品追加)がされなくなるという事案が発生しました。
この理由を色々と推測し調整していたところ、やっと原因究明が出来たのでメモします。
ダブルクォーテーションで囲っても使ってはいけない文字がある
最初はどこでエラーが発生しているのかわからなかったのですが、推定と検証を繰り返し判明しました。
商品名に【&】が入っているとCSVのレコードとして認識しない
これが結構強情でクリアすることができない…。
文字列に&が入っている発生するエラー
アップロードするCSVデータに【&】が入っている場合、次のエラーが発生します。
■データが存在しない
1 2 3 4 5 6 7 8 9 |
[2021-01-21 12:35:18] production.INFO: array ( 'result' => 'error', 'code' => '006005', 'message' => 'データが1件も存在しません', 'access_token' => 'hogehoge', 'access_token_end_date' => '2021-01-22 11:40:02', 'refresh_token' => 'hogahoga', 'refresh_token_end_date' => '2021-01-24 11:40:02', ) |
APIのエラーなのでアップロードキューの履歴を見ても出てきません。
ちなみに、スペースが入っていると下のようなエラーになります。
■項目数が見出し行と不一致
1 2 3 4 5 6 7 8 9 |
[2021-01-21 12:43:17] production.INFO: array ( 'result' => 'error', 'code' => '006005', 'message' => '項目数が[5]個ですが、見出し行(1行目)の項目数は[9]個です。この行の項目数を見出し行の項目数と同じになるように修正してください。', 'access_token' => 'hogehoge', 'access_token_end_date' => '2021-01-22 11:40:02', 'refresh_token' => 'hogahoga', 'refresh_token_end_date' => '2021-01-24 11:40:02', ) |
このエラーについては別記事で書いたかもしれませんが、スペースはレコードの区切りとして認識されるようです。
ちなみに、スペースの場合はダブルクォーテーションで囲ってあげればエスケイプできます。
問題は【&】。こいつはダブルクォーテーションで囲ってもエスケイプできません。
回避しようとやってみたこと
次のことをやってみました。実際に記載した文字列で表記します。
- “GGジンジャー グレーター&マドラー ブラック”
- “GGジンジャー グレーター&マドラー ブラック”
- ’,,”GGジンジャー グレーター’.”&”.’マドラー ブラック”,,’
- GGジンジャー グレーター&マドラー ブラック
- “GGジンジャー グレーター&マドラー ブラック”
- “GGジンジャー グレーター&マドラー ブラック” ※2バイト文字の&
- “GGジンジャー グレーターマドラー ブラック”
このすべてのパターンで登録はできませんでした。
パターン4では【項目数が見出し行と不一致】が、その他では【データが存在しない】とのメッセージが出てきました。ちょっとまとめてみます。
- &[アンパサンド]は 半角/全角 ともに受け付けない
- スペースはレコードの区切りと解釈される
- &はダブルクォーテーションで囲ってもエスケープされない
- 文字そのものをエスケープし[&]としても[アパサンドがあるためNG]
- ダブルクォーテーション内で半角スペースのエスケープ文字[ ]を入れると[アパサンドがある]と認識されエラーになる
- ダブルクォーテーションを付けずにエスケープ文字[ ]を入れると半角スペースと認識する
- ダブルクォーテーションを付けずにエスケープ文字[&]を入れても受け付けてくれない
もうここまで【&】を拒否されると回避方法ありません。
商品名を読み込むときにReplaceするなりして他のみ時に変換するしか対策方法がないです。
ネクストエンジンで使えない文字
■システム全体で使えない文字
使用できない文字 | 例 | 置換え候補 |
---|---|---|
半角コロン | 9:00-10:00 | 【:】全角コロン /【_】アンダーバー |
半角ハテナ | レビューを書きますか? | 【?】全角ハテナ |
半角カンマ | ポイント10倍,送料無料 | 【、】全角カンマ / 【 】半角スペース |
半角カタカナ | クレジットカード | 全角カタカナ |
旧漢字 | 髙 﨑 | 常用漢字 |
全角チルダ | 9時~10時 | 【ー】全角バー / 【から】文字入れ ※『全角チルダの問題』は根深いのです…。 |
機種依存文字※ | ㈱ ㈲ ① Ⅰ I | 【(株) (有) 1】機種に依存しない文字 |
■APIによる商品登録で使えない文字(※上記全体で使えない文字以外で)
APIで使用不可な文字 | 例 | 不可な場所 |
---|---|---|
全角/半角アンド | フライパン&鍋セット | 場所を問わずレコード内に含まれているとNG ※エスケイプ不可 &でもダメ |
半角スペース | ハンガー ピンク | 場所を問わずレコード内に含まれているとNG ※エスケイプ可能。『” “』『 』が利用可 |
半角アンダーバー | at_multi-cbl | 商品コードで利用不可 (半角英数,ハイフンのみ許可) ※エスケイプ不可 &でもダメ |
これらの文字についてはWEB画面上からの登録はできました。
半角アンダーバーについては『半角英数と半角ハイフンのみ30文字まで』が原則で、WEB画面上から登録できる事の方がイレギュラーの様です。う~ん、今まで気づかずにイレギュラーを行ってたって事ね。
その他の文字としては、全角チルダがあることから考えて『全角チルダ問題』と同類の【Shift_jisで問題が起こる文字】は回避した方がいいかもしれません。まぁ何にせよ【使えない文字】はまだありそうな気が…。
まとめ
今回は自分の書いたルールのお陰で問題を起こしている(と思われる)レコードの特定が出来ました。
これ、違うルート(毎回レコードの並び順が変わるとか)で書いてたら特定にもう少し時間がかかったかもしれません。APIのエラーってキューに拾われないので問題のレコードがわからないんですよね。
何とか上手に特定する方法はないものだろうか…。
-
前の記事
Laravel:NextEngineAPIで登録在庫の数を社内販売管理の個数に変更する【その2】 2021.01.21
-
次の記事
楽天市場:商品情報の更新頻度って今でも超重要かもしれないと感じた件 2021.01.26
コメントを残す