YahooショッピングAPIの商品登録APIがひどすぎる

この記事は1分で読めます。

自分が作ったt4traw/yahoo_store_apiというYahoo!ショッピング プロフェッショナル出店ストア向けAPIを叩くgemがあるのですが、READMEにも書いてある通り、APIの仕様で更新したいカラムのみ送信して更新が できません

なので、サンプルのように

data = client.get_item(sku_code).all
data["name"] = 'edit item'
data["caption"] = 'edit caption'
client.edit_item(data)

みたいな事をしないと更新ができません。

ここで問題なのが、出力フォーマットと入力フォーマットが違うケースです。具体的には「path_list」や「relevant_links」です。

この2つは、普通にclient.get_item(sku_code)で取得すると配列で返ってきます。なので、それを適切な仕様に従った文字列に変換しないといけません。また、pathに関しては出力がpath_listというカラム名なのに、入力はpathです。

client.get_item(sku_code).path_list
# "path_list"=>["カテゴリーA:あいうえお", "カテゴリーB:かきくけこ"]

client.get_item(sku_code).relevant_links
# "relevant_links"=>["foo,bar,baz"]

data["path"] = item.path_list.join("\n")
data["relevant_links"] = item.relevant_links&.join(',')

で、更に今日見つけたのが「発送日情報管理番号」です。

これが、出力時はlead_time_in_stockなのに、入力はlead_time_instockなのです。

data["lead_time_instock"] = item.lead_time_in_stock

なにも更新しないのに、こんな無駄な1行を挟まないといけない。これをしないと発送日情報管理番号をnilで送信したのと同じになってしまい、デフォ(空白)で上書きしてしまうという問題が発生します。

で、2018年2月からこの項目は必須化されているので、nilで送信する(=空白になっている)と、ブラウザやその他のcsvで更新ができないという問題に繋がります。

この仕様、なんとかなりませんか?pathはまあ分かります。できればpath_listに配列で送信してもよしなに処理してほしい感はありますが。lead_time_in_stockとlead_time_instockはちょっと理解できない。

この辺もgemで吸収できるようにしておいた方がいいのだろうか?っても普通に使おうとしたら問題が起きる事がわかっているのだから、警告もしくは変換するかどうか。うーん 😖💦

t4traw

いつか学んだ知識や技術で人の役にたつ事を目標に日々勉強しています。音楽とウイスキーとRubyが好きです。最近はキャンプと釣り(ライトソルトルアー)も好きです。

コメントください🙋

わかりにくい所や、共感していただける事がありましたら、お気軽にコメントください✋ ブログのコメントでもTwitterなど、どこでも反応します👍

comments powered by Disqus
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora