1. 项目概述:当祈愿记录遇上桌面应用
如果你是一位《原神》的深度玩家,那么“抽卡”这个行为对你来说一定不陌生。从新手期的第一个十连,到为了某个心仪角色而攒了几个版本的原石,每一次祈愿都伴随着期待与忐忑。游戏内自带的“祈愿历史”功能,虽然能让你回溯最近六个月的记录,但它的局限性也显而易见:无法导出、无法长期保存、无法进行深度的数据分析。你或许曾想过,如果能把这些数据完整地保存下来,分析自己的“欧非”曲线,或者只是单纯地做个纪念,该有多好。
genshin-wish-export正是为了解决这个痛点而生的工具。它不是一个简单的网页脚本,而是一个基于 Electron 框架构建的、功能完整的桌面应用程序。它的核心使命,就是安全、便捷地将你在《原神》中的所有祈愿记录,从游戏的服务器中“搬运”到你的本地电脑上,并以结构化的格式(如 JSON、Excel)保存下来。这听起来简单,但背后涉及了与游戏服务器的通信、数据解密、本地存储以及跨平台桌面应用开发等一系列技术点。对于玩家而言,它解锁了数据自主权;对于开发者或数据分析爱好者而言,它提供了一个绝佳的数据源。接下来,我将从一个工具使用者和技术实践者的双重角度,为你彻底拆解这个项目。
2. 核心原理与架构拆解
2.1 数据获取的底层逻辑:逆向工程与安全通信
工具要获取祈愿记录,首先得弄清楚游戏客户端是如何与服务器交互的。这并非通过公开的 API,而是需要一定的逆向工程分析。游戏客户端在请求祈愿记录时,会向特定的服务器端点发送一个经过认证的请求。这个请求的核心是玩家的“认证密钥”,通常以authkey的形式存在。
这个authkey是获取数据的关键。genshin-wish-export工具的设计思路,并不是去破解或模拟登录,而是引导用户从游戏日志或网络抓包中自行提取这个临时有效的密钥。这是一种非常巧妙且安全的设计,因为它完全依赖于用户自己的游戏会话,工具本身不接触、不存储用户的账号密码,极大降低了安全风险。获取到authkey后,工具会模拟游戏客户端的请求格式,向米哈游的官方数据接口发起 HTTPS 请求。服务器在验证authkey有效后,便会返回加密的祈愿记录数据。
注意:
authkey具有时效性(通常为24小时)和一次性。每个authkey只能用于获取该账号在该时间段内的数据,且使用后即失效。这保证了即使密钥不慎泄露,影响范围也极其有限。
2.2 数据处理流程:解密、解析与结构化
服务器返回的数据并非明文,而是经过加密的。这就需要工具内置对应的解密算法。这部分代码通常是逆向分析游戏客户端数据包后还原出来的。解密之后,我们得到的是原始的、嵌套的 JSON 数据。
原始数据虽然包含了所有信息,但格式并不友好,可能包含大量冗余字段或不易读的标识符。genshin-wish-export的核心工作之一,就是对这些原始 JSON 进行解析和清洗。它会:
- 提取关键信息:如祈愿时间、祈愿类型(角色活动祈愿、武器活动祈愿、常驻祈愿、新手祈愿)、获取的物品名称、物品类型(角色/武器)、物品星级、是否触发保底等。
- 数据标准化:将内部使用的物品 ID 映射为玩家可读的中文名称,并补充物品的详细信息(如角色属性、武器类型)。
- 分页聚合:游戏接口通常一次只返回一页(例如20条)记录。工具需要自动、循环地请求所有页码的数据,并将它们无缝拼接成一个完整的数据列表。
这个过程确保了最终输出的数据是干净、完整、可直接用于分析的。
2.3 应用架构:Electron 的优势与挑战
为什么选择 Electron 来构建桌面应用,而不是一个网页工具?这背后有深刻的考量。
优势:
- 跨平台:一套代码(JavaScript/HTML/CSS)可以打包成 Windows、macOS、Linux 三个平台的桌面应用,极大地降低了开发和维护成本。
- 本地化体验:应用可以拥有独立的窗口、系统托盘图标、本地菜单栏,提供比浏览器书签更接近原生软件的体验。数据导出、文件保存等操作可以直接调用系统对话框,无需经过浏览器沙盒。
- 更强的本地能力:可以更直接、更稳定地读写本地文件系统,管理应用配置,这对于需要持久化存储用户
authkey(本地加密存储)和导出数据的需求来说非常合适。 - 规避浏览器环境限制:一些较新的 JavaScript API 或 Node.js 模块在浏览器中可能受限,而在 Electron 的主进程(Node.js环境)中可以自由使用。
挑战与应对:
- 应用体积:Electron 应用需要打包整个 Chromium 内核和 Node.js 运行时,导致安装包体积较大(通常超过100MB)。开发者需要通过优化依赖、压缩资源等手段来缓解。
- 性能开销:相比原生应用,内存占用更高。但对于
genshin-wish-export这类数据工具,性能开销几乎可以忽略不计。 - 安全性:需要谨慎处理来自渲染进程(网页部分)的请求,防止潜在的 XSS 攻击。所有与游戏服务器通信、数据解密等敏感操作,应放在主进程中完成。
项目的架构通常是经典的双进程模型:主进程(Main Process)负责窗口管理、系统集成和核心业务逻辑(如网络请求、数据解密、文件读写);渲染进程(Renderer Process)负责呈现用户界面。两者通过 IPC(进程间通信)进行安全的数据交换。
3. 从零开始的完整实操指南
3.1 环境准备与工具获取
首先,你需要获取genshin-wish-export工具。由于项目可能托管在 GitHub 等平台,最安全的方式是前往其官方仓库下载最新发布的版本。
- 查找官方发布页:在搜索引擎或 GitHub 搜索
genshin-wish-export,找到项目主页。务必认准作者和星标数,避免下载来路不明的修改版。 - 选择对应平台版本:在项目的
Releases页面,你会看到针对 Windows(通常是.exe安装程序或绿色压缩包)、macOS(.dmg或.zip)和 Linux(.AppImage或.deb)的打包文件。选择与你的操作系统匹配的版本下载。 - 安装与运行:
- Windows:如果下载的是安装程序(
.exe),直接运行并按照指引安装。如果是绿色版(.zip),解压后直接运行文件夹内的可执行文件(如Genshin Wish Export.exe)。 - macOS:下载
.dmg文件后,打开并将应用图标拖入“应用程序”文件夹即可。首次运行时,系统可能会提示“无法验证开发者”,需要在“系统设置”->“隐私与安全性”中允许运行。 - Linux:对于
.AppImage文件,下载后赋予其可执行权限 (chmod +x filename.AppImage) 即可运行。
- Windows:如果下载的是安装程序(
3.2 关键步骤:AuthKey 的获取与导入
这是整个流程中最关键的一步。authkey的获取主要有两种主流方法:
方法一:从游戏日志文件中获取(推荐,最稳定)
- 完全退出《原神》游戏客户端。
- 找到游戏日志文件的位置。以 Windows 为例,路径通常为:
C:\Users\[你的用户名]\AppData\LocalLow\miHoYo\原神\output_log.txt。AppData是隐藏文件夹,需要在文件管理器地址栏直接输入路径或开启“显示隐藏的项目”。 - 用记事本等文本编辑器打开
output_log.txt。 - 在日志文件中搜索
https://webstatic.mihoyo.com/hk4e/event/e20190909gacha-v2/index.html这个 URL。你会发现在这个 URL 后面紧跟着一个非常长的、以authkey=开头的字符串。复制从authkey=开始,直到下一个&符号或明显换行结束的整个字符串。这就是你需要的authkey。
方法二:通过开发者工具(F12)网络抓包获取
- 在 PC 端打开《原神》游戏,进入“祈愿”界面,点击“历史记录”。
- 此时,按下
F12打开浏览器的开发者工具(游戏内嵌了浏览器组件)。 - 切换到“网络”(Network)选项卡,刷新祈愿历史页面。
- 在网络请求列表中,寻找一个包含
getGachaLog关键词的请求。点击该请求,在“标头”(Headers)或“负载”(Payload)部分,找到authkey参数,复制其完整的值。
实操心得:强烈推荐使用日志文件法。网络抓包法有时会因为游戏更新或抓包工具不同而失效,且操作相对复杂。日志文件中的
authkey是游戏启动时生成的,获取成功率几乎是100%。复制时务必完整,不要遗漏任何字符。
获取到authkey后,回到genshin-wish-export应用界面。一般会有明显的输入框或“导入密钥”按钮,将复制的完整authkey字符串粘贴进去即可。应用会自动识别并开始获取数据。
3.3 数据获取、预览与导出
导入authkey后,工具会自动开始工作。你会在界面上看到以下流程:
- 选择祈愿类型:工具会列出角色活动祈愿、武器活动祈愿、常驻祈愿、新手祈愿等所有卡池类型。你可以选择导出全部,或只导出某个特定卡池的记录。
- 开始获取:点击开始后,工具会显示获取进度,包括当前正在获取的卡池类型和页码。由于历史记录可能多达数百页,这个过程可能需要几分钟,请耐心等待。
- 数据预览:获取完成后,工具通常会提供一个表格视图进行预览。你可以清晰地看到每一次抽卡的时间、物品、星级,并会自动统计出各星级物品的数量、当前保底计数等关键信息。
- 导出数据:这是最终步骤。工具一般支持多种导出格式:
- JSON:保留最完整的数据结构,适合程序进一步处理或导入到其他分析工具。
- Excel/CSV:适合用 Excel、Numbers 或 WPS 表格进行手动查看、排序和制作图表。
- 其他格式:有些工具可能支持导出为 SQL 脚本,方便导入数据库;或为特定社区网站(如 paimon.moe)设计的格式。
我个人的习惯是同时导出 JSON 和 Excel 两份。JSON 作为原始数据备份,Excel 用于日常查看和简单分析。
4. 深度应用与数据分析实践
4.1 基础统计:看清你的抽卡全景图
拿到数据后,最简单的分析就是基础统计。genshin-wish-export通常内置了基础统计面板,但你也可以将数据导入 Excel 进行更自由的分析。
- 抽数总计:统计你在每个卡池、乃至全游戏的总抽数。这是衡量“投入”的基本指标。
- 星级分布:计算你抽到的五星、四星、三星物品各自的数量和占比。一个健康的账号,五星占比通常在0.6%左右(官方概率),四星占比约5.1%。
- 保底分析:这是核心中的核心。通过数据,你可以精确地回顾每一次五星是在多少抽时出现的。
- 计算实际保底抽数:筛选出所有五星记录,计算该五星距离上一个五星(或卡池开始)之间的抽数。你会发现,大部分五星集中在74-90抽之间(角色/武器祈愿保底为90抽),这就是“软保底”和“硬保底”的体现。
- “歪”的记录:在角色活动祈愿中,标记出那些不是当期UP角色的五星。统计你“歪”的次数和频率,这能直观反映你的“运气”成分。
4.2 高级分析:时间序列与概率验证
对于有数据分析基础(如会用 Python 的 Pandas、Matplotlib)的玩家,本地 JSON 数据是一座金矿。
- 抽卡时间序列分析:
- 将抽卡记录按时间排序,绘制“抽数-时间”折线图。你可以清晰看到自己活跃抽卡的版本周期。
- 计算“原石/抽数积累速度”,结合版本更新和活动日历,可以优化你未来的原石规划策略。
- 概率验证与期望计算:
- 以每10000抽为一个滑动窗口,计算窗口内的五星出率,观察其是否围绕0.6%上下波动,从而验证游戏概率的公平性(当然,个人数据量小,仅供参考)。
- 根据你的历史数据,计算你抽出五星的“期望抽数”。例如,如果你70%的五星在78抽前抽出,那么你的个人期望抽数可能就是78,这比理论的62.5抽(综合软保底概率)更具个人参考价值。
- 资源消耗复盘:
- 结合抽卡时间,回溯当时正在进行的游戏活动,分析你是在什么情况下(例如新角色强度诱人、武器池“毒”性大)做出了抽卡决策。这有助于你未来更理性地对待“强度焦虑”和“外观诱惑”。
4.3 数据安全、隐私与合规使用
必须严肃讨论这一点。使用此类第三方工具,务必保持警惕:
- 本地优先原则:
genshin-wish-export的优秀设计在于其数据流程完全在本地进行。authkey仅在本地用于向官方服务器请求数据,请求到的数据在本地解密、处理和保存。选择工具时,务必确认其是开源项目,代码可审,且承诺无任何网络回传功能。 - 隐私数据保护:导出的数据文件(尤其是 JSON)包含了你的全部祈愿记录。请像保管其他重要文件一样保管它,不要随意上传到不明网站或分享给他人。
- 合规使用:这些数据仅供个人分析、纪念使用。切勿用于任何商业用途,或开发、使用任何干扰游戏正常运营、破坏游戏公平性的外挂或脚本。尊重游戏开发者的劳动成果。
- 风险自担:尽管目前没有因使用此类只读数据导出工具而被封号的案例,但任何非官方的客户端交互行为,理论上都存在风险。使用前请自行权衡。
5. 常见问题与故障排查实录
在实际使用中,你可能会遇到一些问题。以下是我和社区用户遇到过的一些典型情况及解决方法。
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
无法找到authkey | 1. 游戏日志路径错误。 2. 游戏日志被覆盖。 3. 网络抓包方法失效。 | 1.确认路径:确保找到了正确的output_log.txt文件。可以尝试在文件资源管理器搜索output_log.txt。2.重启游戏:完全关闭游戏,重新启动并进入一次祈愿历史页面,再关闭游戏。这样能生成最新的、包含 authkey的日志。3.使用日志法:放弃网络抓包,100%使用日志文件法。 |
导入authkey后提示无效或过期 | 1.authkey复制不完整,首尾缺失字符。2. authkey已超过24小时有效期。3. 游戏账号在另一设备登录,原 authkey失效。 | 1.重新复制:仔细检查复制的字符串,确保是从authkey=开始,完整复制,没有多余空格或换行。2.重新获取: authkey是消耗品。每次需要导出数据时,都必须重新从游戏日志中获取一个新的。昨天的authkey今天肯定不能用。3.稳定环境:在获取和使用 authkey期间,尽量不要切换游戏登录设备。 |
| 获取数据过程中卡住或报错 | 1. 网络连接不稳定,请求超时。 2. 游戏服务器维护或接口暂时不可用。 3. 工具版本过旧,无法兼容游戏更新后的新接口。 | 1.检查网络:确保电脑网络通畅,可以尝试切换网络环境。 2.等待重试:访问官方游戏公告,确认服务器状态。等待一段时间后再试。 3.更新工具:前往项目发布页,下载最新版本的工具。游戏大版本更新后,数据接口可能微调,工具也需要同步更新。 |
| 导出的数据乱码或格式错误 | 1. 导出时选择了不兼容的编码。 2. Excel 打开 CSV 时编码识别错误。 3. JSON 文件被不正确的编辑器修改。 | 1.指定编码:导出 CSV 时,如果工具可选,选择UTF-8 with BOM编码,这对 Excel 兼容性最好。2.正确打开 CSV:用 Excel 打开 CSV 时,选择“数据”->“从文本/CSV”,在导入向导中手动选择 UTF-8编码。3.使用专业编辑器:查看 JSON 文件,使用 VS Code、Notepad++ 等专业文本编辑器,不要用系统自带的记事本。 |
| 应用无法启动或闪退 | 1. 系统缺少运行库(多见于 Windows)。 2. 应用文件损坏或被杀毒软件误删。 3. 与其他软件冲突。 | 1.安装运行库:尝试安装最新版的Visual C++ Redistributable和.NET Framework。2.重新下载/添加信任:从官方渠道重新下载安装包。在杀毒软件中将该应用添加为信任。 3.兼容模式运行:右键点击应用图标,尝试以“兼容模式”或“管理员身份”运行。 |
独家避坑技巧:
- 建立数据归档习惯:每次大版本更新前(例如新角色卡池开放前),做一次全量数据导出并备份。这样你就能拥有每个版本节点的精确抽卡快照。
- 善用“UID”筛选:如果你有多个游戏账号,导出数据时,工具可能会混合记录。在分析前,先按 UID 字段进行筛选,避免数据混淆。
- 关注开源社区:
genshin-wish-export这类项目通常托管在 GitHub。关注其 Issues 和 Discussions 页面,你遇到的大部分问题很可能已经有人提出并解决了。这也是判断项目是否活跃、是否安全的重要依据。
这个工具的价值远不止于“导出数据”这个动作本身。它代表了一种玩家对自身游戏数据所有权的追求,以及用技术手段提升游戏体验的极客精神。通过它,那些曾经模糊的“感觉”变成了清晰的“数据”,让你能更理性、也更充满仪式感地回顾自己在提瓦特大陆的每一次相遇。