diff --git a/pdm.lock b/pdm.lock index 9254daa..6d31334 100644 --- a/pdm.lock +++ b/pdm.lock @@ -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" diff --git a/pyproject.toml b/pyproject.toml index 095cbb3..d24e0e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" diff --git a/xiaomusic/analytics.py b/xiaomusic/analytics.py new file mode 100644 index 0000000..dc5f1a1 --- /dev/null +++ b/xiaomusic/analytics.py @@ -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) + diff --git a/xiaomusic/static/debug.html b/xiaomusic/static/debug.html index 49ca4db..f825e98 100644 --- a/xiaomusic/static/debug.html +++ b/xiaomusic/static/debug.html @@ -5,9 +5,18 @@ Debug For XiaoMusic - + - + + + + + - - + + + + + + + + + + + +