【问题标题】:Extracting messages in threads without html or original messages在没有 html 或原始消息的线程中提取消息
【发布时间】:2014-09-06 10:37:44
【问题描述】:

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

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

解析所有这些以仅返回发送和接收的消息,而没有所有面包屑和 html 多余的最佳方法是什么?

【问题讨论】:

    标签: python gmail-api


    【解决方案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
    

    【讨论】:

    • 酷,谢谢。我会尝试一下 - 我需要将消息的输出保存在一个 txt 文件中,还是我可以将它保存到的变量插入到同一个脚本中?例如,我的最后一个变量(messages)设置为等于由 b64.url_safedecode 解码为 str 的 GetMessage 方法...
    • 您不需要使用文本文件。我现在将更新代码,使其仅使用消息变量。
    • 所以我无法确定该代码的放置位置。当您说将其应用于原始 gmail 消息时,是在 b64 解码之后还是之前?此外,它只是数据/正文部分还是整个原始消息输出?
    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多