当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

Python在线读取传奇服务器列表并解析为JSON格式

热度:
列表文件的常见格式与存放位置

传奇登录器启动时读取的服务器列表通常存放在Web服务器上,是一个纯文本文件,常见文件名有serverlist.txt、list.txt、ServerList.txt等。访问地址一般是http://域名/list.txt或者http://IP地址/list.txt。这个文件的内容由版本作者或管理员维护,记录着游戏分区名称、服务器IP地址、端口号以及微端更新地址等核心连接信息。

列表文件的格式在不同引擎和登录器之间存在差异。GOM引擎的列表格式较为简单,每行一个分区,用管道符号|分隔字段。GEE引擎的格式与GOM类似但字段顺序不同。BLUE引擎的列表则采用固定格式,服务器名称和IP端口之间有特定的分隔规则。部分新登录器还支持嵌套分组结构,实现分区文件夹的显示效果。

读取列表的HTTP请求与异常处理

用Python读取在线列表时使用requests库发送GET请求获取文件内容。需要设置超时时间,防止网络状况不佳时程序卡死。常见的超时设置是连接超时3秒,读取超时10秒。请求头里加上User-Agent模拟浏览器访问,部分防火墙会拦截没有UA头的请求。

状态码判断必不可少。200表示请求成功,404表示列表文件不存在,403表示无权限访问,503表示服务器不可用。遇到这些异常时程序要能捕获并给出明确的错误信息,而不是直接抛出异常中断运行。

不同引擎列表格式的解析逻辑

GOM引擎列表的标准格式:服务器名称|IP地址|端口|微端IP|微端端口|是否显示。示例:一区|123.456.789.0|7000|||1。管道符号分隔的字段位置固定。解析时用split('|')分割字符串,取出第0个元素作为分区名称,第1个元素作为服务器IP,第2个元素作为端口号。

GEE引擎列表格式与GOM略有不同,字段顺序可能调整为:显示名称|IP地址|端口|微端地址|微端端口|自动展开|开启状态。解析时需要先识别引擎类型再应用对应的字段映射规则。

BLUE引擎列表格式相对固定:服务器名称公网IP端口。各字段之间用空格分隔,没有管道符号。示例:热血传奇一区123.456.789.07000。解析时用split()按空格分割即可。

带分组结构的列表解析

部分列表文件支持分组嵌套,用方括号标识分组名称,分组内列出属于该分组的服务器信息。示例格式:
[电信专区]
一区|123.456.789.0|7000
二区|123.456.789.1|7000
[网通专区]
三区|123.456.789.2|7000

解析时逐行读取,遇到以[开头]结尾的行作为分组名称,后续行属于该分组直到遇到下一个分组标记。输出的JSON结构中分组作为父级节点,每个分组下包含多个服务器对象。

解析结果的JSON数据结构

无论哪种列表格式,最终解析出的JSON结构应当统一,方便后续程序调用。建议的JSON结构如下:

{
"server_groups":[
{
"group_name":"电信专区"
"servers":[
{
"name":"一区"
"ip":"123.456.789.0"
"port":7000
"micro_ip":""
"micro_port":0
"status":1
}
]
}
]
"total_count":1
"last_update":"2026-08-1714:30:00"
}

没有分组的列表直接放在一个默认分组下,group_name设置为默认或者全部服务器。

需要注意的编码和空白字符问题

列表文件通常使用GBK编码保存,Python读取时如果直接用UTF-8解码会报错或乱码。处理方式是用requests库获取原始字节流后再使用正确的编码解码,或者直接指定response.encoding为GBK。获取内容后用strip()去掉首尾空白字符,用splitlines()按行分割时注意处理空行和注释行,以#开头的行通常是注释需要跳过。行末的\r\n换行符也需要统一去除。

微端地址的拼接与格式化

如果列表中的微端IP和微端端口有值,在输出JSON时可以同时生成微端的完整访问地址,格式为http://IP:端口/。如果微端字段为空,不生成该字段或者设为null。部分列表使用两段式格式表示微端,即微端IP单独占用一个字段,微端端口占用另一个字段,分别解析后合并输出。

服务端IP类型判断

解析出的IP地址需要区分是IPv4还是域名格式。如果字段内容包含字母且不全是数字和点号,判定为域名。域名格式的IP字段在输出JSON时保持原样,不需要做额外处理。端口号字段需要转换为整数类型,字符串格式的端口在后续程序中使用时可能引发类型错误。
[顶部]