Stat API: Difference between revisions
No edit summary  | 
				 (Marked this version for translation)  | 
				||
| Line 1: | Line 1: | ||
<languages/>  | <languages/>  | ||
<translate>  | <translate>  | ||
<!--T:1-->  | |||
'''[https://kaminari.click/user Где получить ключ]'''    | '''[https://kaminari.click/user Где получить ключ]'''    | ||
<!--T:2-->  | |||
'''[https://kaminari.click/api/doc Подробное описание request-response по каждому эндпойнту].'''  | '''[https://kaminari.click/api/doc Подробное описание request-response по каждому эндпойнту].'''  | ||
<!--T:3-->  | |||
=== '''Список эндпойнтов:''' ===  | === '''Список эндпойнтов:''' ===  | ||
{| class="wikitable"  | {| class="wikitable"  | ||
| Line 16: | Line 19: | ||
|}  | |}  | ||
<!--T:4-->  | |||
=== '''OPTIONS /api/stat/get''' ===  | === '''OPTIONS /api/stat/get''' ===  | ||
===== Request =====  | ===== Request =====  | ||
нет параметров  | нет параметров  | ||
<!--T:5-->  | |||
===== Response =====  | ===== Response =====  | ||
{| class="wikitable mw-collapsible"  | {| class="wikitable mw-collapsible"  | ||
| Line 59: | Line 64: | ||
+ подчёркивание    | + подчёркивание    | ||
<!--T:6-->  | |||
+ <название метрики или группировки> (groupTitle_id)  | + <название метрики или группировки> (groupTitle_id)  | ||
<!--T:7-->  | |||
|-  | |-  | ||
|icon  | |icon  | ||
| Line 79: | Line 86: | ||
|}  | |}  | ||
<!--T:8-->  | |||
=== '''POST /api/stat/filter''' ===  | === '''POST /api/stat/filter''' ===  | ||
===== Request =====  | ===== Request =====  | ||
| Line 95: | Line 103: | ||
|}  | |}  | ||
<!--T:9-->  | |||
===== Response =====  | ===== Response =====  | ||
{| class="wikitable mw-collapsible"  | {| class="wikitable mw-collapsible"  | ||
| Line 120: | Line 129: | ||
|}  | |}  | ||
<!--T:10-->  | |||
=== '''POST /api/stat/data''' ===  | === '''POST /api/stat/data''' ===  | ||
{| class="wikitable mw-collapsible"  | {| class="wikitable mw-collapsible"  | ||
| Line 311: | Line 321: | ||
|}  | |}  | ||
=== '''Примеры запросов.''' ===  | === '''Примеры запросов.''' === <!--T:11-->  | ||
<!--T:12-->  | |||
==== CURL ====  | ==== CURL ====  | ||
<pre>  | <pre>  | ||
| Line 318: | Line 329: | ||
</pre>  | </pre>  | ||
<!--T:13-->  | |||
<pre>  | <pre>  | ||
curl -X POST '<nowiki>https://kaminari.click/api/stat/filter'</nowiki> -d '{"id":"device_type","searchQuery":"","dateFrom":"2023-01-05","dateTo":"2023-01-05"}' -H 'content-type: application/json' -H 'Authorization: Bearer <YOUR API_TOKEN>'  | curl -X POST '<nowiki>https://kaminari.click/api/stat/filter'</nowiki> -d '{"id":"device_type","searchQuery":"","dateFrom":"2023-01-05","dateTo":"2023-01-05"}' -H 'content-type: application/json' -H 'Authorization: Bearer <YOUR API_TOKEN>'  | ||
</pre>  | </pre>  | ||
<!--T:14-->  | |||
<pre>  | <pre>  | ||
curl -X POST '<nowiki>https://kaminari.click/api/stat/data'</nowiki> -d '{"id":null,"name":null,"groups":["time_day"],"metrics":["summary_totalVisits"],"filters":{"filters":[],"period":null,"timezone":0,"dateTo":"2022-08-15","dateFrom":"2022-08-15"},"compare":null}' -H 'content-type: application/json' -H 'Authorization: Bearer <YOUR API_TOKEN>'  | curl -X POST '<nowiki>https://kaminari.click/api/stat/data'</nowiki> -d '{"id":null,"name":null,"groups":["time_day"],"metrics":["summary_totalVisits"],"filters":{"filters":[],"period":null,"timezone":0,"dateTo":"2022-08-15","dateFrom":"2022-08-15"},"compare":null}' -H 'content-type: application/json' -H 'Authorization: Bearer <YOUR API_TOKEN>'  | ||
</pre>  | </pre>  | ||
<!--T:15-->  | |||
==== NodeJS ====  | ==== NodeJS ====  | ||
  const https = require('https');  |   const https = require('https');  | ||
