リクエストAPI/食品情報提供
名称 | 食品情報提供 |
---|---|
APIバージョン | 2 |
認証タイプ | アプリケーションキーペア |
URL | https://(サーバー名)/requests/api2/(accode)/food/regist/ |
Method | POST |
食品情報を提供する。提供された情報は食品登録候補として保存される。食品として登録された場合にはメール等で通知される。
画像情報がない場合、リクエストボディにJSONデータをセットして送信する。
画像情報がある場合、リクエストボディにマルチパート形式でJSONデータ及び画像データをセットして送信する。 画像情報がない場合でもマルチパート形式での送信は利用可能(updataのみ送信する)。
name | value(partの中身) |
updata | 登録するJSONデータ |
(JSONデータ内で指定) | 画像データ |
登録する情報は以下の通り。
食品リクエストの場合
修正リクエストの場合
共通
本APIは、以下のレート制限を行う。 直近1分以内に登録数5以内、且つ直近60分以内に登録数30以内。
リクエスト本体 { 'type' : 'request', 'ver' : 1, 'appkey' : (割り当てられたアプリケーションキー), 'nonce' : (毎回異なる16バイト以上のランダムに生成されたASCII文字列), 'secret' : (アプリケーションシークレット+nonceのSHA256値), 'objects' : [ (登録する食品/修正リクエストオブジェクト), (登録する食品/修正リクエストオブジェクト), ], 'dryrun' : (テストの時true,実際には登録されない) }
key | 必須 | 項目 | 内容 |
type | 必須 | タイプ | 固定値 request |
ver | 必須 | バージョン | 固定値 1 |
appkey | 必須 | アプリケーションキー | アクセスを識別する、割り当てられたアプリケーションキー |
nonce | 必須 | ナンス | ランダム文字列。半角英数で構成し、16バイト以上、アクセス毎に異なること |
secret | 必須 | 認証文字列 | アプリケーションシークレット+nonceのSHA256値 |
objects | 必須 | 食品リクエストオブジェクト | 登録する食品リクエストオブジェクトの配列 |
dryrun | 任意 | テスト実行 | trueを指定すると実際には登録されない |
食品リクエストオブジェクト { 'type' : 'food', 'ver' : 1, 'name' : (食品名・商品名), 'maker' : (メーカー名), 'optinfo' : (備考), 'pictids' : [ (画像のformid), (画像のformid) ], 'callback' : (コールバックオブジェクト), 'state' : (任意の文字列), }
修正リクエストオブジェクト { 'type' : 'correct', 'ver' : 1, 'objectid' : (修正対象の食品オブジェクトID), 'maker' : (メーカー名等), 'optinfo' : (修正に関する情報), 'pictids' : [ (画像のformid), (画像のformid) ], 'callback' : (コールバックオブジェクト), 'state' : (任意の文字列), }
key | 制限 | 項目 | 内容 |
type | 必須 | タイプ | 固定値 食品リクエストオブジェクト=food 修正リクエストオブジェクト=correct |
ver | 必須 | バージョン | 固定値 1 |
name | 食品リクエスト時必須/最大256byte | 食品名・商品名 | 食品の名前や商品の名前等 |
objectid | 修正リクエスト時必須/最大32byte | オブジェクトID | 修正対象の食品オブジェクトID |
maker | 任意/最大256byte | メーカー名 | 商品等の場合、製造メーカー、店名など |
optinfo | 任意/最大1024byte | 備考 | 参考となる情報など |
pictids | 任意 | 画像 | 参考となる画像(jpeg形式、1枚あたり最大2Mbyte、1オブジェクトに対して最大2枚まで)のformidの配列 |
callback | 任意 | コールバック情報 | リクエスト処理後にコールバックするための情報を示すコールバックオブジェクト |
state | 任意/最大512byte | ステート情報 | オブジェクトに付属する任意の文字列 |
コールバックオブジェクト メールの場合 { 'type' : 'mail', 'ver' : 1, 'mailaddr' : (メールアドレス), } HTTPの場合 { 'type' : 'url', 'ver' : 1, 'url' : (URL), 'method' : (GET/POST), 'body' : (コールバックのリクエストボディ) }
key | 必須 | 項目 | 内容 |
type | 必須 | タイプ | メール=mail/HTTP=url |
ver | 必須 | バージョン | 固定値 1 |
mailaddr | type=mailの時必須 | メールアドレス | 送付先メールアドレス,宛先のドメイン制限を行う場合がある |
url | type=urlの時必須/最大4096byte | URL | アクセス先URL,httpsであること,ドメイン制限を行う場合がある |
method | 任意 | httpメソッド | コールバックアクセスのメソッド GET/POST |
body | 任意/最大512byte | リクエストボディ | コールバックアクセスのリクエストボディ |
1回のリクエスト処理について、登録するオブジェクトの最大数は5まで。 1回のリクエスト処理について、リクエストボディの最大サイズは20Mまで。
コールバックオブジェクトが設定されたリクエストが処理された場合、指定に従ってコールバック処理を行う。 コールバックには、以下の情報を含む。
name | 内容 |
action | 処理の種別。registed=食品が登録された/rejected=食品は登録されなかった/test=コールバックのテスト |
regid | 結果オブジェクトに含まれていた登録結果ID |
state | 食品リクエストオブジェクトにstateが存在した場合その値 |
指定されたメールアドレスにメールが送信される。 メールの本文に、結果オブジェクトのregid及び食品リクエストオブジェクトのstateを含むjsonが記述される。
メールコールバック本文 { 'type' : 'callback', 'ver' : 1, 'action' : registed/rejected/test, 'regid' : (登録結果ID), 'state' : (食品リクエストボディオブジェクトにstateが存在すればその値) }
指定されたURLにアクセスを行う。 methodがGET,POSTどちらであっても、アクセス先URLに querystring として以下が追加される。
action=(処理内容)®id=(登録結果ID)&state=(食品リクエストボディオブジェクトにstateが存在すればその値)
methodがPOSTの場合、リクエストボディは設定された内容となる。
{ "type": "request", "ver": 1, "appkey": "f37dX1DZdSAV3s9v", "nonce": "6b785fce3a643ec4", "secret": "ef7128c7001e63b1f89e3f9317b173dd567b0fead891e196127eef62c9f1fe19", "objects": [ { "type": "food", "ver": 1, "name": "\u590f\u91ce\u83dc\u306e\u30ab\u30ec\u30fc\u30aa\u30e0\u305d\u3070", "maker": "IMD\u98df\u5802", "optinfo": "\u671f\u9593\u9650\u5b9a\u30e1\u30cb\u30e5\u30fc\u3067\u3059\u3002", "pictids": [ "UploadPictFile000" ], "callback": { "type": "url", "ver": 1, "url": "https:\/\/callback.my.server\/?test=1234\u0026code=5678", "method": "POST", "body": "request=body\u0026command=hogehoge" }, "state": "mystate_1234567890" } ] }
成功時、レスポンスコードは200を返す。 失敗時、レスポンスコードは400を返す。 レスポンスはjson形式である。
{ 'result' : true/false, 'reason' : (resultがfalseの時: 失敗事由), 'registed' : [ (結果オブジェクト), (結果オブジェクト), ]
結果オブジェクト { 'type' : 'registration', 'ver' : 1, 'result' : true/false, 'reason' : (resultがfalseの時: 失敗事由), 'regid' : (登録結果ID), 'state' : (登録するオブジェクトにstateが存在すればその値) }
key | 項目 | 内容 |
type | タイプ | 固定値 registration |
ver | バージョン | 固定値 1 |
regid | 登録結果ID | result=trueの時、登録されたオブジェクトを識別するID |
state | ステート情報 | 登録するオブジェクトに設定されているstate値 |
result | 処理結果 | 成功時true |
reason | エラー情報 | result=falseの時、エラー情報を格納 |
{ "result": true, "registed": [ { "type": "registration", "ver": 1, "regid":"20230819154859-JVyL2OxHIhFcKX7fjOPIpf2UfEv0e7kP4FNgajAyLGxKDlRBf", "state": "mystate_1234567890", "result": true } ] }
ダウンロード:sample_eapirequest_food.php
#!/usr/bin/env php <?php /** * モバイルダイエットAPI ver.2 クライアントサンプル * * リクエストAPI/食品情報提供 写真なし * * @package MobadaiSample * @author west@imd.co.jp * @version 1.0 */ require_once 'HTTP/Request2.php'; $server = '(サーバー名)'; $accode = '(アクセスコード)'; $appkey = '(アプリケーションキー)'; $appsec = '(アプリケーションシークレット)'; $nonce = bin2hex(openssl_random_pseudo_bytes(8)); // POST先URLを決定 $url = 'https://'.$server.'/requests/api2/'.$accode.'/food/regist/'; // アップロードするリクエスト本体を作成 $updata = array( // 'dryrun' => true, 'type' => 'request', 'ver' => 1, 'appkey' => $appkey, 'nonce' => $nonce, 'secret' => hash('sha256',$appsec.$nonce), 'objects' => array( array( 'type' => 'food', 'ver' => 1, 'name' => '夏野菜のカレーオムそば', 'maker' => 'アイエムデイ食堂', 'optinfo' => '期間限定メニューです。', 'callback' => array( 'type' => 'mail', 'ver' => 1, 'mailaddr' => 'notif@mobadai.jp', ), 'state' => 'mystate_1234567890', ), ), ); echo "Request URL=".$url."\n"; echo "DATA=".json_encode($updata)."\n"; // アップロード実行 $request = new HTTP_Request2(); $request->setConfig( array( 'timeout' => 300, 'ssl_verify_host' => false, 'ssl_verify_peer' => false, ) ); try { $request->setUrl($url); $request->setMethod(HTTP_Request2::METHOD_POST); $request->setBody(json_encode($updata)); $response = $request->send(); } catch (Exception $e) { echo "--- Exception\n"; echo $e->getMessage(); echo "\n"; exit(0); } // 結果出力 $json_resp = json_decode($response->getBody(),true); if( $response->getStatus() != 200 ){ echo "HTTP Response Status Error ".$response->getStatus()."\n"; } var_dump($json_resp); echo "\n"; exit(0); ?>
ダウンロード:sample_eapirequest_foodpict.php
#!/usr/bin/env php <?php /** * モバイルダイエットAPI ver.2 クライアントサンプル * * リクエストAPI/食品情報提供 写真あり * * @package MobadaiSample * @author west@imd.co.jp * @version 1.0 */ require_once 'HTTP/Request2.php'; $server = '(サーバー名)'; $accode = '(アクセスコード)'; $appkey = '(アプリケーションキー)'; $appsec = '(アプリケーションシークレット)'; $nonce = bin2hex(openssl_random_pseudo_bytes(8)); // POST先URLを決定 $url = 'https://'.$server.'/requests/api2/'.$accode.'/food/regist/'; // アップロードするリクエスト本体を作成 $updata = array( // 'dryrun' => true, 'type' => 'request', 'ver' => 1, 'appkey' => $appkey, 'nonce' => $nonce, 'secret' => hash('sha256',$appsec.$nonce), 'objects' => array( array( 'type' => 'food', 'ver' => 1, 'name' => '夏野菜のカレーオムそば', 'maker' => 'アイエムデイ食堂', 'optinfo' => '期間限定メニューです。', 'pictids' => array( 'UploadPictFile001', 'UploadPictFile002', ), 'callback' => array( 'type' => 'url', 'ver' => 1, 'url' => 'https://callback.my.server/?test=1234&code=5678', 'method' => 'POST', 'body' => 'request=body&command=hogehoge', ), 'state' => 'mystate_1234567890', ), ), ); $pictfile001 = '/somewhere/file/uploadpict1.jpg'; $pictfile002 = '/somewhere/file/uploadpict2.jpg'; echo "Request URL=".$url."\n"; echo "DATA=".json_encode($updata)."\n"; echo "PICT1=".$pictfile001."\n"; echo "PICT2=".$pictfile002."\n"; // アップロード実行 $request = new HTTP_Request2(); $request->setConfig( array( 'timeout' => 300, 'ssl_verify_host' => false, 'ssl_verify_peer' => false, ) ); try { $request->setUrl($url); $request->setMethod(HTTP_Request2::METHOD_POST); $request->addPostParameter('updata',json_encode($updata)); $request->addUpload('UploadPictFile001',$pictfile001); $request->addUpload('UploadPictFile002',$pictfile002); $response = $request->send(); } catch (Exception $e) { echo "--- Exception\n"; echo $e->getMessage(); echo "\n"; exit(0); } // 結果出力 $json_resp = json_decode($response->getBody(),true); if( $response->getStatus() != 200 ){ echo "HTTP Response Status Error ".$response->getStatus()."\n"; } var_dump($json_resp); echo "\n"; exit(0); ?>
2023/08/10 作成
このドキュメントのバージョン情報
Version | 2 |
Revision | 1 |
Editor | IMD |