ネクストエンジンAPIの速度を検証

以前の投稿で商品写真をネクストエンジンの商品マスタと紐付けて楽天に自動的にアップロードするネットショップの業務効率化ツールを紹介した。

この業務効率化ツールでは、写真のファイル名と商品マスタの内容を照合するために、ネクストエンジンからマスタを取得する必要がある。その速度を検証してみた。

(今回は、業務効率化を実現するためのプログラムの実装に際しての純技術的な話です。)

解説

ネットショップの受注/在庫管理業務を効率化するクラウドサービスであるネクストエンジン。そのAPIを使うと、商品マスタや在庫・受注データを自社業務効率化ツールに取得して、独自の分析や様々な業務の自動化が可能になる。

HTTPS通信を使ってJSON形式でデータを取得する。しかし自社業務効率化ツールの開発に際して高度な技術はいらない。サーバ間通信のロジックやJSONの理解は必要ない。

SDKを使うと非常に簡単に開発できるのだ。
(と私は思っている。いくつか注意点をクリアできれば、、、)

商品マスタを全件取得

計測に使用したソースを(抜粋して)掲載する。(かなりテキトーであるがご容赦いただきたい)

require_once('./neApiClient.php') ;
$nextengine = new neApiClient(CLIENT_ID, CLIENT_SECRET, $redirect_uri) ;
$query_array = array();
$query_array['fields'] = 'goods_id,goods_representation_id,goods_name,goods_foreign_name,goods_type_id,goods_type_name,goods_merchandise_id,goods_merchandise_name,goods_forwarding_method_id,goods_forwarding_method_name,goods_status_id,goods_status_name,goods_delivery_id,goods_delivery_name,goods_supplier_id,goods_jan_code,goods_maker_name,goods_maker_kana,goods_maker_address,goods_maker_zip_code,goods_model_number,goods_color,goods_mall_category,goods_shop_category,goods_cost_price,goods_display_price,goods_selling_price,goods_foreign_selling_price,goods_wholesale_retail_ratio,goods_weight,goods_width,goods_length,goods_height,goods_release_date,goods_first_time_sold_date,goods_last_time_sold_date,goods_first_time_supplied_date,goods_last_time_supplied_date,goods_stock_constant,goods_order_point,goods_lot,goods_publication_date,goods_stock_management_flag,goods_note,goods_visible_flag,goods_tag,goods_location,goods_delivery_mail_flag,goods_delivery_mail_maximum_quality,goods_gift_ok_flg,goods_size,goods_maker_model_number,goods_stock_alert_mail_threshold,goods_wholesale_mortgage_threshold,goods_shipping_base_id,goods_mail_tag_id,goods_1_item,goods_2_item,goods_3_item,goods_4_item,goods_5_item,goods_6_item,goods_7_item,goods_8_item,goods_9_item,goods_10_item,goods_11_item,goods_12_item,goods_13_item,goods_14_item,goods_15_item,goods_16_item,goods_17_item,goods_18_item,goods_19_item,goods_20_item,goods_1_select_id,goods_1_select_name,goods_2_select_id,goods_2_select_name,goods_3_select_id,goods_3_select_name,goods_4_select_id,goods_4_select_name,goods_5_select_id,goods_5_select_name,goods_6_select_id,goods_6_select_name,goods_7_select_id,goods_7_select_name,goods_8_select_id,goods_8_select_name,goods_9_select_id,goods_9_select_name,goods_10_select_id,goods_10_select_name,goods_publication_pic_id,goods_publication_pic_name,goods_stock_wholesale_quantity,goods_deleted_flag,goods_creation_date,goods_last_modified_date,goods_last_modified_null_safe_date,goods_creator_id,goods_creator_name,goods_last_modified_by_id,goods_last_modified_by_null_safe_id,goods_last_modified_by_name,goods_last_modified_by_null_safe_name';
$query_array['offset'] = 0;
$query_array['limit'] = 10000;
$api_url = '/api_v1_master_goods/search';
print '<div>'.$api_url.' all fields<br />'."n";
$tmp_datetime1 = date('Y/m/d H:i:s');
print 'start: '.$tmp_datetime1;
$api_return = $nextengine->apiExecute($api_url, $query_array) ;
if ($api_return['result'] != 'success'){
  print $api_return['result'];
}else{
  $count = $api_return['count'];
}
$tmp_datetime2 = date('Y/m/d H:i:s');
print ' end : '.$tmp_datetime2;
$timestamp1 = strtotime($tmp_datetime1);
$timestamp2 = strtotime($tmp_datetime2);
$seconddiff = abs($timestamp2 - $timestamp1);
print ' ( '.$seconddiff.' )</div>'."n";
ob_clean();
flush();

リファレンスには「上限値10000を超える検索が出来ません」とある。
6000件程度で全項目取得してみたところ、3秒であった。

$query_array['fields'] = 'goods_id';

同じく6000件程度で、取得項目を商品コードのみにすると、1秒。

$query_array['goods_id-in'] = 'コード1,コード2,コード3,コード4,コード5';

商品コードを指定して5件の全項目の場合、0.1秒。
(1秒未満の計測をする処理を消してしまっていたので、掲載したソースでは秒単位の計測だが。。)

予想していたよりも遥かに速い。

(写真ファイル名との照合には商品ページを使用する方が適切な場合もあるが、速度の検証という意図ではあまり重要ではないので、商品マスタの速度を計測した。)

MySQLに保存

取得したデータを、MySQLのISAMにINSERTしてみたところ、15秒かかった。かなり遅いサーバであるが。。

考察

リファレンスには「大量の検索結果を取得する場合、アクセスが集中する09:00~20:00の時間帯を避けてバックグラウンドで情報を取得することを推奨します」とあるが、大量とは受注や入出庫履歴(数十万件)のことかも?

仮に写真ファイル名(の.jpgを除いた部分)が商品コードだとして、照合してみて(マスタの方が)間違っていたら、マスタを修正して、再度、照合する。夜間バッチで取得する方式では役にたたない。

たかだか数千件のマスタに関しては、使用する項目や使用頻度によっては、都度、APIで取得した方が現実的である。


弊社は、業務改革・業務効率化のコンサルティングとシステム開発が本業ですが、ネクストエンジンパートナーに登録して、APIを使った独自システムの開発も請け負っています。