在Python中解析mailto URL
我正在尝试把mailto链接解析成一个好用的对象或者字典,这个对象里包括subject
(主题)、body
(正文)等等。我找不到能做到这一点的库或者类,你知道有什么吗?
mailto:me@mail.com?subject=mysubject&body=mybody
8 个回答
2
核心的 urlparse 库在处理 mailto 链接时表现得不太好,但至少能帮你完成一部分工作:
In [3]: from urlparse import urlparse
In [4]: urlparse("mailto:me@mail.com?subject=mysubject&body=mybody")
Out[4]: ParseResult(scheme='mailto', netloc='', path='me@mail.com?subject=mysubject&body=mybody', params='', query='', fragment='')
编辑
稍微查了一下,发现了 这个讨论。总结一下:Python 的 URL 解析功能不太给力。
4
你可以使用urlparse和parse_qs来解析以mailto开头的链接。不过要注意,根据方案定义,
mailto:me@mail.com,you@mail.com?subject=mysubject
是和下面这个完全一样的
mailto:?to=me@mail.com&to=you@mail.com&subject=mysubject
这里有一个例子:
from urlparse import urlparse, parse_qs
from email.message import Message
url = 'mailto:me@mail.com?subject=mysubject&body=mybody&to=you@mail.com'
msg = Message()
parsed_url = urlparse(url)
header = parse_qs(parsed_url.query)
header['to'] = header.get('to', []) + parsed_url.path.split(',')
for k,v in header.iteritems():
msg[k] = ', '.join(v)
print msg.as_string()
# Will print:
# body: mybody
# to: me@mail.com, you@mail.com
# subject: mysubject
1
看起来你可能只想自己写一个函数来实现这个功能。
补充:这里有一个示例函数(由一个Python新手写的)。
补充2,根据反馈进行了整理:
from urllib import unquote
test_mailto = 'mailto:me@mail.com?subject=mysubject&body=mybody'
def parse_mailto(mailto):
result = dict()
colon_split = mailto.split(':',1)
quest_split = colon_split[1].split('?',1)
result['email'] = quest_split[0]
for pair in quest_split[1].split('&'):
name = unquote(pair.split('=')[0])
value = unquote(pair.split('=')[1])
result[name] = value
return result
print parse_mailto(test_mailto)