Python3是否有PHP中getCanonicalUrl方法的等效实现?
PHP getCanonicalUrl函数的Python3等效实现
原PHP中的getCanonicalUrl是MediaWiki框架提供的方法,用于获取文件(如图片)的标准化访问URL,示例代码如下:
$f = wfFindFile( 'Foo.jpg' ); $imageUrl = $f->getCanonicalUrl(); // 输出示例:http://mywiki.com/images/0/06/Foo.jpg
针对Python3中的等效实现,分两种场景说明:
1. MediaWiki环境下的实现
如果是基于MediaWiki进行Python开发,可以使用mwclient这类第三方库调用MediaWiki API来获取文件的标准化URL,示例代码:
import mwclient # 连接到目标Wiki站点 site = mwclient.Site('mywiki.com') # 获取指定图片文件的页面对象 file_page = site.images['Foo.jpg'] # 从imageinfo中提取标准化URL canonical_url = file_page.imageinfo['url']
这里返回的canonical_url和PHP中getCanonicalUrl的输出逻辑完全一致,会包含MediaWiki自动生成的哈希分目录结构。
2. 通用场景下的自定义实现
如果是脱离MediaWiki的通用场景,需要自行实现标准化URL的生成逻辑,核心是拼接基础域名、存储目录和转义后的文件名。如果需要模拟MediaWiki的哈希分目录规则,还需添加MD5哈希计算步骤:
基础版(无分目录)
from urllib.parse import quote def get_canonical_url(base_domain, file_name, storage_dir="images"): # 转义文件名中的特殊字符,避免URL非法字符 escaped_file = quote(file_name) # 拼接并返回标准化URL,处理首尾斜杠问题 return f"{base_domain.rstrip('/')}/{storage_dir.lstrip('/')}/{escaped_file}" # 使用示例 url = get_canonical_url("http://mywiki.com", "Foo.jpg") print(url) # 输出:http://mywiki.com/images/Foo.jpg
模拟MediaWiki哈希分目录版
import hashlib from urllib.parse import quote def get_canonical_url(base_domain, file_name, storage_dir="images"): escaped_file = quote(file_name) # 计算文件名的MD5哈希值,用于生成分目录 md5_hash = hashlib.md5(file_name.encode('utf-8')).hexdigest() # 取哈希值的前两位和接下来两位作为两级目录 dir1 = md5_hash[0] dir2 = md5_hash[1:3] # 拼接完整URL return f"{base_domain.rstrip('/')}/{storage_dir.lstrip('/')}/{dir1}/{dir2}/{escaped_file}" # 使用示例 url = get_canonical_url("http://mywiki.com", "Foo.jpg") # 输出类似:http://mywiki.com/images/0/06/Foo.jpg
内容的提问来源于stack exchange,提问作者lolololol ol
相关产品推荐
相关产品推荐

