三行で
-
UiApp.getUserAgent()
(UiAPP)は廃止されHtmlService.getUserAgent()
へ - IPはアクセス時点では取得できそうにない
- スプレッドシートの年日でgroup byする方法が不明
アクセスみたい
ウェブアプリケーションとして公開したapps scriptのアクセスは、
doGetの自分以外による実行数を見ればぼんやりとわかります。
でももうちょっとユニーク数を詳しく知りたいときが出たりするので、手軽な識別方法はないかなと考えました。
調べてみると、
GoogleAppsScriptでのあれやこれや - gstudio - blog
UserAgentを取得できるようなので、これでUAのユニーク数が最低限の利用者数だということができそうです。
短時間の連続実行も別々の人なのか同一の人のリロードなのかもなんとなくわかりますしね。
というわけでvar app = UiApp.createApplication();
を追加しましたが動きません。
UiAppは廃止されたのでHtmlServiceを使うようです
Class HtmlService | Apps Script | Google Developers#getUserAgent()
というわけでこんな風に
function doGet() {
const ua = HtmlService.getUserAgent();
if (ua) {
var as = getSheet(ACCESS_LOG_SHEET_NAME);
as.appendRow([Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy年MM月dd日 HH:mm:ss'), ua]);
}
var htmlOutput = HtmlService.createTemplateFromFile("template").evaluate();
htmlOutput.setTitle(WEB_TITLE);
return htmlOutput;
}
レスポンスに悪影響がでる書き方ですが、スプレッドシートが短い現在は目立った処理速度の低下は見られませんでした。
ifにしてるのはエディターから直接実行した場合などを考えてますが、特に必要ではないはず。
問題点としては、ヘッダーとして公開しているウェブアプリか(/exec)、最新バージョンでの動作の確認か(/dev)見分けが付いてないということでしょうか。
解決策はあるかもしれませんが、些細な問題なので現状スルーで。
UAのユニーク数チェックには別シートに
=QUERY('アクセスログ'!B:B,ʺselect count(B), B group by Bʺ)
とすると何種類のUAがあるのかがわかります。
できれば日ごとのアクセス数も集計したいのですが、日付フィールドの時間を切り捨てて年月日だけで集計する方法がわからず…SQLの不勉強さがたたっていますね…
IPは?
Retrieve Public IP From Google Web App - Stack Overflow
doGetの中で取得する方法は見つからなかったので、クライアント側で取得してdoPostに投げてロギングする方法などが考えられますね。
そこまでするならAnalyticsを乗っけたほうが早い気がしますが、doGetがすばやくなるのでもろもろをクライアント側とdoPostでやっちゃうことは覚えていてもいいかなと。
非同期で処理できますし。
使ってみたら意外とモバイルからのアクセスがあったりでそっちの動作確認していないなと気づきを得られたりでよかったです。