feat: 新增谷歌统计

This commit is contained in:
涵曦 2024-09-12 20:06:16 +08:00
parent 6f67f515b2
commit 48797ddf8f
8 changed files with 142 additions and 10 deletions

View File

@ -5,7 +5,7 @@
groups = ["default", "dev", "lint"]
strategy = ["inherit_metadata"]
lock_version = "4.5.0"
content_hash = "sha256:0a0b1f63fdd9dd2c4ca2a777f12d294126a880631c1b3d48108d1df283ba14a8"
content_hash = "sha256:d78c6aed8ee11387663e36ade149f06fd493f984e253a1936163f85542ab5a52"
[[metadata.targets]]
requires_python = "==3.10.12"
@ -464,6 +464,18 @@ files = [
{file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"},
]
[[package]]
name = "ga4mp"
version = "2.0.4"
requires_python = ">=3.6,<4.0"
summary = "Google Analytics 4 Measurement Protocol Python Module"
groups = ["default"]
marker = "python_full_version == \"3.10.12\""
files = [
{file = "ga4mp-2.0.4-py3-none-any.whl", hash = "sha256:11e5072b33a93917bbfcf5b44ee48d21e45124ef18e2a0f1275e1529df340de8"},
{file = "ga4mp-2.0.4.tar.gz", hash = "sha256:2fdcf275e643c5c3ab2c3a03e82edc3551109f7e9175b3604aea8c8e015c15ad"},
]
[[package]]
name = "h11"
version = "0.14.0"

View File

@ -14,6 +14,7 @@ dependencies = [
"fastapi>=0.111.0",
"starlette>=0.37.2",
"aiofiles>=24.1.0",
"ga4mp>=2.0.4",
]
requires-python = ">=3.10,<3.12"
readme = "README.md"

75
xiaomusic/analytics.py Normal file
View File

@ -0,0 +1,75 @@
from datetime import datetime
from ga4mp import GtagMP
from xiaomusic import __version__
class Analytics:
def __init__(self, log):
self.gtag = None
self.current_date = None
self.log = log
self.init()
def init(self):
if self.gtag is not None:
return
gtag = GtagMP(
api_secret="sVRsf3T9StuWc-ZiWZxDVA",
measurement_id="G-Z09NC1K7ZW",
client_id="",
)
gtag.client_id = gtag.random_client_id()
gtag.store.set_user_property(name="version", value=__version__)
self.gtag = gtag
self.log.info("analytics init ok")
def send_startup_event(self):
try:
self._send_startup_event()
except Exception as e:
self.log.warning(f"analytics send_startup_event failed {e}")
self.init()
def _send_startup_event(self):
event = self.gtag.create_new_event(name="startup")
event.set_event_param(name="version", value=__version__)
event_list = [event]
self.gtag.send(events=event_list)
def send_daily_event(self):
try:
self._send_daily_event()
except Exception as e:
self.log.warning(f"analytics send_daily_event failed {e}")
self.init()
def _send_daily_event(self):
current_date = datetime.now().strftime("%Y-%m-%d")
if self.current_date == current_date:
return
event = self.gtag.create_new_event(name="daily_active_user")
event.set_event_param(name="version", value=__version__)
event.set_event_param(name="date", value=current_date)
event_list = [event]
self.gtag.send(events=event_list)
self.current_date = current_date
def send_play_event(self, name, sec):
try:
self._send_play_event()
except Exception as e:
self.log.warning(f"analytics send_play_event failed {e}")
self.init()
def _send_play_event(self, name, sec):
event = self.gtag.create_new_event(name="play")
event.set_event_param(name="version", value=__version__)
event.set_event_param(name="music", value=name)
event.set_event_param(name="sec", value=sec)
event_list = [event]
self.gtag.send(events=event_list)

View File

@ -5,9 +5,18 @@
<meta name="viewport" content="width=device-width">
<title>Debug For XiaoMusic</title>
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1725986534">
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1726142741">
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
<script src="/static/jquery-3.7.1.min.js?version=1725986534"></script>
<script src="/static/jquery-3.7.1.min.js?version=1726142741"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'G-Z09NC1K7ZW');
</script>
<script>
var vConsole = new window.VConsole();

View File

@ -3,9 +3,18 @@
<head>
<meta name="viewport" content="width=device-width">
<title>小爱音箱操控面板</title>
<script src="/static/jquery-3.7.1.min.js?version=1725986534"></script>
<script src="/static/app.js?version=1725986534"></script>
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1725986534">
<script src="/static/jquery-3.7.1.min.js?version=1726142741"></script>
<script src="/static/app.js?version=1726142741"></script>
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1726142741">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'G-Z09NC1K7ZW');
</script>
<!--
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>

View File

@ -4,7 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>M3U to JSON Converter</title>
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1725986534">
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1726142741">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'G-Z09NC1K7ZW');
</script>
<!--
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
<script>

View File

@ -3,9 +3,18 @@
<head>
<meta name="viewport" content="width=device-width">
<title>小爱音箱操控面板</title>
<script src="/static/jquery-3.7.1.min.js?version=1725986534"></script>
<script src="/static/setting.js?version=1725986534"></script>
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1725986534">
<script src="/static/jquery-3.7.1.min.js?version=1726142741"></script>
<script src="/static/setting.js?version=1726142741"></script>
<link rel="stylesheet" type="text/css" href="/static/style.css?version=1726142741">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'G-Z09NC1K7ZW');
</script>
<!--
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>

View File

@ -17,6 +17,7 @@ from aiohttp import ClientSession, ClientTimeout
from miservice import MiAccount, MiNAService
from xiaomusic import __version__
from xiaomusic.analytics import Analytics
from xiaomusic.config import (
KEY_WORD_ARG_BEFORE_DICT,
Config,
@ -84,6 +85,10 @@ class XiaoMusic:
# 更新设备列表
self.update_devices()
# 启动统计
self.analytics = Analytics(self.log)
self.analytics.send_startup_event()
debug_config = deepcopy_data_no_sensitive_info(self.config)
self.log.info(f"Startup OK. {debug_config}")
@ -172,6 +177,7 @@ class XiaoMusic:
# sleep to avoid too many request
# self.log.debug(f"Sleep {d}, timestamp: {self.last_timestamp}")
await asyncio.sleep(1 - d)
self.analytics.send_daily_event()
async def init_all_data(self, session):
await self.login_miboy(session)
@ -1066,6 +1072,7 @@ class XiaoMusicDevice:
return
self.log.info(f"{name}】已经开始播放了")
self.xiaomusic.analytics.send_play_event(name, sec)
# 设置下一首歌曲的播放定时器
if sec <= 1: