開発情報・ナレッジ

投稿者:SPIRERS ナレッジ向上チーム 2021年12月16日 (木)

API / PHP を使ってレコード作成日時を表示

認証エリア内でレコード作成日時をさせるプログラムを作ってみました。
今後のアップデートで標準提供されるかもしれませんが、
現状の打開策として参考になれば。

事前に必要な情報

API を使用する際に必要な、API キー,アプリID,DB ID を取得します。
API キーの取得方法
アプリIDの取得方法
 ※ 「アプリID(appId)の確認」の箇所記載
DBID は、DBの基本設定で確認できます。

PHP

レコード作成日時をAPIで取得して、Thymeleaf に渡す処理です。

PHP 全体
<?php
//------------------------------
// 設定値用モジュール
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1/");
define("API_KEY", "");
define("APP_ID", "");
define("DB_ID", "");
// アプリロールで権限設定を反映させたい場合、設定してください。
// API の権限を全権限にしている場合は、設定不要です。
define("API_ROLE", "");

//------------------------------
// 下記から日付の表示形式を選択して、番号を設定してください。
// 1 : 'Y年m月d日 H時i分s秒',
// 2 : 'Y/n/d H:i:s',
// 3 : 'Y-n-d H:i:s',
// 4 : 'Y年m月d日',
// 5 : 'Y/m/d',
//------------------------------/
$dateType = 1;
// 日付の取得に失敗した際の文字を設定してください。
$errorText = "日付の取得に失敗しました。";
// タイムゾーンが違う場合、変更してください。
$timeZone = "Asia/Tokyo";


//------------------------------
//------------------------------
// 以下は変更不要
//------------------------------
// 日付取得処理
//------------------------------
$commonBase = CommonBase::getInstance();
// method : GET(レコード取得)
// https://docs.spiral-platform.com/api/#operation/getRecords
$data = $commonBase->apiGetSearchCurlAction("apps/".APP_ID."/dbs/".DB_ID."/records/".$SPIRAL->getAuthRecordByFieldId("_id"));

if(array_key_exists('status', $data)){
    if($data["status"] != 200){
        $SPIRAL->setTHValue("createdDate", $errorText);
    }
}else{
    $datetime = DateTime::createFromFormat(DateTime::ISO8601,$data["item"]["_createdAt"]);
    $datetime->setTimezone(new DateTimeZone($timeZone));
    $SPIRAL->setTHValue("createdDate", date_format($datetime,$commonBase->dateFormat($dateType)));
}

//------------------------------
// 共通用モジュール
//------------------------------

class CommonBase
{

	/**
	 * シングルトンインスタンス
	 * @var UserManager
	 */
	protected static $singleton;

	public function __construct()
	{
		if (self::$singleton) {
			throw new Exception('must be singleton');
		}
		self::$singleton = $this;
	}

	/**
	 * シングルトンインスタンスを返す
	 * @return UserManager
	 */
	public static function getInstance()
	{
		if (!self::$singleton) {
			return new CommonBase();
		} else {
			return self::$singleton;
		}
	}
	/**
	 * V2用 GETWhere Add API送信ロジック
	 * @return Result
	 */
	function apiGetSearchCurlAction($addUrlPass, $urlParm = null)
	{
		$header = array(
			"Authorization:Bearer " . API_KEY,
			"X-Spiral-Api-Version: 1.1",
			"X-Spiral-App-Role: " . API_ROLE,
		);

		// curl
		// echo API_URL . $addUrlPass . "?" . $urlParm;
		// echo "<br />";
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curl, CURLOPT_URL, API_URL . $addUrlPass . "?" . $urlParm);
		curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
		curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
		curl_setopt($curl, CURLOPT_TIMEOUT_MS, 10000);
		$response = curl_exec($curl);
        if(json_decode($response)){
            return json_decode($response, true);
        }else{
            return;
        }
	}
    /**
	 * 日付の形式
	 * @param type $string
	 * @return type array
	 */
	public function dateFormat($id)
	{
        $dateFormat = array(
            "1" => 'Y年m月d日 H時i分s秒',
            "2" => 'Y/n/d H:i:s',
            "3" => 'Y-n-d H:i:s',
            "4" => 'Y年m月d日',
            "5" => 'Y/n/d',
        );
		return $dateFormat[$id];
	}
    
}

実際に導入してもらう際に修正する箇所は下記になります。

PHP 変更箇所
//------------------------------
// 設定値用モジュール
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1/");
define("API_KEY", "");
define("APP_ID", "");
define("DB_ID", "");
// アプリロールで権限設定を反映させたい場合、設定してください。
// API の権限を全権限にしている場合は、設定不要です。
define("API_ROLE", "");

//------------------------------
// 下記から日付の表示形式を選択して、番号を設定してください。
// 1 : 'Y年m月d日 H時i分s秒',
// 2 : 'Y/n/d H:i:s',
// 3 : 'Y-n-d H:i:s',
// 4 : 'Y年m月d日',
// 5 : 'Y/m/d',
//------------------------------/
$dateType = 1;
// 日付の取得に失敗した際の文字を設定してください。
$errorText = "日付の取得に失敗しました。";
// タイムゾーンが違う場合、変更してください。
$timeZone = "Asia/Tokyo";

$dateType の選択によって、表示形式を変更できるような作りになっています。

HTML(Thymeleaf)

PHP より渡された値を下記の形で表示させることができます。

<span th:text="${cp.result.value['createdDate']}">日付</span>

※ Thymeleafでは、下記で値が自動で反映されるため、タグは問いません。
  表示させたいタグの中に th:text="${cp.result.value['createdDate']}" をセットしてください。


ソースコードも添付しておきます。
不具合やもっとこうしたほうがいい等あれば、リクエストボードよりご指摘ください。

解決しない場合はこちら コンテンツに関しての
要望はこちら