本仓库包含一个经过规范化、精心整理的用户代理字符串数据集,以 JSON 文件形式存储,旨在用作查找表,以派生简单的用户代理数据,例如用户代理客户端和操作系统。
它被用作 PageviewsOnline 的一个组件,但在这里发布以供一般用途。
该数据集还附带简单的辅助脚本,用于验证数据并将其导出为其他格式或编程语言(例如 Java)。
项目理念
本项目的目标不是提供一个万无一失或完全准确的用户代理检测系统,而是一个务实、尽力而为的解决方案,通过实际使用和社区贡献不断改进。
用户代理检测本质上并不完美。与其追求完全的准确性,这个项目的重点在于:
- 实用
- 可维护
- 透明
- 足以用于现实世界的分析与分类
准确性会随着时间的推移,通过精选更新、真实世界的使用和社区贡献不断提高。
启发式解析和复杂的正则表达式经常以可预测性换取微小的准确性提升。
本项目更偏向:
- 透明胜于魔术
- 精选数据,胜过不透明的逻辑
- 可解释的结果优于推测性检测
功能
- 标准化且经过人工审核的用户代理数据集
- 简单且可预测的查找行为
- 基于 JSON 的格式,便于查看和进行版本控制
- 轻量级验证脚本
- 为其他语言导出辅助函数(例如 Java)
- 在生产级 SaaS 环境中积极使用
标准化的用户代理字符串
本项目的主要目标是以快速、可预测的方式,从用户代理字符串中提取高层次、稳定的信息。
为实现这一点,在处理前会对每个用户代理字符串进行标准化。标准化会去除不稳定的变体(如版本号和大小写差异),同时保留用户代理的结构和语义含义。
用户代理字符串使用以下步骤进行规范化:
- 将所有数字(0-9)替换为占位符字符 x,以消除因版本变更而产生的噪声,同时保持标记结构和长度。
- 将整个字符串转换为小写。按惯例,用户代理标记对大小写不敏感,进行小写化可确保查找的一致性和可靠性。
例如,以下用户代理字符串:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
已归一化为:
mozilla/x.x (windows nt xx.x; winxx; xxx) applewebkit/xxx.xx (khtml, like gecko) chrome/xxx.x.x.x safari/xxx.xx
这种归一化方法使用户代理更易于分组、比较和长期维护,同时在对客户端和操作系统进行高层次分类时仍保持足够的准确性。
通过消除版本相关性与大小写差异所带来的变异性,查找过程将变得更可预测,并且在未来的用户代理变更中更具韧性。
数据格式
每个标准化的用户代理条目包含:
- id - 标准化的用户代理字符串
- client_family - 高级客户端分类(例如浏览器、机器人、应用程序)
- os_family - 高级操作系统分类
随着数据集的增长,具体字段可能会随时间而变化。
查找行为
对规范化后的字符串执行用户代理匹配。
优先使用精确匹配;故意避免部分匹配或启发式匹配,以保持行为可预测且易于调试。
贡献
非常欢迎大家的贡献,这将有助于提升本项目的整体质量和准确性。
最具影响力的贡献方式是通过在 user_agents.json 文件中添加或更新规范化的用户代理条目,以及任何相关的分类数据。
一旦您的修改就绪,请提交一个包含必要数据和/或代码更新的拉取请求。
即使信息只是部分或不完整,也很有用且值得赞赏——每一份贡献都在帮助提升覆盖范围和长期可靠性。
入门指南(快速上手)
本项目的核心是一组 JSON 数据文件,位于 data/ 目录中。
为了帮助维护和重用这些数据,仓库包含一组用于基本校验和导出任务的简单 Node.js 脚本。
常用命令:
- npm run test - 验证 JSON 数据并检查结构或一致性错误。
- npm run build - 构建、排序并将归一化的数据导出为其他编程语言的格式(如 Java),以便更易于集成。
这些工具有意保持简约,专注于数据正确性和可移植性,而不是进行复杂的处理。
User-Agent 字符串并不可靠
从用户代理字符串获取准确信息本质上并不可靠,原因有多方面:
- 没有正式的标准或规范来规定用户代理字符串的结构或内容。
- 很多用户代理出于兼容性和遗留原因,特意伪装或模仿其他用户代理。
因此,要以完全准确和一致的方式来确定用户代理信息,变得极其困难。
因此应将本库视为一种尽力而为的解决方案,而非有保障的或权威性的真理来源。
随着持续使用和社区贡献,准确性会随着时间的推移而提升。
版本控制与稳定性
随着用户代理的演进,数据集可能会随时间变化。
分类不被视为破坏性变更,即使在次要版本之间也是如此。
消费者应将结果视为尽力而为的参考信息,而非具有法律约束力的保证。
许可证
本项目及其数据在 Apache 许可证 2.0(Apache-2-0)下发布。
允许商业用途、修改和再分发。
欢迎贡献,感谢您的支持。
商标
PageviewsOnline、Two-Dot-Oh,以及任何相关的标识、服务名称或品牌均为 Two-Dot-Oh 的商标。
本项目是开源的;但未经事先书面同意,不能在与产品、服务或其他提供项相关的情形中使用 PageviewsOnline 的名称或任何相关品牌标识。
分叉和衍生作品必须使用不同的名称和品牌形象,并且不得暗示得到 PageviewsOnline 或 Two-Dot-Oh 的认可或与之相关联。