如何将Python程序关联浏览器nxm下载链接并获取传入链接信息
nxm协议对接Python模组管理器实现方案
协议注册配置注意事项
你已经掌握注册表关联方法,注意关联时的command项默认值必须携带参数占位符,否则程序启动后拿不到链接内容,正确配置格式如下:
- 直接运行py脚本的配置:
"Python解释器绝对路径" "你的项目入口脚本绝对路径" "%1" - 打包为exe后的配置:
"打包后exe文件绝对路径" "%1"
上述配置中的
%1是Windows系统的参数占位符,会被自动替换为用户点击的完整nxm链接,作为启动参数传入程序。所有路径必须包裹双引号,避免路径含空格时启动失败。
链接获取方法
不需要依赖任何第三方模块,nxm链接会作为命令行参数传入Python程序,直接通过标准库sys获取即可,基础示例代码:
import sys # 程序入口 if len(sys.argv) > 1: launch_param = sys.argv[1] if launch_param.startswith("nxm://"): # 此处为nxm链接唤起的逻辑分支 full_nxm_link = launch_param else: # 处理其他启动参数,或走正常手动启动逻辑 pass else: # 无启动参数,为用户手动打开程序 pass
链接解析为可调用对象
nxm链接遵循标准URL格式,直接用Python标准库urllib.parse即可拆解为结构化对象,无需额外安装依赖。
标准nxm链接格式参考:nxm://<游戏标识>/mods/<模组ID>/files/<文件ID>?key=<下载校验码>&expires=<参数过期时间>&user_id=<Nexus用户ID>
解析代码示例:
from urllib.parse import urlparse, parse_qs def nxm_to_dict(nxm_link: str) -> dict: parse_result = urlparse(nxm_link) if parse_result.scheme != "nxm": raise ValueError("传入参数不是合法nxm协议链接") # 拆分路径段 path_segments = [seg for seg in parse_result.path.split("/") if seg] # 组装为业务可直接调用的结构化数据 mod_info = { "game_code": parse_result.netloc, # 对应Nexus站点的游戏域名,比如skyrimspecialedition "mod_id": int(path_segments[1]) if len(path_segments)>=2 and path_segments[0] == "mods" else None, "file_id": int(path_segments[3]) if len(path_segments)>=4 and path_segments[2] == "files" else None, "auth_params": {k: v[0] for k, v in parse_qs(parse_result.query).items()} } return mod_info
调用该方法传入获取到的原始nxm链接,返回的字典即可直接供后续下载、校验等业务逻辑使用,auth_params中携带的key、过期时间等参数可直接拼接进Nexus的下载请求头/请求参数中完成鉴权。
常见问题说明
- 若使用PyInstaller等工具将程序打包为单exe,上述参数获取、解析逻辑完全不需要修改,注册表仅需对应改成exe路径即可
- 首次点击nxm链接时浏览器会弹出唤起确认,勾选始终允许当前程序处理nxm协议后即可自动唤起
- 不存在专门处理nxm协议的特殊Python模块,本质是自定义URL Scheme传参,所有逻辑用标准库即可实现
内容的提问来源于stack exchange,提问作者KevoK
相关产品推荐
相关产品推荐

