Laravel:NextEngineAPIで商品登録に失敗していた理由が判明

Laravel:NextEngineAPIで商品登録に失敗していた理由が判明

Laravel:NextEngineAPIで商品登録に失敗していた理由が判明

大枠では動いているのになぜか途中でレコード追加(商品追加)がされなくなるという事案が発生しました。
この理由を色々と推測し調整していたところ、やっと原因究明が出来たのでメモします。

ダブルクォーテーションで囲っても使ってはいけない文字がある

最初はどこでエラーが発生しているのかわからなかったのですが、推定と検証を繰り返し判明しました。

商品名に【&】が入っているとCSVのレコードとして認識しない

これが結構強情でクリアすることができない…。

文字列に&が入っている発生するエラー

アップロードするCSVデータに【&】が入っている場合、次のエラーが発生します。

■データが存在しない

APIのエラーなのでアップロードキューの履歴を見ても出てきません。

ちなみに、スペースが入っていると下のようなエラーになります。

■項目数が見出し行と不一致

このエラーについては別記事で書いたかもしれませんが、スペースはレコードの区切りとして認識されるようです。
ちなみに、スペースの場合はダブルクォーテーションで囲ってあげればエスケイプできます。

問題は【&】。こいつはダブルクォーテーションで囲ってもエスケイプできません。

回避しようとやってみたこと

次のことをやってみました。実際に記載した文字列で表記します。

  1. “GGジンジャー グレーター&マドラー ブラック”
  2. “GGジンジャー グレーター&マドラー ブラック”
  3. ’,,”GGジンジャー グレーター’.”&”.’マドラー ブラック”,,’
  4. GGジンジャー グレーター&マドラー ブラック
  5. “GGジンジャー グレーター&マドラー ブラック”
  6. “GGジンジャー グレーター&マドラー ブラック” ※2バイト文字の&
  7. “GGジンジャー グレーターマドラー ブラック”

このすべてのパターンで登録はできませんでした。

パターン4では【項目数が見出し行と不一致】が、その他では【データが存在しない】とのメッセージが出てきました。ちょっとまとめてみます。

  1. &[アンパサンド]は 半角/全角 ともに受け付けない
  2. スペースはレコードの区切りと解釈される
  3. &はダブルクォーテーションで囲ってもエスケープされない
  4. 文字そのものをエスケープし[&]としても[アパサンドがあるためNG]
  5. ダブルクォーテーション内で半角スペースのエスケープ文字[ ]を入れると[アパサンドがある]と認識されエラーになる
  6. ダブルクォーテーションを付けずにエスケープ文字[ ]を入れると半角スペースと認識する
  7. ダブルクォーテーションを付けずにエスケープ文字[&]を入れても受け付けてくれない

もうここまで【&】を拒否されると回避方法ありません。
商品名を読み込むときにReplaceするなりして他のみ時に変換するしか対策方法がないです。

ネクストエンジンで使えない文字

■システム全体で使えない文字

使用できない文字 置換え候補
半角コロン 9:00-10:00 【:】全角コロン /【_】アンダーバー
半角ハテナ レビューを書きますか? 【?】全角ハテナ
半角カンマ ポイント10倍,送料無料 【、】全角カンマ / 【 】半角スペース
半角カタカナ クレジットカード 全角カタカナ
旧漢字 髙 﨑 常用漢字
全角チルダ 9時~10時 【ー】全角バー / 【から】文字入れ
※『全角チルダの問題は根深いのです…。
機種依存文字 ㈱ ㈲ ① Ⅰ I 【(株) (有) 1】機種に依存しない文字

■APIによる商品登録で使えない文字(※上記全体で使えない文字以外で)

APIで使用不可な文字 不可な場所
全角/半角アンド フライパン&鍋セット 場所を問わずレコード内に含まれているとNG
※エスケイプ不可 &でもダメ
半角スペース ハンガー ピンク 場所を問わずレコード内に含まれているとNG
※エスケイプ可能。『” “』『 』が利用可
半角アンダーバー at_multi-cbl 商品コードで利用不可 (半角英数,ハイフンのみ許可)
※エスケイプ不可 &でもダメ

これらの文字についてはWEB画面上からの登録はできました。

半角アンダーバーについては『半角英数と半角ハイフンのみ30文字まで』が原則で、WEB画面上から登録できる事の方がイレギュラーの様です。う~ん、今まで気づかずにイレギュラーを行ってたって事ね。

その他の文字としては、全角チルダがあることから考えて『全角チルダ問題』と同類の【Shift_jisで問題が起こる文字】は回避した方がいいかもしれません。まぁ何にせよ【使えない文字】はまだありそうな気が…。

まとめ

今回は自分の書いたルールのお陰で問題を起こしている(と思われる)レコードの特定が出来ました。
これ、違うルート(毎回レコードの並び順が変わるとか)で書いてたら特定にもう少し時間がかかったかもしれません。APIのエラーってキューに拾われないので問題のレコードがわからないんですよね。
何とか上手に特定する方法はないものだろうか…。