カスタムプログラムでのPHP利用
最終更新日:2024年02月29日
概要
カスタムプログラムとは、PHPスクリプトをスパイラル環境上に用意されたPHPサーバで実行させることが出来る機能です。
管理画面上では「開発」→「カスタムプログラム」メニューよりアクセスできます。
カスタムプログラムは以下の様な特徴を持っています。
- HTML無しの単独プログラムとして実行可能
- 管理画面から直接実行できる(引数指定も可能)
- 定期実行
- オープンAPIとして利用可能
1. PHPスクリプトの即時実行
カスタムプログラムでは、PHPスクリプトを登録して実行できます。
PHP実行環境がなくても、スパイラル内でPHPスクリプトの実行が完結します。
「基本設定」画面にPHPスクリプトを登録して即時実行が可能です。
2. PHPスクリプトの定期実行
「定期実行」画面から「月」「日 / 曜日」「時」「分」を組み合わせてタイミングを指定して実行させることが可能です。
実行結果は以下のように「実行ログ」画面から確認することが出来ます。
定期実行の通知メール
通知メールでも実行結果を確認することが可能です。
設定によりPHPの定期実行時に通知メールを送信します。
設定方法としては、「定期実行」画面において定期実行の通知にチェックを入れます。
また、「管理グループ」→「通知メール受信設定」→「PHPエラー通知メール」画面において、定期実行の通知を「受け取る」に設定します。
エラーが発生した場合には、こちらの設定のみでエラー通知が配信されます。
3. オープンAPIとして利用する
登録されたカスタムプログラムはオープンAPIという形で外部から実行することも可能です。
オープンAPIとは、APIシークレットを利用することなくトークンのみでアクセス可能なユーザ独自のプログラムをAPIとして提供する機能です。
APIトークンのみで実行可能だという性質上、秘匿性の高い情報のやりとりには適していません。
スパイラルがシステムで提供しているAPIとの違いなどはスパイラルAPIを参照下さい。
オープンAPIとして利用するには、カスタムプログラムの「基本設定」画面においてオープンAPIを「許可する」にチェックを入れて保存します。
許可されたカスタムプログラムは、以下の様にAPIトークンやカスタムプログラムタイトル(および必要であれば引数やコールバック関数名)をパラメータに指定してGETメソッドで呼び出すことが出来ます。
なお、ここで利用するAPIトークンに関しては、セキュリティの観点からオープンAPI呼び出し専用に作成したAPIトークンを利用することをおすすめします。
以下にオープンAPIを使った場合の簡単なサンプルを示します。ここではJavaScriptを使ってオープンAPIの実行結果を処理してHTMLに反映しています。
カスタムプログラム: openapisample
<?php
$SPIRAL->setApiTokenTitle("sample");
$args = $SPIRAL->getArgs();
$db = $SPIRAL->getDataBase("member");
$db->addEqualCondition("id", $args[0]);
$db->addSelectFields("email");
$result = $db->doSelect();
echo $result["data"][0]["email"];
?>
オープンAPIを呼び出すクライアントプログラム
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>Open API Sample</title>
</head>
<body>
<h3>オープンAPI呼び出し結果</h3>
<div id="apiresult">オープンAPIを呼び出します</div>
<script type="text/javascript">
// カスタムプログラム実行完了後に呼ばれる関数
function onComplete(_result) {
if (!_result || (_result.code != 0)){
alert('実行に失敗しました。');
} else {
document.getElementById("apiresult").innerHTML = _result.output;
}
}
</script>
<!-- titleのカスタムプログラムを実行します -->
<script type="text/javascript" src="https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=(APIトークン)&title=openapisample&arg=1&callback=onComplete"></script>
</body>
</html>
上記のクライアントプログラムは引数を1つ渡す方法です。
引数を渡す方法は他に何通りかあります。
(1)&arg=1&arg=2&arg=3でつなげる
<script type="text/javascript" src="https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=(APIトークン)&arg=1&arg=2&arg=3&callback=onComplete&title=openapisample"></script>
(2)&arg=[1,2,3]で配列にする
<script type="text/javascript" src="https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=(APIトークン)&arg=[1,2,3]&callback=onComplete&title=openapisample"></script>
(3)多次元配列を渡す
<script type="text/javascript" src="https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=(APIトークン)&arg=[1,[2,3,['piped','bits']],6]&callback=onComplete&title=openapisample"></script>
(4)JSON形式で渡す
リクエスト時にヘッダでJSONデータであることを指定する必要があります。
カスタムプログラム側は$SPIRAL->getJsonParam();で取得します。
PHP記述例
<?php
// API用のHTTPヘッダ
$api_headers = array("Content-Type: application/json; charset=UTF-8");
$parameters = array();
$parameters["args"] = array("name" => "Sato", "age" => 30, "city" => "Tokyo");
$json = json_encode($parameters); //配列をJSONに変換
$curl = curl_init("https://xxx.smp.ne.jp/api/service/custom_program/run/request?spiral_api_token=(APIトークン)&callback=onComplete&title=openapisample");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST , true);
curl_setopt($curl, CURLOPT_POSTFIELDS , $json);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER , $api_headers);
curl_exec($curl);
$response = curl_multi_getcontent($curl);
curl_close($curl);
print_r($response);
?>