ソフト開発 プログラミング 楽天RMS

RMS R-CabinetAPI(CabinetAPI)cabinet.file.insertで画像登録するPHPサンプル解説・使い方

更新日:

RMS APIは楽天市場の店舗管理、商品管理の自動化を実現するAPIです。あまりサンプルがまとまっていないので、APIの全パターンを下記記事でまとめています。

楽天 RMS APIのPHPサンプル集・使い方 ほぼ全パターン(随時更新中)

今回は画像登録関連のR-CabinetAPI(CabinetAPI)、cabinet.file.insertを解説します。

繰り返しになりますがAPIを使用できる環境がない場合は、下記から出店申請をしてください。たけーってなった場合は既に店舗アカウントを持っている人に頼んでテスト店舗を使用させてもらうのも手です。

APIを使用するための出店手続き・資料請求はこちら

サンプルソースコードは下記です。

cabinet.file.insertのサンプルソースコード
 



 
 

cabinet.file.insertの概要

cabinet.file.insertのRESTのエンドポイントにMultipartでバイナリをPOSTすると、RMS上に画像を新規登録できます。

登録できる設定項目例は下記です。

  • 画像の名前やパス
  • アップするR-Cabinetのフォルダ
  • 上書きするか否か
  • 画像のバイナリ (Multipart部分)

マルチパートでバイナリを送信する部分が厄介なので詳しく説明していきます。

 

POST リクエスト例

バイナリの部分は省略していますがこんな感じです。

リクエストheaderにbase64エンコードしたサービスシークレットとライセンスキーを付与してPOSTして認証を行います。

また、リクエストheaderにmultipartのバウンダリー文字列を入れ、その後の各リクエストの間に挿入していきます。こんな感じ。

 

headerのContent-Lengthにはこのリクエスト全部のサイズがバイト数で入ります。めんどーい!

 

ソースコード解説

要は前述のxmlを作ってPOSTできればいいわけです。やることは下記。

  • POSTリクエストする画像ファイルクラスオブジェクト、画像設定のクラスオブジェクト作成し、設定する
  • 画像設定のクラスオブジェクトをxmlに変換
  • 送信したい画像ファイルオブジェクトをバイナリに変換してxmlに追記
  • file_get_contentsでPOST

です。

POSTリクエストする画像ファイルクラスオブジェクト、画像設定のクラスオブジェクトを作成して設定

まずは送信する画像ファイルの情報を格納する、画像ファイルクラスオブジェクトを作成します。

class/cabinetUploadFileInfo.php

コンストラクタでファイルのパスを渡すと、内部でそのファイルパスとMIME-TYPE、拡張子を判別して保持するようにします。後のMultiPartによる送信部分で使います。

クラスが作れたらとりあえずセット。

insertCabinetFile.php

 

次に画像設定のクラスオブジェクトを作成します。R-Cabinet上での登録名やどのフォルダにアップするかを記述する部分です。

class/cabinetFileSetting.php

 

$folderIdを0に設定するとR-Cabinetのルートにある「基本フォルダ」配下にアップされます。基本フォルダ配下はフォルダが作成できないため、自由度を高めるのであれば作成した別のフォルダを指定することをオススメします。ちなみにフォルダの作成も、cabinet.folder.insert APIを使って自由に作成できます。

cabinet.folder.insert APIの使い方はこちら(準備中)

 

$folderIdはフォルダを作成する度に割り当てられる一意な数値です。フォルダIDはcabinet.folders.get APIで取得できます。

cabinet.folders.get APIの使い方はこちら(準備中)

特定のフォルダ配下にアップしたければ、cabinet.folders.get APIでフォルダIDを調べた上でアップするという流れになります。

 

クラスを作ったら、画像設定の値を入れていき、POSTする関数cabinetFileInsertにぶち込みます。

insertCabinetFile.php

 

 

画像設定のクラスオブジェクトをxmlに変換

item.insertの回で使ったのと同じのを使います。

RMS 商品API(ItemAPI)item.insertのPHPサンプル解説・使い方

やることとしては、

  • クラスオブジェクトを一旦配列に変換
  • リクエストのXMLをarray情報から作成する
    • arrayをforeachで回し、keyとvalueを元にSimpleXMLElementに追加していく

前述のCabinetFileSettingのオブジェクトをxmlの下記の部分に変換していく作業です。

 

実装としてはitem.insertの時とほぼ同じです。

 

これで$reqXmlには下記のxmlの文字列が入りました。

 

送信したい画像ファイルオブジェクトをバイナリに変換してxmlに追記

次はいよいよ下記のxml部分を作ります。

 

まずは画像ファイルのオブジェクトである$cabinetUploadFileInfoをkeyを’file’という名前のarrayにして、httpPostという自作関数にぶち込みます。

$reqXmlもarrayにしてkeyは’xml’に指定てしてぶち込みます。

$cabinetUploadFileInfoの情報はxmlの下記部分(name=”file”の部分)に使用され、

 

$reqXmlの情報はxmlの下記部分(name=”xml”の部分)に使用されます。

 

次は↑の情報からxmlを作ってfile_get_contentsで送る部分です。

 

色々やってますが、要は最初に紹介した下記xmlを作成しています。

ちなみにバイナリ部分はソースのどこで指定してんのってなると思うんですが、ここです。

file_get_contentsにアップロードしたいファイルのパスを渡してやるとバイナリになって返却されます。それをxmlの文字列に .= で連結してるってわけ。何もテクいことはしておらず文字列連結のオンパレードでxml文字列を作っています。

 

度重なる文字列連結でhttpヘッダー($header)とそのbody($data)ができたら、あとは$optionsというarrayに諸々ぶち込みます。で、file_get_contentsに$optionsをいれて叩くと、作成したhttpヘッダ、body($optionsのcontentの部分)の内容でPOSTしてくれます。

 

レスポンスとして下記のようなのが返ってきたら成功です。

 

FileIdの部分で、アップしたファイル固有のIDが返却されます。このIDを元にcabinet.files.search APIを叩くと、画像のURLや名前が取得できます。item.insert APIで商品を登録するときに画像のURLを指定する必要があるのですが、FileIdさえあればアップした画像を指定することが可能になります。

cabinet.files.search APIの解説はこちら(準備中)

item.insert APIの解説はこちら

RMS 商品API(ItemAPI)item.insertのPHPサンプル解説・使い方

 

まとめ

今回は画像登録API、cabinet.file.insertを解説しました。画像のアップロードは必須な上に手間がかかるめんどくさい作業です。本APIを使うことでこの作業を自動化し、商品の仕入れや受注配送の作業にもっと時間が避けるようになれば、売り上げを加速することが可能になるかもしれません。

今回作成したサンプルソースコードは下記です。

cabinet.file.insertのサンプルソースコード

 

その他のAPIについても下記から辿れるようになってますので、他のAPIも知りたいという方はチェックしてみてくださいね。

楽天 RMS APIのPHPサンプル集・使い方 ほぼ全パターン(随時更新中)

 

APIを使用するための出店手続き・資料請求はこちら

 
 



 

  • この記事の筆者

Y平

札幌のWebデザイナー。オモコロライターも。Webデザイン、Web集客、コーダーできます。最近7年勤めた富士通を退職しました。1歳の娘いるのに年収下がっちゃう。仕事ください。

-ソフト開発, プログラミング, 楽天RMS

Copyright© バイラシー , 2018 All Rights Reserved.