2014-12-09 13 views
9

Một số ứng dụng thư khách, không đặt tiêu đề References, nhưng Thread-Index.Phân tích cú pháp tiêu đề thư mục-chỉ mục bằng Python

Có cách nào để phân tích cú pháp tiêu đề này bằng Python không?

liên quan: How does the email header field 'thread-index' work?

Thư 1

Date: Tue, 2 Dec 2014 08:21:00 +0000 
Thread-Index: AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDg== 

Mail 2 (nào có liên quan Mail 1)

Date: Mon, 8 Dec 2014 13:12:13 +0000 
Thread-Index: AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDgE4StZw 

Cập nhật

Tôi muốn để có thể liên kết hai thư này trong ứng dụng của tôi giấy phép. Nó đã hoạt động hoàn hảo cho các tiêu đề ReferencesIn-Reply-To nổi tiếng.

+0

Chính xác bạn đang cố gắng làm gì với Chỉ mục-Thread? Bạn đang cố truy xuất loại thông tin nào? Dường như không có gói python nào để phân tích tiêu đề này và bạn sẽ phải triển khai một cái gì đó phù hợp với nhu cầu của bạn. [Bài đăng này] (http://www.solutionary.com/resource-center/blog/2014/04/thread-index-value-analysis/) có thể hữu ích làm hướng dẫn đầu tiên về phân tích cú pháp tiêu đề này bằng python. Nếu bạn chỉ định nhu cầu của bạn là gì, có lẽ tôi có thể giúp đỡ. Chúc may mắn! – maccinza

+0

@maccinza Tôi đã cập nhật câu hỏi: Tôi muốn có thể liên kết hai thư này trong ứng dụng của tôi. Nó đã hoạt động hoàn hảo cho các tiêu đề References và In-Reply-To nổi tiếng. – guettli

Trả lời

9

Sử dụng các thông tin here, tôi đã có thể đặt sau cùng:

import struct, datetime 

def parse_thread_index(index): 

    s = index.decode('base64') 

    guid = struct.unpack('>IHHQ', s[6:22]) 
    guid = '{%08X-%04X-%04X-%04X-%12X}' % (guid[0], guid[1], guid[2], (guid[3] >> 48) & 0xFFFF, guid[3] & 0xFFFFFFFFFFFF) 

    f = struct.unpack('>Q', s[:6] + '\0\0')[0] 
    ts = [datetime.datetime(1601, 1, 1) + datetime.timedelta(microseconds=f//10)] 

    for n in range(22, len(s), 5): 
     f = struct.unpack('>I', s[n:n+4])[0] 
     ts.append(ts[-1] + datetime.timedelta(microseconds=(f<<18)//10)) 

    return guid, ts 

Cho một chỉ số chủ đề, nó sẽ trả về một tuple (guid, [list of dates]). Đối với dữ liệu thử nghiệm của bạn, kết quả là:

> parse_thread_index('AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDgE4StZw') 
('{27F26E41-224C-4139-9243-CF9D56CD880E}', [datetime.datetime(2014, 12, 2, 8, 9, 6, 673459), datetime.datetime(2014, 12, 8, 13, 11, 0, 807475)]) 

tôi không có đủ dữ liệu thử nghiệm trong tầm tay, do đó, mã này có thể là lỗi. Cảm thấy tự do để cho tôi biết.

+0

Cảm ơn bạn rất nhiều. Hoạt động tốt! – guettli

+0

Không cho 'kp4o6SAzO6Xc19R5OPjnmqbg6v2utA ==': Lỗi tràn: giá trị ngày nằm ngoài phạm vi – guettli

+0

@guettli: đây không giống như tiêu đề hợp lệ (byte đầu tiên phải là '1'). – georg

Các vấn đề liên quan