Python/Google App Engine'de GMail API kullanıyorum. Bazı iş parçacıklarını döndüren bir sorgum var ve şimdi her iş parçacığının son iletisini almak istiyorum. Sonuçlar zorunlu olarak tarihe göre sıralanmadığından, bunun için en verimli API çağrısı ne olacağını merak ediyorum. dizisindeki son eposta bir gönderilmişse, bu daha sonra diğer şeyler arasında öğrenmek için aşağıdaki mantığı çalışır get_items, yürütürGMail API - Bir iş parçacığının son iletisini al
if threads != []:
count = 0 #start a new batch request after every 1000 requests
batch = BatchHttpRequest(callback=get_items)
for t in threads:
batch.add(service.users().threads().get(userId=email, id=t), request_id=some_id)
count += 1
if count % 1000: #batch requests can handle max 1000 entries
batch.execute(http=http)
batch = BatchHttpRequest(callback=get_items)
if not count % 1000:
batch.execute(http=http)
: Ben aşağıdaki toplu işlevini kurdum aşağıda açıklamalara dayanarak
öğe.
def get_items(request_id, response, exception):
if exception is not None:
print 'An error occurred: %s' % exception
else:
for m in response['messages']: #check each of the messages in the response
if m['historyId'] == response['historyId']: #if it equals the historyId of the thread
if 'SENT' in m['labelIds']: #and it is marked as a sent item
item = m #use this message for processing
Ancak bu, yukarıda oluşturduğunuz olarak "öğe" farklı historyIds ile 2 mesajları içeren durumlar vardır, çoğu durum için çalışıyor gibi görünüyor. Bu neden oluyor ve ben
[1] Bir dişin son mesajı almak için tarih kimliğini kullanabilir [1]: https://developers.google. com/gmail/aPI/v1/başvuru/kullanıcılar/ipler – cutteeth
Ah evet, bu konuda düşünce aslında kaldırdı eğer olsa emin değildi. Bir mesaj silindiğinde yeni bir HistoryId düşüncesi de eklenebilir. Yakında öğreneceğim o zaman. Bir deneyecek, teşekkürler. – Vincent
Bu, çoğu durumda çalışır, ancak bazı durumlarda historyId ile eşleşirse, yanıt olarak 1 iletiden daha fazlasını alırım. Yukarıdaki kodu ekliyorum. InternalDate'in historyId'den ne kadar farklılık gösterdiği – Vincent