Skip to main content
Glama
analytics.py5.7 kB
""" 分析数据相关模型 """ from dataclasses import dataclass from enum import Enum from typing import Optional, Dict, Any, List class ReportFrequency(Enum): """报告频率枚举""" DAILY = "DAILY" WEEKLY = "WEEKLY" MONTHLY = "MONTHLY" YEARLY = "YEARLY" class SalesReportType(Enum): """销售报告类型枚举""" SALES = "SALES" NEWSSTAND = "NEWSSTAND" SUBSCRIPTION = "SUBSCRIPTION" SUBSCRIPTION_EVENT = "SUBSCRIPTION_EVENT" class FinanceReportType(Enum): """财务报告类型枚举""" FINANCIAL = "FINANCIAL" class FinanceReportRegion(Enum): """财务报告区域枚举""" ZZ = "ZZ" # Worldwide @dataclass class AnalyticsReportSegment: """分析报告段数据""" app_name: str app_apple_id: str units: int proceeds: float country_code: str currency_code: str @classmethod def from_data_row(cls, data: List[str]) -> 'AnalyticsReportSegment': """从数据行创建分析报告段""" return cls( app_name=data[4] if len(data) > 4 else "", app_apple_id=data[3] if len(data) > 3 else "", units=int(data[7]) if len(data) > 7 and data[7].isdigit() else 0, proceeds=float(data[8]) if len(data) > 8 and data[8].replace('.', '').isdigit() else 0.0, country_code=data[13] if len(data) > 13 else "", currency_code=data[15] if len(data) > 15 else "" ) @dataclass class FinanceReportSegment: """财务报告段数据""" start_date: str end_date: str usd_proceeds: float proceeds: float currency_code: str country_code: str @classmethod def from_data_row(cls, data: List[str]) -> 'FinanceReportSegment': """从财务报告数据行创建段""" return cls( start_date=data[0] if len(data) > 0 else "", end_date=data[1] if len(data) > 1 else "", usd_proceeds=float(data[5]) if len(data) > 5 and data[5].replace('.', '').replace('-', '').isdigit() else 0.0, proceeds=float(data[6]) if len(data) > 6 and data[6].replace('.', '').replace('-', '').isdigit() else 0.0, currency_code=data[3] if len(data) > 3 else "", country_code=data[2] if len(data) > 2 else "" ) @dataclass class AppAnalyticsData: """应用分析数据""" app_id: str app_name: str total_downloads: int total_proceeds: float downloads_by_country: Dict[str, int] proceeds_by_country: Dict[str, float] report_date: str def to_dict(self) -> Dict[str, Any]: """转换为字典""" return { "app_id": self.app_id, "app_name": self.app_name, "total_downloads": self.total_downloads, "total_proceeds": self.total_proceeds, "downloads_by_country": self.downloads_by_country, "proceeds_by_country": self.proceeds_by_country, "report_date": self.report_date } @dataclass class SalesReport: """销售报告""" vendor_number: str report_type: SalesReportType report_subtype: str date_type: ReportFrequency report_date: str data_segments: List[AnalyticsReportSegment] def get_app_data(self, app_name: str) -> Optional[AppAnalyticsData]: """获取特定应用的分析数据""" app_segments = [seg for seg in self.data_segments if seg.app_name == app_name] if not app_segments: return None total_downloads = sum(seg.units for seg in app_segments) total_proceeds = sum(seg.proceeds for seg in app_segments) downloads_by_country = {} proceeds_by_country = {} for seg in app_segments: country = seg.country_code downloads_by_country[country] = downloads_by_country.get(country, 0) + seg.units proceeds_by_country[country] = proceeds_by_country.get(country, 0.0) + seg.proceeds return AppAnalyticsData( app_id=app_segments[0].app_apple_id, app_name=app_name, total_downloads=total_downloads, total_proceeds=total_proceeds, downloads_by_country=downloads_by_country, proceeds_by_country=proceeds_by_country, report_date=self.report_date ) @dataclass class FinanceReport: """财务报告""" vendor_number: str report_type: FinanceReportType report_subtype: str date_type: ReportFrequency report_date: str data_segments: List[FinanceReportSegment] def get_total_proceeds(self) -> float: """计算报告中所有段的总收益""" return sum(segment.proceeds for segment in self.data_segments) def get_total_usd_proceeds(self) -> float: """计算报告中所有段的总美元收益""" return sum(segment.usd_proceeds for segment in self.data_segments) def get_segment_data(self, country_code: str) -> Optional[FinanceReportSegment]: """获取特定国家/地区的财务数据段""" for segment in self.data_segments: if segment.country_code == country_code: return segment return None def to_dict(self) -> Dict[str, Any]: """转换为字典""" return { "vendor_number": self.vendor_number, "report_type": self.report_type.value, "report_subtype": self.report_subtype, "date_type": self.date_type.value, "report_date": self.report_date, "data_segments": [segment.to_dict() for segment in self.data_segments] }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/peroperogames/pero-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server