Skip to main content
Glama
analytics_handler.py8.79 kB
""" App Store Connect 分析数据处理器 - 负责销售和下载数据分析 """ from typing import Any, Optional from ..models import (ReportFrequency, SalesReportType) from ...mcp_handler_interface import IMCPHandler class AnalyticsHandler(IMCPHandler): """分析数据处理器 - 负责销售报告、下载数据等分析功能""" def __init__(self, client): self.client = client def register_tools(self, mcp: Any) -> None: """注册分析数据相关工具""" @mcp.tool("get_appstore_sales_report") def get_appstore_sales_report_tool( report_type: str = "SALES", report_subtype: str = "SUMMARY", frequency: str = "DAILY", report_date: str = "" ) -> str: """ 下载 AppStore 销售和趋势报告,下载根据您指定的标准过滤的销售和趋势报告。 Args: report_type (str): (Required) The report to download. For more details on each report type see Download and view reports. Possible Values: SALES, PRE_ORDER, NEWSSTAND, SUBSCRIPTION, SUBSCRIPTION_EVENT, SUBSCRIBER, SUBSCRIPTION_OFFER_CODE_REDEMPTION, INSTALLS, FIRST_ANNUAL, WIN_BACK_ELIGIBILITY report_subtype (str): (Required) The report sub type to download. For a list of values, see Allowed values based on sales report type table below. Possible Values: SUMMARY, DETAILED, SUMMARY_INSTALL_TYPE, SUMMARY_TERRITORY, SUMMARY_CHANNEL frequency (str): (Required) Frequency of the report to download. For a list of values, see Allowed values based on sales report type table below. Possible Values: DAILY, WEEKLY, MONTHLY, YEARLY report_date (str): 报告日期,如果是月报告,则格式为YYYY-MM, 如果是日报告,报告格式为YYYY-MM-DD, The report date to download. Specify the date in the YYYY-MM-DD format for all report frequencies except DAILY, which doesn’t require a date. For more information, see report availability and storage. Returns: str: 销售报告内容 """ try: if not self.client.config: self.client.config = self.client.load_config_from_env() # 这里需要vendor_number,从配置中获取 vendor_number = getattr(self.client.config, 'vendor_number', None) if not vendor_number: return "未配置vendor_number,无法获取分析数据" report = self.get_sales_report( vendor_number=vendor_number, report_type=SalesReportType(report_type.upper()), report_subtype=report_subtype, frequency=ReportFrequency(frequency.upper()), report_date=report_date ) return report except Exception as e: return f"获取销售报告失败: {str(e)}" @mcp.tool("get_appstore_finance_report") def get_appstore_finance_report_tool( region_code: str = "ZZ", report_date: str = "" ) -> str: """ 下载 AppStore 财务报告,获取特定时期的收入和税务信息。 Args: region_code (str): (Required) 报告区域代码。通常使用 "ZZ" 表示全球报告。 The region code for the finance report. Use "ZZ" for worldwide reports. report_date (str): (Required) 报告日期,格式为 YYYY-MM。 The report date in YYYY-MM format. Finance reports are typically available monthly. Returns: str: 财务报告内容 """ try: if not self.client.config: self.client.config = self.client.load_config_from_env() # 这里需要vendor_number,从配置中获取 vendor_number = getattr(self.client.config, 'vendor_number', None) if not vendor_number: return "未配置vendor_number,无法获取财务数据" if not report_date: return "请提供报告日期,格式为 YYYY-MM" report = self.get_finance_report( vendor_number=vendor_number, region_code=region_code, report_date=report_date ) return report except Exception as e: return f"获取财务报告失败: {str(e)}" def register_resources(self, mcp: Any) -> None: """注册分析数据相关资源""" pass def register_prompts(self, mcp: Any) -> None: """注册分析数据相关提示""" @mcp.prompt("appstore_analytics") def appstore_analytics_prompt( operation: str = "", app_name: str = "", vendor_number: str = "", date_range: str = "" ) -> str: """App Store Connect分析数据提示""" return f"""App Store Connect 分析数据助手 查询信息: - 操作类型: {operation} - 应用名称: {app_name} - 供应商编号: {vendor_number} - 日期范围: {date_range} 支持的操作类型: - get_sales_report: 获取销售报告 - get_finance_report: 获取财务报告 - get_app_analytics: 获取应用分析数据 - get_top_countries: 获取国家排行榜 销售报告类型: - SALES: 销售报告 (下载和购买) - SUBSCRIPTION: 订阅报告 - NEWSSTAND: 报刊订阅报告 财务报告: - FINANCIAL: 财务报告 (收入和税务信息) - 区域代码: ZZ (全球报告) - 报告频率: 月度 (YYYY-MM 格式) 频率选项 (销售报告): - DAILY: 日报告 - WEEKLY: 周报告 - MONTHLY: 月报报告 - YEARLY: 年报告 使用步骤: 1. 确保已配置vendor_number 2. 选择要查询的应用和日期范围 3. 使用相应的工具获取分析数据 财务报告使用示例: - get_finance_report(region_code="ZZ", report_date="2024-08") 注意事项: - 销售数据通常有1-2天延迟 - 财务数据通常有更长的延迟,按月提供 - 需要有效的vendor_number才能获取数据 - 部分数据可能需要特定的权限 - 财务报告包含收入、税务和汇率信息 """ # ============================================================================= # 业务逻辑方法 # ============================================================================= def get_sales_report( self, vendor_number: str, report_type: SalesReportType, report_subtype: str, frequency: ReportFrequency, report_date: str ) -> Optional[str]: """获取销售报告""" data = { "filter[frequency]": frequency.value, "filter[reportDate]": report_date, "filter[reportSubType]": report_subtype, "filter[reportType]": report_type.value, "filter[vendorNumber]": vendor_number } # 销售报告API通常返回压缩文件,不是JSON response = self.client.make_api_request("salesReports", method="GET", data=data) # 处理二进制内容(可能是gzip压缩的CSV) raw_content = response["raw_content"] # gzip解压缩 import gzip decompressed_data = gzip.decompress(raw_content).decode('utf-8') print(f"成功解压缩,数据长度: {len(decompressed_data)} 字符") print(f"解压后内容前200字符: {decompressed_data[:200]}") return decompressed_data def get_finance_report( self, vendor_number: str, region_code: str, report_date: str ) -> Optional[str]: """获取财务报告""" data = { "filter[regionCode]": region_code, "filter[reportDate]": report_date, "filter[reportType]": "FINANCIAL", "filter[vendorNumber]": vendor_number } # 财务报告API通常返回压缩文件,不是JSON response = self.client.make_api_request("financeReports", method="GET", data=data) # 处理二进制内容(可能是gzip压缩的CSV) raw_content = response["raw_content"] # gzip解压缩 import gzip decompressed_data = gzip.decompress(raw_content).decode('utf-8') print(f"成功解压缩财务报告,数据长度: {len(decompressed_data)} 字符") print(f"解压后财务报告内容前200字符: {decompressed_data[:200]}") return decompressed_data

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