標準機能では、IPアドレスとユーザーエージェントをサイト側から自動取得することができません。(ver.2.20時点)
サイト側から登録する際に、IPアドレスとユーザーエージェントを取得し、更新させるPHPのサンプルプログラムを紹介します。
参考になれば幸いです。
サイト側から登録する際に、IPアドレスとユーザーエージェントを取得し、更新させるPHPのサンプルプログラムを紹介します。
参考になれば幸いです。
前提
DBのフィールドについて、
IPアドレスは、テキスト、ユーザーエージェントは、テキストエリアで作成をお願いします。
ユーザーエージェントは、最大文字数は半角512文字になるため、テキストエリアフィールドで作成いただく形となります。
IPアドレスは、テキスト、ユーザーエージェントは、テキストエリアで作成をお願いします。
ユーザーエージェントは、最大文字数は半角512文字になるため、テキストエリアフィールドで作成いただく形となります。
サンプルプログラム
PHP
<?php //------------------------------ // 設定値用モジュール //------------------------------ define("API_URL", "https://api.spiral-platform.com/v1"); define("API_KEY", $SPIRAL->getEnvValue("")); define("API_ROLE",$SPIRAL->getEnvValue("")); // ロールによるAPI権限が不要の場合 define("APP_ID",$SPIRAL->getEnvValue("")); define("DB_ID",$SPIRAL->getEnvValue("")); //------------------------------ // 設定値用モジュール //------------------------------ $commonBase = CommonBase::getInstance(); // ステップのセット // 登録ブロックの場合 $formComplete = $SPIRAL->getRegistrationForm("ブロックの識別名"); // 登録フォームブロックの識別名を登録 // 更新ブロックの場合 // $formComplete = $SPIRAL->getUpdateForm("ブロックの識別名"); // 更新フォームブロックの識別名を登録 // 完了画面での処理 if($formComplete->isCompletedStep()){ $record = $SPIRAL->getRecordValue(); $dataPATCH = array( "IPを保存するフィールドの識別名" => $_SERVER["REMOTE_ADDR"], "ユーザーエージェントを保存するフィールドの識別名" => $_SERVER['HTTP_USER_AGENT'], ); $appInsert = $commonBase->apiCurlAction("PATCH","/apps/".APP_ID."/dbs/".DB_ID."/records/".$record['item']['_id'],$dataPATCH); if(isset($appInsert['item'])){ $SPIRAL->setTHValue("insert", true); }else{ $SPIRAL->setTHValue("insert", "error"); $SPIRAL->setTHValue("errorText", "IP,UAの更新に失敗しました。"); // $SPIRAL->setTHValue("errorText", print_r($appInsert,true)); } } //------------------------------ // 共通用モジュール //------------------------------ 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用 API送信ロジック * @return Result */ function apiCurlAction($method, $addUrlPass, $data = null) { $header = array( "Authorization:Bearer " . API_KEY, "Content-Type:application/json", "X-Spiral-Api-Version: 1.1", ); if(API_ROLE){ $header = array_merge($header,array("X-Spiral-App-Role: ".API_ROLE)); } // curl $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_URL, API_URL . $addUrlPass); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); if ($method == "POST") { curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } if ($method == "PATCH") { curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } if ($method == "DELETE") { curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } if ($method == "GET") { curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } $response = curl_exec($curl); if (curl_errno($curl)) echo curl_error($curl); curl_close($curl); return json_decode($response, true); } }
利用方法
設置するPHPは、登録・更新フォームを設定するページにセットしてください。
サンプルプログラムは、完了画面に遷移時に動作するプログラムとなります。
API_KEY ,API_ROLE ,APP_ID, DB_ID など複数ページで使用箇所は、PHP環境変数への設定を推奨しております。
基本の設定は下記になります。
下記は、PHP環境変数を使った書き方になります。
環境変数を使用しない場合は、下記を使用せずに直接識別名もしくは IDを設定してください。
次にどのフォームブロックかを判定する箇所を修正します。サンプルプログラムは、完了画面に遷移時に動作するプログラムとなります。
API_KEY ,API_ROLE ,APP_ID, DB_ID など複数ページで使用箇所は、PHP環境変数への設定を推奨しております。
基本の設定は下記になります。
API_KEY 6行目 |
アカウント管理で発行したAPIキーをセットしたPHP環境変数の変数名 |
---|---|
API_ROLE 7行目 |
アプリロールの識別名をセットしたPHP環境変数の変数名 アプリロールによる権限設定をしない場合は未入力 |
APP_ID 8行目 |
更新するアプリのIDをセットしたPHP環境変数の変数名 |
DB_ID 9行目 |
更新するDBのIDをセットしたPHP環境変数の変数名 |
下記は、PHP環境変数を使った書き方になります。
環境変数を使用しない場合は、下記を使用せずに直接識別名もしくは IDを設定してください。
$SPIRAL->getEnvValue("")
16行目 - 19行目の箇所になります。
// 登録ブロックの場合 $formComplete = $SPIRAL->getRegistrationForm("ブロックの識別名"); // 登録フォームブロックの識別名を登録 // 更新ブロックの場合 // $formComplete = $SPIRAL->getUpdateForm("ブロックの識別名"); // 更新フォームブロックの識別名を登録
* 文字の先頭に「//」をつけることでコメントアウトできます。
使用するブロックタイプの設定として、「ブロックの識別名」となっている箇所を、使用するブロックの識別名に変更します。
最後に、更新するフィールドと値を指定をします。
25行目 - 28行目の箇所になります。
$dataPATCH = array( "IPを保存するフィールドの識別名" => $_SERVER["REMOTE_ADDR"], "ユーザーエージェントを保存するフィールドの識別名" => $_SERVER['HTTP_USER_AGENT'], );
・注意点
APIが失敗した場合にIPアドレスおよびユーザーエージェントが入っていないゴミデータが生成される可能性がありますので、ご注意ください
確実に取得したい場合は、IPアドレスが登録されていないレコードは、登録エラーにする等の処理が必要となります。
完了画面に以下のコードを設定することで、APIの処理失敗時にユーザ側でエラーメッセージを表示することもできます。
Thymeleaf
<th:block th:if="${cp.result.value['insert']} ne 'error'"> <p style="text-align: center;">完了しました。</p> </th:block> <th:block th:if="${cp.result.value['insert']} eq 'error'"> <p style="text-align: center;" th:text="${cp.result.value['errorText']}">text</p> </th:block>
hidden を使って取得
API を使用せずに hidden を使って、登録される方法もご紹介します。
入力フォームに hidden 値として、IPアドレス と ユーザーエージェントをセットする方法になります。
PHP
HTML - 入力
f0xx に関しては、各フィールドのフィールドIDに変更が必要です。
・注意点
hidden を使用する場合、開発者ツール等で改ざんされるリスクがございます。
精緻なものでない前提での取り扱いをお願いいたします。
入力フォームに hidden 値として、IPアドレス と ユーザーエージェントをセットする方法になります。
PHP
<?php $SPIRAL->setTHValue("ipVal", $_SERVER["REMOTE_ADDR"]); $SPIRAL->setTHValue("uaVal", $_SERVER['HTTP_USER_AGENT']);
<!--/* IPアドレス(ipField) */--> <sp:input-field name="f0xx"></sp:input-field> <input type="hidden" class="sp-form-control" th:name="${fields['f0xx'].name}" th:value="${cp.result.value['ipVal']}"> <!--/* ユーザーエージェントフィールド(uaField) */--> <sp:input-field name="f0xx"></sp:input-field> <input type="hidden" class="sp-form-control" th:name="${fields['f0xx'].name}" th:value="${cp.result.value['uaVal']}">
・注意点
hidden を使用する場合、開発者ツール等で改ざんされるリスクがございます。
精緻なものでない前提での取り扱いをお願いいたします。
最後に
設定後は動作確認を必ず行い、動作に問題がないか確認をしてください。
不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。
不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。