ページを選択

ストブロ

Coffee's Blog.

アプリへのアクセスを解析して利用状況を把握したい!

執筆者 | 2022年11月01日 | Coffee, Kintone, ストブロ

アプリを作ったけど、「果たして本当に使ってもらっているの?」という不安がつきまとう(笑) 逆に言えばアクセスが少ないアプリは、何か改善が必要なのかも…そのアプリの利用状況をログとして保存し、アクセス解析に使用したい!と思いました。そしたら、全然そういうのはないんですね…

何人かの方がコードを公開してくださっていましたが、今回はKentaro1sh11さんのコードを参考に、何とか改造してみました!私プログラムは書けないので、あちこちのコードを切り貼りして…

改造の初期、どうしても訳が分からずKentaro1sh11さんに教えを請いました。「詳しくは分かりませんが」と前置きの上で、ヒントを頂いてその後 twitterで涼雨 零音さんからもアドバイスを頂き、なんとか形になりました。

お二人とも有り難うございました!

 Qiita 1sh11 Kentaroさんのページはこちら←

 twitterアカウント:kentaro1sh11

そして涼雨 零音:Rainy’s ASMR からも教えて頂きました!

 https://rainsuzusame.net/
 twitterアカウント:@RSuzusame

出来上がったアクセスログの記録アプリはこんな感じです。
Kentaro1sh11さんのコードから改良した部分は以下の2点です。

  1. デバイスの表記の追加
  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分以上間隔が開いていれば新規レコードで記録する。

色々試して見ましたが、私にはまだ難し。
特にサブテーブルの扱いがちんぷんかんぷんです。

ご存じの方是非教えてください。
書き直してプラグイン化してくれたら最高です(笑)

ニュースと厳重警戒

ご機嫌如何ですか? 桂 コヒ蔵です。 昨日はニュースを見ていてちょっと気になった点があったので。 それをご紹介します。 まず、docomoの冬モデル発表に絡めてだったのか、前後を見ていないのでなんともいえませんが とにかく『スマートフォン』についての報道。...

年末だな、と思わせる話。

ご機嫌如何ですか? 桂 コヒ蔵です(^o^)丿~♪ 山もずいぶんと色づいてきました。 毎朝、毎晩の肌寒さに秋を感じる今日この頃ですね。 今年は残暑が厳しいかもしれないと噂されていましたが、 まぁ「お天気屋さん」なんて言う言葉がある位ですから、...

ちょっとレンズのお話。

おはようございます。 ご機嫌いかがですか? 桂・光画部・コヒ蔵です(^o^)丿~♪ 買うわけではないのですが、 別に買うわけではないのですが・・・ ちょっとデジタル一眼レフカメラのレンズについて調べていましたw...

時は既に・・・

ご機嫌如何ですか? 桂・モーニン・コヒ蔵です(^o^)丿~♪ ようやく秋の寒さにも少し慣れてきた感じがする今週です。 昨日、水曜日は文化の日。 みなさんは何か文化的な活動をされましたか? ・・・私はと言うと、いつもと変わらない日常を過ごしてしまいましたww...

朝のコーヒーとストブロ。

おはようございます! ご機嫌如何ですか? 桂 コヒ蔵です(^o^)丿~♪ 毎朝書いているストブロですが、こらは出勤してから会社のデスクで書いています。 毎朝、始業の30~50分前くらいに出勤して、ストブロを書きながら眠気を覚ましているというわけです。...

11月は最後の月。

みなさん、ご機嫌如何ですか? 桂 コヒ蔵です(^o^)丿~♪ ・・・冗談で言い続けてきたこの「桂 コヒ蔵」 今ではすっかり定着してしまいましたw 数多あるコーヒーのニセモノキャラクターの1人でしかないのですが・・・ ちなみに、 坂東 こひ二 土井 こひ晴...

陸マイラーになる。

ご機嫌如何ですか? Tカードお持ちですか? 桂・T・コヒ蔵です(^o^)丿~♪ 私は大体、朝食をコンビニで済ませます。 1人モンですしねww 1人モンスターハーンターではありません。 私の愛用しているファミマではツタヤのTカードでポイントが溜まります。...

シバ・レルー(65)

この所「寒い、寒い」としか言っていない気がしますが・・・ ご機嫌如何ですか? 桂 コヒ蔵です(^o^)丿~♪ 昨日フォロワーさんから衝撃の積雪フォト、降雪情報を多数聞きました。 「まだ、10月じゃまいかー!!Σ(゚д゚;)」と、驚愕しましたが・・・...

モウ・フガホ・シー(42)

ぶるぶる・・・ ご機嫌如何ですか? ブルブル・・・ さんちゃん、寒い(/_;) 桂 コヒ蔵です(^o^)丿~♪ 今日はなにやら「今年一番の冷え込み」とだという事ですが、 私この「今年一番の冷え込み」って便利な表現だなって思うんですw...

ハイデル・ベッドーカラ(28)

寒いですね、眠いですね。 ご機嫌如何ですか? 桂 コヒ蔵です(^o^)丿~♪ 私の地域のお話をすれば、最近は曇ってはいても雨はなく、 秋の肌寒さを感じつつも「少し慣れてきたかな?」という気もしていたここ数日。...

本日のお題

「「「「本日のお題を考えようの会」を発足を検討する準備委員会」の必要性、また公共性検証会」設立準備委員会」事前打合せ会のお知らせ。 ご機嫌いかがですか? 桂 コヒ蔵です(^o^)丿~♪ たぶん、この会は発足できませんww 今日は何か?と問われれば。...

会員カードと私。

ご機嫌いかがですか? Tカードお持ちでしたらポイント貯まります。 ・・・いや、貯まりませんww 桂・カード地獄・コヒ蔵です(^o^)丿~♪ みなさん、会員カードとか、ポイントカードとか・・・ キャッシュカードとか クレジットカードとか 診察券とか...

0コメント


電器屋Walkerの過去配信のBGMで利用させて頂いております。

ポッドキャスト品質向上、整音テクニック 解説Live

開催のお知らせ

詳細はこちら

国際ポッドキャストの日

International Podcast Day Event

ツキイチ - 隣のポッドキャスト

まとめファンサイト