Visitor
概要
概要
.NET Core Visitor Web APIは、IP、地理的位置、言語、参照サイト、セッション、オペレーティングシステム、デバイス、ブラウザーなどのユーザーデータを収集します。 Web開発者が個々のユーザー向けにコンテンツをカスタマイズする時に便利です。
機能
訪問者の概要
using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; namespace WebApiExplorer.Controllers.Visitor { public partial class VisitorController : Controller { Dictionary<string, string> Resources = new Dictionary<string, string>() { { "time_just_now", Localization.Visitor.Time_Just_Now}, { "time_minutes_ago", Localization.Visitor.Time_Minutes_Ago}, { "time_hours_ago", Localization.Visitor.Time_Hours_Ago}, { "time_days_ago", Localization.Visitor.Time_Days_Ago}, { "time_months_ago", Localization.Visitor.Time_Months_Ago}, { "time_years_ago", Localization.Visitor.Time_Years_Ago}, { "txt_much_more", Localization.Visitor.Txt_Much_More}, { "welcome_message", Localization.Visitor.Welcome_Message}, { "browsing_time", Localization.Visitor.Template_Browsing_Time}, { "device_info", Localization.Visitor.Template_Device_Info}, { "ip_address", Localization.Visitor.Template_Ip_Address}, { "landed_time", Localization.Visitor.Template_Landed_Time}, { "last_visit", Localization.Visitor.Template_Last_Visit}, { "location_info", Localization.Visitor.Template_Location_Info}, { "visitor_shown", Localization.Visitor.Template_Visitor_Shown}, { "visits_time", Localization.Visitor.Template_Visits_Time}, { "no_location_found", Localization.Visitor.No_Location_Found}, }; public IActionResult Index() { ViewBag.Resources = this.Resources; return View(); } } }
@using Microsoft.Extensions.Configuration @inject IConfiguration Configuration @{ ViewBag.DemoDescription = false; var Resources = @Html.Raw(Json.Serialize(ViewBag.Resources)); } <script src="@(Configuration["WebAPIService"])api/visitor/visitor-client.min.js"></script> <style> #visualize-container { line-height: 30px; } #visualize-container li { padding-left: 20px; list-style-type: square; list-style-position: inside; } .grid-col { flex: 1 0 25%; max-width: 25%; word-break: break-all; } </style> <h4> @Html.Raw(Visitor.Txt_Overview) </h4> <div id="visualize-container"></div> <p id="license-info"></p> @section Summary{ @Html.Raw(Visitor.Description) } <script> var resources = @Resources; var browsingTimeIntervalID; if (!String.prototype.format) { String.prototype.format = function () { var args = arguments; return this.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match ; }); }; } function getWelcomeMessage(visitor) { if (!visitor || !visitor.firstSession) return ""; let isFirstEnter = visitor.firstSession.visits == 1; if (isFirstEnter) { return resources.welcome_message; } else { return resources.visits_time.format(visitor.firstSession.visits); } } function getIPAddressMessage(visitor) { return "{0} {1}.".format(resources.ip_address, visitor.ip.address); } function getLocationMessage(visitor) { return visitor.geo.countryName ? resources.location_info.format(visitor.geo.cityName + " " + visitor.geo.countryName) : resources.no_location_found; } function getDeviceMessage(visitor) { return resources.device_info.format(visitor.browser.name, visitor.browser.version, visitor.os.name, visitor.os.version, visitor.os.platform); } function getFistVisitMessage(visitor) { return resources.landed_time.format(timeAgo(new Date(visitor.firstSession.start))) + ((visitor.firstSession.visits == 1) ? "" : (" " + resources.last_visit.format(timeAgo(new Date(visitor.firstSession.prev_visit))))); } function getCurrentSessionTime(visitor) { return resources.browsing_time; } function timeAgo(fromDate, toDate) { if (!fromDate) return; var minutesDiff = Math.floor(((toDate ? toDate.getTime() : Date.now()) - fromDate.getTime()) / (60*1000)); var hoursDiff = Math.floor(minutesDiff / 60); var daysDiff = Math.floor(minutesDiff / (60 * 24)); var monthsDiff = Math.floor(minutesDiff / (60 * 24 * 30)); var yearsDiff = Math.floor(minutesDiff / (60 * 24 * 30 * 12)); var displayTemplate = "{0} {1}"; if (yearsDiff >= 1) return displayTemplate.format(yearsDiff, resources.time_years_ago); if (monthsDiff >= 1) return displayTemplate.format(monthsDiff, resources.time_months_ago ); if (daysDiff >= 1) return displayTemplate.format(daysDiff, resources.time_days_ago ); if (hoursDiff >= 1) return displayTemplate.format(hoursDiff, resources.time_hours_ago ); if (minutesDiff >= 1) return displayTemplate.format(minutesDiff, resources.time_minutes_ago ); return resources.time_just_now; } function render(visitor) { var content = ""; content += "<h3>{0}</h3>".format(getWelcomeMessage(visitor)); content += "<p>{0}</p>".format(resources.visitor_shown); content += "<ul>"; content += "<li>{0}</li>".format(getIPAddressMessage(visitor)); content += "<li>{0}</li>".format(getLocationMessage(visitor)); content += "<li>{0}</li>".format(getDeviceMessage(visitor)); content += "<li>{0}</li>".format(getFistVisitMessage(visitor)); content += "<li>{0} <span id=\"browsing_time\"></span></li>".format(getCurrentSessionTime(visitor)); content += "<li><a href=\"/Visitor/AvailableVariables\">{0} ..</a></li>".format(resources.txt_much_more); content += "</ul>"; document.getElementById("visualize-container").innerHTML = content; if (visitor) { browsingTimeIntervalID = setInterval(function () { var browsingTimeEle = document.getElementById("browsing_time"); if (visitor && browsingTimeEle) { browsingTimeEle.innerText = Math.floor((Date.now() - new Date(visitor.session.start).getTime()) / 1000) + " s"; } else { clearInterval(browsingTimeIntervalID); } }, 1000); }; renderIp2LocationLicensing(); } function isIp2Location() { if (!c1.webapi.VisitorConfig || !c1.webapi.VisitorConfig.SERVER_DATA) return false; var visitorData = c1.webapi.VisitorConfig.SERVER_DATA; if (visitorData) { return visitorData.locationProviderType == 1; } return false; } function renderIp2LocationLicensing() { if (!isIp2Location()) return; var ele = document.getElementById("license-info"); if (ele) { ele.innerHTML = "<small>This product includes IP2Location LITE data available from <a href=\"https://www.ip2location.com\">https://www.ip2location.com</a> </small>"; } } window.visitor.getDataAsync(function (data) { render(data); }); </script>