アプリを作ったけど、「果たして本当に使ってもらっているの?」という不安がつきまとう(笑) 逆に言えばアクセスが少ないアプリは、何か改善が必要なのかも…そのアプリの利用状況をログとして保存し、アクセス解析に使用したい!と思いました。そしたら、全然そういうのはないんですね…
何人かの方がコードを公開してくださっていましたが、今回はKentaro1sh11さんのコードを参考に、何とか改造してみました!私プログラムは書けないので、あちこちのコードを切り貼りして…
改造の初期、どうしても訳が分からずKentaro1sh11さんに教えを請いました。「詳しくは分かりませんが」と前置きの上で、ヒントを頂いてその後 twitterで涼雨 零音さんからもアドバイスを頂き、なんとか形になりました。
お二人とも有り難うございました!
Qiita 1sh11 Kentaroさんのページはこちら←
そして涼雨 零音:Rainy’s ASMR からも教えて頂きました!
https://rainsuzusame.net/
twitterアカウント:@RSuzusame
出来上がったアクセスログの記録アプリはこんな感じです。
Kentaro1sh11さんのコードから改良した部分は以下の2点です。
- デバイスの表記の追加
- カウンター表示の追加
デバイスの評価は物凄くアナログに解決しています(笑)そもそもデスクトップ用とスマホ用のJavaScriptが違うモノなので、文字列で記入するようにしました。
カウンターは以下の条件で動作します。
- 閲覧者が同一の最新のレコードの情報を取得
- アプリIDが異なればアクセスログアプリに新しいレコードを追加
- アプリIDが同一ならカウンターに1を加算
こんな感じです。
実際に出来上がったコードはこの通り(継ぎ接ぎだらけで酷いコードだと思います。誰か直して欲しい…)
パソコン用js
(() => {
'use strict';
const postAccessLog = async () => {
//アプリ名の取得
const paramGet = {
'id':kintone.app.getId()
};
const respGet = await kintone.api(kintone.api.url('/k/v1/app.json', true), 'GET', paramGet);
//ログインユーザー名取得
const loginUserName = kintone.getLoginUser()['name'];
// アクセスログアプリのアプリID
const app = 221;
// アクセスログアプリへのレコード登録
const paramPost = {
'app': app,
'record': {
'appId': {
'value': kintone.app.getId()
},
'accessUrl': {
'value': location.href
},
'device': {
'value': 'PC'
},
'appName': {
'value': respGet.name
},
'counter': {
'value': 1
}
,
}
};
//AccessLogアプリから閲覧者が一致する最新レコードを取得
const getAppInfo = {
'app': app,
'query': '閲覧者 in ("' + kintone.getLoginUser()['code'] + '") limit 1',
'fields': ['$id','appId','counter','閲覧者'],
};
const respAppId = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', getAppInfo);
const lastAppId = respAppId.records[0].appId.value;
const nowAppId = kintone.app.getId();
if (nowAppId == lastAppId) {
if (respAppId.records[0].counter.value == "") {
var counterup = 1;
console.log(counterup);
}else{
var counterup = Number(respAppId.records[0].counter.value) + 1;
console.log(counterup);
}
// アクセスログアプリへのレコード更新
const paramPut = {
'app': app,
'id': respAppId.records[0].$id.value,
'record': {
'counter': {
'value': counterup
}
},
};
const respPut = await kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramPut);
}else{
const respPost = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', paramPost);
}//if
}//postAccessLog
// ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
// 一覧画面表示時
// ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
kintone.events.on('app.record.index.show', (event) => {
postAccessLog();
});
// ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
// 詳細画面表示時
// ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
kintone.events.on('app.record.detail.show', (event) => {
postAccessLog();
});
//最終行
})();
モバイル用JS
(() => {
'use strict';
const postAccessLog = async () => {
//アプリ名の取得
const paramGet = {
'id':kintone.mobile.app.getId()
};
const respGet = await kintone.api(kintone.api.url('/k/v1/app.json', true), 'GET', paramGet);
//ログインユーザー名取得
const loginUserName = kintone.getLoginUser()['name'];
// アクセスログアプリのアプリID
const app = 221;
// アクセスログアプリへのレコード登録
const paramPost = {
'app': app,
'record': {
'appId': {
'value': kintone.mobile.app.getId()
},
'accessUrl': {
'value': location.href
},
'device': {
'value': 'スマホ'
},
'appName': {
'value': respGet.name
},
'counter': {
'value': 1
},
}
};
//AccessLogアプリから閲覧者が一致する最新レコードを取得
const getAppInfo = {
'app': app,
'query': '閲覧者 in ("' + kintone.getLoginUser()['code'] + '") limit 1',
'fields': ['$id','appId','counter','閲覧者'],
};
const respAppId = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', getAppInfo);
const lastAppId = respAppId.records[0].appId.value;
const nowAppId = kintone.mobile.app.getId();
if (nowAppId == lastAppId) {
if (respAppId.records[0].counter.value == "") {
var counterup = 1;
console.log(counterup);
}else{
var counterup = Number(respAppId.records[0].counter.value) + 1;
console.log(counterup);
}
// アクセスログアプリへのレコード更新
const paramPut = {
'app': app,
'id': respAppId.records[0].$id.value,
'record': {
'counter': {
'value': counterup
},
}
};
//更新処理はどう書くの?
const respPut = await kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramPut);
}else{
const respPost = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', paramPost);
}//if
}//postAccessLog
// ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
// 一覧画面表示時
// ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
kintone.events.on('mobile.app.record.index.show', (event) => {
postAccessLog();
});
// ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
// 詳細画面表示時
// ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
kintone.events.on('mobile.app.record.detail.show', (event) => {
postAccessLog();
});
//最終行
})();
このコードで以下の通り記録されます。
まだやれていないこと
やりたいけどまだ出来ていない事もいくつかあります。
- URLをサブテーブルに記録(追加)していく。
- 閲覧者の最新レコードが同一アプリIDだった場合でも、10分以上間隔が開いていれば新規レコードで記録する。
色々試して見ましたが、私にはまだ難し。
特にサブテーブルの扱いがちんぷんかんぷんです。
ご存じの方是非教えてください。
書き直してプラグイン化してくれたら最高です(笑)
0コメント