mengshouer / nonebot_plugin_analysis_bilibili

nonebot2解析bilibili插件
73 stars 14 forks source link

解析某些JSON消息时出现错误 Cannot connect to host b23.tv\:443 #3

Closed zhanbao2000 closed 3 years ago

zhanbao2000 commented 3 years ago

描述: 解析部分以JSON消息(即[CQ:json,...],包括分享和小程序)构造的分享链接时发生错误

环境: Windows10 和 Ubuntu Server 20.04.2 LTS Python 3.9

复现: 使用安卓哔哩哔哩客户端,点击任一视频,然后分享到QQ内,将有概率触发下述错误 aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host b23.tv\:443 ssl:default [Name or service not known] log.txt

分析: 使用json消息段分享视频时,某些视频在构造url时采用以下方式 [CQ:json, ... , "jumpUrl":"https://b23.tv/hW3asF... 而也有某些视频采用如下方式: [CQ:json, ... , "jumpUrl":"https:\/\/b23.tv\/9hj9Dt...

若仍然使用该正则表达式b23.tv(\\)?/(\w+)|(bili(22|23|33|2233).cn)(\\)?/(\w+),即 https://github.com/mengshouer/nonebot_plugin_analysis_bilibili/blob/9da2b040c51d539fab04db239d5aba1be4003aba/nonebot_plugin_analysis_bilibili/analysis_bilibili.py#L53 会导致前者能正常解析为https://b23.tv/hW3asF,后者会被解析为https://b23.tv\/9hj9Dt,因此后者会使aiohttp将b23.tv\当作hostname处理,最终会导致找不到主机名引发该错误

可能的解决方式:

b23 = re.compile(r'b23.tv(\\)?/(\w+)|(bili(22|23|33|2233).cn)(\\)?/(\w+)').search(text)
url = f'https://b23.tv/{b23[2]}'

这样可以同时解决https://b23.tv/https:\/\/b23.tv\/的问题

mengshouer commented 3 years ago

a59e8db59ec08a40aba6c7f947f1d05e7436eade