FrontPage

リクエストAPI/食品情報提供

API情報

名称食品情報提供
APIバージョン2
認証タイプアプリケーションキーペア
URLhttps://(サーバー名)/requests/api2/(accode)/food/regist/
MethodPOST

概要

食品情報を提供する。提供された情報は食品登録候補として保存される。食品として登録された場合にはメール等で通知される。

使用方法

画像情報を含まない場合

画像情報がない場合、リクエストボディにJSONデータをセットして送信する。

画像情報を含む場合

画像情報がある場合、リクエストボディにマルチパート形式でJSONデータ及び画像データをセットして送信する。 画像情報がない場合でもマルチパート形式での送信は利用可能(updataのみ送信する)。

namevalue(partの中身)
updata登録するJSONデータ
(JSONデータ内で指定)画像データ

リクエスト

登録情報

登録する情報は以下の通り。

食品リクエストの場合

修正リクエストの場合

共通

レート制限

本APIは、以下のレート制限を行う。 直近1分以内に登録数5以内、且つ直近60分以内に登録数30以内。

JSONデータ書式

リクエスト本体
{
   '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
mailaddrtype=mailの時必須メールアドレス送付先メールアドレス,宛先のドメイン制限を行う場合がある
urltype=urlの時必須/最大4096byteURLアクセス先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によるコールバック

指定されたURLにアクセスを行う。 methodがGET,POSTどちらであっても、アクセス先URLに querystring として以下が追加される。

action=(処理内容)&regid=(登録結果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登録結果IDresult=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 作成

このドキュメントのバージョン情報

Version2
Revision1
EditorIMD

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-10-01 (日) 00:03:29