JavaScript+AzureFunctionsで簡易アクセス解析をやってみた
7086 ワード
背景
静的なWEBサイト(HTML/CSS/JavaScript)で、ちょっとしたアクセス解析っぽいものを実現したくて試してみました。サーバーサイドで処理できる環境を準備したり、アクセス解析ツールを使ったりするのが、正攻法なのかもしれないですが、ローカルネットワーク内で運用されているWEBサイトで、尚且つ、環境まで触れない(いまは触らない)というのもあり、ちょっと何か出来ないかと思ってやってみたものです。
構成
- HTML+CSS
- JavaScritp(Fetch API)
- Azure Functions
- Azure Cosmos DB
流れ
- WEBページの操作(ボタンクリックなど)
- JavaScript(Fetch API)でHTTPリクエスト
- Azure FunctionsのHTTPトリガーで処理が起動
- HTTP通信で受信したデータをAzure Cosmos DBに格納
ソースコード
HTML
<a href="xxxx.html" onclick="javascript:logClick('xxxx')">ああああ</a></li>
JavaScript
function logClick(xxxx) {
// Create param
const yyyy= "hogehoge";
// Create the query param for Azure Functions
const params = {
xxxx: xxxx,
yyyy: yyyy
};
const qs = new URLSearchParams(params);
// POST to Azure Functions
fetch(`https://xxxx.azurewebsites.net/api/HttpTriggerXXXX?${qs}`, { method: "POST", })
.then(response => response.text())
.then(text => { console.log(text); })
.catch(console.error);
}
Azure Functions
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
public static IActionResult Run(HttpRequest req, out object outputDocument, ILogger log)
{
string XXXX= req.Query["xxxx"];
string YYYY= req.Query["yyyy"];
if (!string.IsNullOrEmpty(XXXX) && !string.IsNullOrEmpty(YYYY))
{
outputDocument = new
{
XXXX,
YYYY
};
return (ActionResult)new OkResult();
}
else
{
outputDocument = null;
return (ActionResult)new BadRequestResult();
}
}
まとめ
HTML
<a href="xxxx.html" onclick="javascript:logClick('xxxx')">ああああ</a></li>
JavaScript
function logClick(xxxx) {
// Create param
const yyyy= "hogehoge";
// Create the query param for Azure Functions
const params = {
xxxx: xxxx,
yyyy: yyyy
};
const qs = new URLSearchParams(params);
// POST to Azure Functions
fetch(`https://xxxx.azurewebsites.net/api/HttpTriggerXXXX?${qs}`, { method: "POST", })
.then(response => response.text())
.then(text => { console.log(text); })
.catch(console.error);
}
Azure Functions
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
public static IActionResult Run(HttpRequest req, out object outputDocument, ILogger log)
{
string XXXX= req.Query["xxxx"];
string YYYY= req.Query["yyyy"];
if (!string.IsNullOrEmpty(XXXX) && !string.IsNullOrEmpty(YYYY))
{
outputDocument = new
{
XXXX,
YYYY
};
return (ActionResult)new OkResult();
}
else
{
outputDocument = null;
return (ActionResult)new BadRequestResult();
}
}
まとめ
データベース上にデータが格納されるまで確認できました。
可視化まわりは今後ちまちまやっていこうと思います。
Author And Source
この問題について(JavaScript+AzureFunctionsで簡易アクセス解析をやってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/yukimatsu/items/da8540b539debce9f8e3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .