PHP7
プリザンター

プリザンターに格納したデータをAPIで取得してみた~PHP編~

はじめに

脱Excelを可能にするWEBデータベース プリザンター を活用するヒントを個人的にご紹介します。

今回はプリザンターに格納されているデータをWEBAPI経由で取得することができるのでそれを試してみました。

環境

  • プリザンター

    • オンプレ構成
    • バージョン:0.46.78.16535
    • OS:Windows Server 2012 R2
  • クライアント

    • OS:CentOS 7.4.1108
    • 言語:PHP7.1

おことわり

  • PHPは独学なのでコードのクオリティには自信はありません
  • コードで使われているライブラリや関数等の細かい解説はありません

やりたいこと

プリザンターに格納されているデータをWEBAPI経由で複数のレコードを取得する。

マニュアル > API機能:レコード操作:複数取得

やったこと

1. APIキーの取得

マニュアル > API機能:APIキーの作成 に従ってAPIキーを取得する

2. APIキーを格納するPHPファイルを作成

apiconf.php
<?php
    $apikey = "[1. の手順で取得したAPIキー]";

3. アイテムを取得するPHPコードを作成

getitem.php
<?php
    //--------------------------------------------
    // Pleasanter で API を使ってデータを取得する
    //--------------------------------------------

    // 設定ファイル apiconf.php の読み込み
    require_once( 'apiconf.php' );

    // データを取得するサイトのIDを指定
    $siteid = "******";

    // データ取得オフセット
    $offset = "0";

    // HTTP POST する JSON を生成
    // パラメータを配列に入れてから JSON に変換
    $post_array = array(
        'ApiKey' => $apikey,
        'Offset' => $offset
    );
    $post_json = json_encode( $post_array );

    // HTTP POST するURLを生成
    $endpointurl = "https://[プリザンターのURL]/pleasanter/api_items";
    $url = $endpointurl . "/" . $siteid . "/get";

    // cURL で JSON を HTTP POST する
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_AUTOREFERER => true,
    );

    $curl = curl_init();

    // cURLオプション
    curl_setopt($curl, CURLOPT_URL, $url);
    //curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_json);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt_array($curl, $options);

    $result_json = curl_exec($curl);
    curl_close($curl);

    // 結果を JSON から 配列 に変換する
    $result_array = json_decode( $result_json, false );

    // 配列の中身を var_dump で確認する
    var_dump( $result_array );

4. 実行する

[user@sv01 ~]$
[user@sv01 ~]$ php getitem.php
object(stdClass)#1 (2) {
  ["StatusCode"]=>
  int(200)
  ["Response"]=>
  object(stdClass)#2 (4) {
    ["Offset"]=>
    int(0)
    ["PageSize"]=>
    int(200)
    ["TotalCount"]=>
    int(100)
    ["Data"]=>
    array(100) {
      [0]=>
      object(stdClass)#3 (33) {
        ["UpdatedTime"]=>
        string(19) "2018-03-07T13:17:31"
        ["ResultId"]=>
        int(1111)
        ["Ver"]=>
    :
    :
    :
[user@sv01 ~]$
  • HTTP POST するのに、最初は file_get_contents を使ってみたのですがうまくいかなかったので curl にしたらできました。
  • cURLで指定するオプション curl_setopt の詳細はこちらで確認いただけます。
  • cURLでヘッダーオプションの「Content-Type: application/json」 を付けると値が取得できなかったので付加していません。
  • プリザンターからは JSON が返ってくるので配列に入れてみましたが、そのあたりはお好みで。

感想

いちおう値を取り出すところまでできたので、取り出した値をどう活用するかが今後の楽しみです。

取り出した値を MeCab などの形態素解析にかけて、それを機械学習でゴニョゴニョやって、結果をプリザンターに返すってのも面白そうだなぁと思っていますが、機械学習は難しい・・

機械学習するなら PHP ではなく Python でやるべきだったか・・