| Line 357: | Line 371: | ||
  <nowiki> </nowiki>   });  |   <nowiki> </nowiki>   });  | ||
<!--T:16-->  | |||
==== PHP ====  | ==== PHP ====  | ||
  <?php  |   <?php  | ||
| Line 371: | Line 386: | ||
  curl_close($ch);  |   curl_close($ch);  | ||
<!--T:17-->  | |||
==== Python ====  | ==== Python ====  | ||
  import requests  |   import requests  | ||
Revision as of 02:28, 19 September 2023
Подробное описание request-response по каждому эндпойнту.
Список эндпойнтов:
| Method | Path | Description | 
|---|---|---|
| OPTIONS | /api/stat/get | Возвращает все возможные группировки и метрики, сгруппированные по категориям. | 
| POST | /api/stat/filter | получение данных для фильтра | 
| POST | /api/stat/data | получение данных для таблицы | 
OPTIONS /api/stat/get
Request
нет параметров
Response
| Key | Type | Description | 
|---|---|---|
| success | Boolean | |
| code | ||
| msg | ||
| data | ||
| data.groups | { groupTitle: [<item>, …] } | См. ниже описание <item> | 
| data.metrics | { metricTitle: [<item>, …] } | См. ниже описание <item> | 
| data.periods | [ 'today', 'yesterday', '7days', 'currentWeek', 'month' ] | |
| Key | Type | Description | 
|---|---|---|
| id | String | <groupTitle или metricTitle>
 + подчёркивание + <название метрики или группировки> (groupTitle_id)  | 
| icon | date | text | number
 | 
Иконка типа | 
| sources | [Number] | |
| filterType | range | list | value | value_like | value_combined
 | 
см. Описание filterType | 
| filterSync | Boolean * | list с поиском на сервере
 | 
POST /api/stat/filter
Request
| Key | Type | Description | 
|---|---|---|
| id | String | Название фильтра | 
| searchQuery | String | Поисковой запрос | 
Response
| Key | Type | Description | 
|---|---|---|
| success | Boolean | |
| code | ||
| msg | ||
| data | ||
| data.items | [{ id: Number, label: String }] | { id: 1, label: "Param A" } | 
POST /api/stat/data
| Key | Type | Description | 
|---|---|---|
| id | String | |
| name | String | |
| perPage | Number | Значение по умолчанию 50 | 
| page | Number | Значение по умолчанию 1 | 
| metrics | [String] | |
| filters | ||
| dateFrom | String | Дата в формате Y-m-d | 
| dateTo | String | Дата в формате Y-m-d | 
| filters.filters | <filters> | |
| period | today | yesterday | currentWeek | 7days| month | null | |
| timezone | Number | От -12 до +12 | 
| groups | [String] | Допустимые значения:
 time_hour, time_day, time_week. time_month, time_dateTime, sub_integration, sub_botType, sub_tbReason, sub_pid, sub_clickId, sub_placementId, sub_sspName, sub_domainName, sub_referer, sub_clickLink, sub_1...10, geo_language, geo_timezone, geo_country, geo_city, geo_provider, geo_ip, device_browser, device_browserEngine, device_os, device_realOs, device_device, device_type, device_connectionType, device_useragent, screen_width, screen_height, screen_orientation, screen_pixelDensity  | 
| compare | <compare> | |
| Key | Type | Description | 
|---|---|---|
| id | String | Допустимые значения:
 time_hour, time_day, time_week, time_month, sub_integration, sub_botType, sub_referer, sub_1...10, geo_language, geo_timezone, geo_country, geo_city, geo_provider, device_browser, device_browserEngine, device_os, device_realOs, device_device, device_type, device_connectionType, device_useragent, screen_width, screen_height, screen_orientation, screen_pixelDensity, summary_totalVisits, summary_uniqUsers, summary_uniqUsersPc, summary_validVisits, summary_validVisitsPc, summary_techLosses, summary_techLossesPc, bots_total, bots_totalPc, bots_crawler, bots_crawlerPc, bots_spoofing, bots_spoofingPc, bots_automated, bots_automatedPc, bots_iFrame, bots_iFramePc, lowQuality_total, lowQuality_totalPc, lowQuality_proxy, lowQuality_proxyPc, lowQuality_spoofing, lowQuality_spoofingPc, lowQuality_automated, lowQuality_automatedPc, lowQuality_trafficCheats, lowQuality_trafficCheatsPc, feature_adBlock, feature_adBlockPc, feature_isMobile, feature_isMobilePc, feature_webView, feature_webViewPc, feature_iFrame, feature_iFramePc, feature_pushNotifications, feature_pushNotificationsPc  | 
| type | String | |
| range | {from: Number, to: Number} | 
| Key | Type | Description | 
|---|---|---|
| dateFrom | String | Дата в формате Y-m-d | 
| dateTo | String | Дата в формате Y-m-d | 
| mode | compare_value | diff | percent | |
| sort | Boolean | 
| Key | Type | Description | 
|---|---|---|
| success | Boolean | |
| code | ||
| msg | ||
| data | ||
| data.rows | [<row>] | Описание строк таблицы | 
| data.totalRows | Number | Общее количество элементов в таблице | 
| data.total | <row> | Сумма по каждой колонке с учётом невидимых строк | 
| data.page | Number | Текущая страница | 
| data.perPage | Number | Количество элементов на странице | 
| data.columns | [<column>] | Описание столбцов | 
| Key | Type | Description | 
|---|---|---|
| value | String | |
| diff | String | null | |
| percent | Number | null | |
| compare_value | String | null | 
| Key | Type | Description | 
|---|---|---|
| field | String | ID метрики или группировки | 
| type | string | number | float | |
| sortable | Boolean | Можно сортировать или нет | 
| unit | String | null | Единица измерения.
 Например, % у процентных столбцов.  | 
Примеры запросов.
CURL
curl -X 'OPTIONS' \ 'https://kaminari.click/api/stat/get' \ -H 'accept: */*' 'Authorization: Bearer <YOUR API_TOKEN>'
curl -X POST 'https://kaminari.click/api/stat/filter' -d '{"id":"device_type","searchQuery":"","dateFrom":"2023-01-05","dateTo":"2023-01-05"}' -H 'content-type: application/json' -H 'Authorization: Bearer <YOUR API_TOKEN>'
curl -X POST 'https://kaminari.click/api/stat/data' -d '{"id":null,"name":null,"groups":["time_day"],"metrics":["summary_totalVisits"],"filters":{"filters":[],"period":null,"timezone":0,"dateTo":"2022-08-15","dateFrom":"2022-08-15"},"compare":null}' -H 'content-type: application/json' -H 'Authorization: Bearer <YOUR API_TOKEN>'
NodeJS
const https = require('https');
const options = {
    host: 'kaminari.click',
    port: 443,
    path: '/api/stat/get',
    method: 'POST',
    headers: { 'Authorization': 'Bearer <YOUR API_TOKEN>' }
};
https
    .get(options, (resp) => {
        let data = '';
        resp.on('data', (chunk) => {
            data += chunk;
        });
        resp.on('end', () => {
            try {
                data = JSON.parse(data);
            } catch {
                console.log(data);
            }
        });
    })
    .on("error", (err) => {
        console.log("Error: " + err.message);
    });
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://kaminari.click/api/stat/get');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'OPTIONS');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'accept: */*',
]);
$response = curl_exec($ch);
curl_close($ch);
Python
import requests
headers = {
    'accept': '*/*',
}
response = requests.options('https://kaminari.click/api/stat/get', headers=headers)
response = requests.options('http://Authorization: Bearer <YOUR API_TOKEN>', headers=headers)