イントロ

独自のカスタマイズやその他の目的でRESTfulAPIとしてBioStar2 New Local APIを使用する場合は、この記事を参照してください。この記事では、C#コンソールアプリケーションによるBioStar 2 New Local APIの基本的な使用法について説明します。   

 


機能

この記事では、以下の機能について説明します。

  1. ログイン
  2. ユーザー検索
  3. ユーザー追加
  4. アクセスグループにユーザーを追加
  5. ログデータの取得
  6. 順序でログデータの取得

 

この記事では、API関数を呼び出して、選択した期間内のログデータを取得する方法を確認します。パラメーター入力時取得するログの数の確認が必要です。

API呼び出し用に作成されたC#プログラムのサンプルコードをご覧ください。ソースコードをコピーして貼り付けて同じ機能を使用できます。

また、RESTfulAPI呼び出しに使用するプログラムであるPostmanを介してAPI関数を呼び出す方法も確認します。



Part 1. API呼び出しとパラメーター   

 

[POST]: /events/search

[パラメーター] 

名称

タイプ

*M/O

説明

 

 

 

limit

integer

O

取得するログの数

Conditions-values

String Array

O

イベント発生期間の設定。終了時刻の値は開始時刻よりも大きくする必要があります。 * ISO-8601形式のUTCでの日時(例 2015-06-10T02:14:05.268Z )

Conditions-operator

integer

O

desc: 検索条件[

EQUAL : 0,

NOT_EQUAL : 1,

CONTAINS : 2,

BETWEEN : 3,

LIKE : 4,

GREATER : 5,

LESS : 6]

  * M – 必須, O – オプション

 

Part 2. リクエストボディとレスポンスモデル 

[値/パラメータモデルの例]

{

       "Query": {

        "limit": 100,

           "conditions": [

               {

                "column": "datetime",

                "operator": 3,

                "values": [

                       "2021-08-01T15:00:00.000Z",

                       "2021-08-02T14:59:59.000Z"

                ]

               }

           ]

    }

}

*"limit" : 100はAPI呼び出しの結果としてレスポンスに100個のログを表示を示します。大量のデータを取得するとサーバにに過負荷がかかる可能性があります。

*"column" : datetimeは、ログのdatetime値でログを検索することを示します。たとえば、2021-08-01T15:00:00.000Zから2021-08-02T14:59:59.000Zまでのログが表示されます。 

*"column" : idまたはその他の値に変更すると、それに応じてログをidまたはその他の値で検索ができます。

 

[レスポンス:成功]

{

       "EventCollection": {

           "rows": [

               {

                "id": "133",

                "server_datetime": "2021-08-02T13:08:27.00Z",

                "datetime": "2021-08-02T04:08:30.00Z",

                "index": "346",

                "user_group_id": {

                    "id": "0",

                    "name": ""

                   },

                "device_id": {

                    "id": "939271697",

                    "name": "BioStation A2 939271697 (192.168.13.132)"

                },

                "event_type_id": {

                    "code": "20736"

                },

                "door_id": [

                    {

                        "id": "4",

                        "name": "Door1"

                    }

                ],

                "is_dst": "0",

                "timezone": {

                    "half": "0",

                    "hour": "9",

                    "negative": "0"

                },

                   "user_update_by_device": "false",

                "hint": "162787731009392716970000000346",

                "user_id": {

                    "photo_exists": "false"

                }

               },

.

*hint: ACデータベースの各テーブル(月次ログ)のインデックス値。テーブルの最初のログデータから開始して、新規ログデータごとに番号が1ずつ増加します。

*「hint」を使用すると、ログの比較が可能になります。できるため、特定のログが一部のログの前後にあることを理解できます。



Part 3. コンソールログ取得の例   

 

[ログの取得メソッドのソースコード] 

static async void GetLogTask()

        {

            if(sessionID == null)

            {

                Console.WriteLine("You must log in first!");

                return;

            }

 

            CookieContainer cookieContainer = new CookieContainer();

 

            HttpClientHandler handler = new HttpClientHandler();

            handler.CookieContainer = cookieContainer;

 

            HttpClient httpClient = new HttpClient(handler);

 

               HttpClient client = new HttpClient(handler);

            httpClient.DefaultRequestHeaders.Add("bs-session-id", sessionID);

            cookieContainer.Add(new Uri("https://127.0.0.1"), new Cookie("bs-session-id", sessionID));

            string resourceAddress = "https://127.0.0.1/api/events/search";

            Console.WriteLine("How many results do you want to see?");

            string limit = Console.ReadLine();

            string startTime = "1970-01-01T00:00:00Z";

            string endTime = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");

 

            DateTime dtLatestLogTime = new DateTime(1970, 1, 1);

 

            JavaScriptSerializer serializer = new JavaScriptSerializer();

                

            string payload2 = "{ \"Query\": { \"limit\": " + limit + ", \"conditions\": [  { \"column\": \"datetime\",     \"operator\": 3, \"values\": [  \"" + startTime + "\", \"" + endTime + "\" ] } ] }}";

            Console.WriteLine(payload2);

 

            StringContent sc = new StringContent(payload2, Encoding.UTF8, "application/json"); 

            HttpResponseMessage httpResponse = httpClient.PostAsync(resourceAddress, sc).Result;

 

            if (httpResponse.IsSuccessStatusCode == true)

               {

                Console.WriteLine("Succeeded to retrieve log from " + startTime + " to " + endTime);

                string httpResponseBody = await httpResponse.Content.ReadAsStringAsync();

                //Console.WriteLine(httpResponseBody);

                dynamic obj = JsonConvert.DeserializeObject(httpResponseBody);

                Console.WriteLine("************** LOG("+limit+") : **************");

                Console.WriteLine("** LogID ********* DateTime *********** DeviceID ******************** DeviceName ********************* EventCode *****");

                for (int i = 0; i < Int16.Parse(limit); i++)

                {

                       Console.WriteLine(obj.EventCollection.rows[i].id + "        " + obj.EventCollection.rows[i].datetime + "        " + obj.EventCollection.rows[i].device_id.id + "        " + obj.EventCollection.rows[i].device_id.name + "        " + obj.EventCollection.rows[i].event_type_id.code);

                }

                System.Threading.Thread.Sleep(1000);

            }

            else

            {

                Console.WriteLine("Log Retrieval Failed from " + startTime + " to " + endTime);

                   Console.WriteLine(httpResponse.ToString());

            }

            

        }

 

[ログの取得に成功:ログのいくつかの値のみを表示] 

 

 

Part 4. Postmanでログ取得 

 

[リクエスト例: ヘッダー] 

*他のAPI呼び出しでのAPIの使用を認証するには、LoginAPI呼び出しのレスポンスヘッダーの「be-session-id」値を入力してください。 

텍스트, 스크린샷, 모니터, 화면이(가) 표시된 사진 
자동 생성된 설명

[リクエスト例 

 

 

[レスポンス例: body 

텍스트이(가) 표시된 사진 
자동 생성된 설명