在没有html或原始消息的线程中提取消息

时间:2014-07-16 03:20:34

标签: python gmail-api

对于任何线程查询“to:xyz@gmail.com”,我已经能够返回所有匹配的线程ID,然后将它们提供给消息get方法,以返回所有消息中的所有消息的列表线程。

但是,许多消息包含所有以前的消息,为每条消息创建一个痕迹,并大大扩大了返回的每条消息的大小。其他消息还包含html元素。

解析所有这些只是返回发送和接收的消息的最佳方法是什么,没有所有的痕迹和html过量?

1 个答案:

答案 0 :(得分:1)

基于gmail原始消息格式,我把这个非常粗略的解析放在一起。它的工作方式是使用第一个内容类型来获取多部分边界。 然后它根据边界将消息拆分并占据第一部分。

这省略了所有的html,只留下了我们处理的短信和面包屑。

之后我们可以逐行分解消息,删除剩余的内容信息,接收消息,并在我们到达第一个回复时停止。

multipart_boundary = ''
for r in messages.split('\n'):
    if r.startswith('Content-Type: multipart/alternative; boundary='):
        multipart_boundary = r[r.find('boundary=') + 9:]
        break

#print multipart_boundary
offset = len(multipart_boundary) + 2
messages = messages[messages.find('--' + multipart_boundary)+offset:]
messages = messages[:messages.find('--' + multipart_boundary)]
newmsg = ""
for line in messages.split('\n'):
    if line.startswith('Content-') or line.startswith('>'):
        continue
    elif line.startswith('On') and line.strip().endswith('wrote:'):
        break
    else:
        newmsg = newmsg + "\n" + line

print newmsg