Nov-27-2020, 09:06 AM
Here is my code and expected output:
The dict that I am getting as a response from the call is:
From this dict I am trying to get
and this is getting printed when I use:
But get a KeyError: 'data' when I try to do:
Here is the output when I run the script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
from __future__ import print_function import pickle import os.path from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request import json from re import search import base64 def auth(): creds = None if os.path.exists( 'token.pickle' ): with open ( 'token.pickle' , 'rb' ) as token: creds = pickle.load(token) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else : flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json' , SCOPES) creds = flow.run_local_server(port = 0 ) with open ( 'token.pickle' , 'wb' ) as token: pickle.dump(creds, token) service = build( 'gmail' , 'v1' , credentials = creds) return (service) def getMessages(service): results = service.users().messages(). list (userId = 'me' , labelIds = [ 'UNREAD' , 'Label_8' ]).execute() messages = results.get( 'messages' , []) guest_emails = [] if not messages: print ( 'No messages found.' ) else : print ( 'Messages:' ) for message in messages: result_mes = service.users().messages().get(userId = 'me' , id = message[ 'id' ], format = 'full' ).execute() result = result_mes[ 'payload' ][ 'parts' ][ 0 ][ 'body' ][ 'data' ] mes_body = base64.b64decode(result).decode( "utf-8" ) try : if search( '(?<=Email: ).([^\s]+)' , mes_body): email = search( '(?<=Email: ).([^\s]+)' , mes_body) guest_emails.append(email) except AssertionError: pass print (guest_emails) |
1 |
{ 'id' : '1760839065906ca4' , 'threadId' : '1760839065906ca4' , 'labelIds' : [ 'UNREAD' , 'Label_8' , 'CATEGORY_UPDATES' ], 'snippet' : 'New reservation Booking Customer: Patrick Amstutz Email: pamstu.266039@guest.booking.com Phone: +41 786451602 Reservation n. 2638032415 made on 27/11/2020 06:39:29 Reservation summary: Arrival: 05/04/' , 'payload' : { 'partId' : ' ', ' mimeType ': ' multipart / alternative ', ' filename ': ' ', ' headers ': [{' name ': ' Delivered - To ', ' value ': ' finance.lisbon@stayaltido.com '}, {' name ': ' Received ', ' value ': ' by 2002 :a05: 6a10 : 6c1 : 0 : 0 : 0 : 0 with SMTP id c1csp1155930pxv; Thu, 26 Nov 2020 21 : 42 : 04 - 0800 (PST) '}, {' name ': ' X - Google - Smtp - Source ', ' value ': ' ABdhPJwP4uWsTIFOWxR8GRuBk5ScoLQG6Xmd9hCyrIWqlTIVhf6eZzv0quvoVMaLGwG1U4kaMwWQ '}, {' name ': ' X - Received ', ' value ': ' by 2002 :a1c: 7e11 :: with SMTP id z17mr6884757wmc. 83.1606455723910 ; Thu, 26 Nov 2020 21 : 42 : 03 - 0800 (PST) '}, {' name ': ' ARC - Seal ', ' value ': ' i = 1 ; a = rsa - sha256; t = 1606455723 ; cv = none; d = google.com; s = arc - 20160816 ; b = CY5LfIMprU1vXJpEPeYnbanngwcpMITGGI665ilXHKDTL3UqMSYHP929 + rTDujMfQL IE9N4YuoV / pmVHXjxXMwMdjYDaTWQLGEQZ5AL3H2QW1O6MRC5qEh0h0ExUjDyePmBV6F o2SxojpjoXB3pWHdcmqBMngMjubjWhgqbFICy5xkfkft + HGOSRCGSlPg7Ga1cKfvp / Yy N6ARXq4Qxx30vtXreSjiUQz81bWIsvqdCOfjn5N2e8e6VYhXlHr7fxEaK7zjKaWNS / BM APUXBct5Sbf2eQJRdmyxAFBZejHZT0ronhvhMKi4tpAqhEbMEVUy2raOkekNb8Mx + IK / RS5g = = '}, {' name ': ' ARC - Message - Signature ', ' value ': ' i = 1 ; a = rsa - sha256; c = relaxed / relaxed; d = google.com; s = arc - 20160816 ; h = content - transfer - encoding:message - id :subject:reply - to: from :to :dkim - signature:dkim - filter :date; bh = 0fS031IapzXSpk1WEXHMadkHMVnHE2Yl + F + qwSevZac = ; b = efHmR1uzqyyyYc7PB2 + 0f56C1cAWpLyhUj06m7 / vX47Lu0mgbZB + E6LZcegcmZ3 / h4 lTLZhfbYAD + kkTSwLJQBBkSmYm23LsxAb7FxY11amM + TxaL2Fp / rJkr4XbfIuxx71ZIX hd4OCGVIgVNMtatykc0HK4OCWYdlT + W4a5wvyEYB8CnnHTJMMSG9xvTXMRKl2ltyvOr5 VPacZtwfZ77FW1MEjnMcp3B3zidwCptJerWV5fZXqu2PmoVA6xhNLPMQ + 3xVgA + pd5 / W z4b8pT5sPFx + bg4P + 0n4Z7qf4LVEAmi7gkkL8MVmTBCPZSElvHyek / 2p466sSgQOMnGx nZMg = = '}, {' name ': ' ARC - Authentication - Results ', ' value ': ' i = 1 ; mx.google.com; dkim = pass header.i = @krossbooking.com header.s = default header.b = UMJH4ho1; spf = pass (google.com: domain of noreply@krossbooking.com designates 212.237 . 48.102 as permitted sender) smtp.mailfrom = noreply@krossbooking.com; dmarc = pass (p = NONE sp = NONE dis = NONE) header. from = krossbooking.com '}, {' name ': ' Return - Path ', ' value ': ' <noreply@krossbooking.com> '}, {' name ': ' Received ', ' value ': ' from krossmail.krossbooking.com (krossmail.krossbooking.com. [ 212.237 . 48.102 ]) by mx.google.com with ESMTPS id j65si7800376wma. 123.2020 . 11.26 . 21.42 . 03 for <finance.lisbon@stayaltido.com> (version = TLS1_2 cipher = ECDHE - ECDSA - AES128 - GCM - SHA256 bits = 128 / 128 ); Thu, 26 Nov 2020 21 : 42 : 03 - 0800 (PST) '}, {' name ': ' Received - SPF ', ' value ': ' pass (google.com: domain of noreply@krossbooking.com designates 212.237 . 48.102 as permitted sender) client - ip = 212.237 . 48.102 ; '}, {' name ': ' Authentication - Results ', ' value ': ' mx.google.com; dkim = pass header.i = @krossbooking.com header.s = default header.b = UMJH4ho1; spf = pass (google.com: domain of noreply@krossbooking.com designates 212.237 . 48.102 as permitted sender) smtp.mailfrom = noreply@krossbooking.com; dmarc = pass (p = NONE sp = NONE dis = NONE) header. from = krossbooking.com '}, {' name ': ' Date ', ' value ': ' Fri, 27 Nov 2020 06 : 42 : 02 + 0100 '}, {' name ': ' DKIM - Filter ', ' value ': ' OpenDKIM Filter v2. 11.0 krossmail.krossbooking.com B82281855B84 '}, {' name ': ' DKIM - Signature ', ' value ': ' v = 1 ; a = rsa - sha256; c = relaxed / simple; d = krossbooking.com; s = default; t = 1606455721 ; bh = 0fS031IapzXSpk1WEXHMadkHMVnHE2Yl + F + qwSevZac = ; h = To:From:Reply - To:Subject:From; b = UMJH4ho1Ohf6DaeuWUQkW / ll / 7G6Y / ByeuLxp + IcZyF35qiFbgxnCKE1nOrTSeLtU\t nuGmjnYE1QmdZ + L2co5Ku + 159s3Mqse44NNDGGd4JyclFuhVwJjkBcvFIk0R + KHx + g\t + Z31oA42nAwzyxtVXldVFm + NSxA + eJwz37sqFkv8 = '}, {' name ': ' To ', ' value ': ' finance.lisbon@stayaltido.com '}, {' name ': ' From ', ' value ': ' Kross Booking <noreply@krossbooking.com> '}, {' name ': ' Reply - To ', ' value ': ' Kross Booking <noreply@krossbooking.com> '}, {' name ': ' Subject ', ' value ': ' New Reservation Booking.com - 2638032415 - ALTIDO Portugal '}, {' name ': ' Message - ID ', ' value ': ' <caee68f9abaf4b57fd614842ab7bf304@KrossSP> '}, {' name ': ' Content - Type ', ' value ': ' multipart / alternative; boundary = "b1_caee68f9abaf4b57fd614842ab7bf304" '}, {' name ': ' Content - Transfer - Encoding ', ' value ': ' 8bit '}], ' body ': {' size ': 0}, ' parts ': [{' partId ': ' 0 ', ' mimeType ': ' text / plain ', ' filename ': ' ', ' headers ': [{' name ': ' Content - Type ', ' value ': ' text / plain; charset = us - ascii '}], ' body ': {' size ': 602, ' data ': ' TmV3IHJlc2VydmF0aW9uIEJvb2tpbmcNCg0KQ3VzdG9tZXI6IFBhdHJpY2sgQW1zdHV0eg0KDQpFbWFpbDogcGFtc3R1LjI2NjAzOUBndWVzdC5ib29raW5nLmNvbQ0KDQpQaG9uZTogKzQxIDc4NjQ1MTYwMg0KDQpSZXNlcnZhdGlvbiBuLiAyNjM4MDMyNDE1IG1hZGUgb24gMjcvMTEvMjAyMCAwNjozOToyOQ0KDQpSRVNFUlZBVElPTiBTVU1NQVJZOg0KDQpBUlJJVkFMOiAwNS8wNC8yMDIxIC0gREVQQVJUVVJFOiAxMS8wNC8yMDIxDQoNClRPVEFMIEZBUkU6IEV1cm8gNTU4LDY1DQoNCkdVRVNUUzogMg0KDQpTVEFUVVM6IENvbmZpcm1lZA0KDQpSRVNFUlZBVElPTiBGT1I6IDEgeCBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZyAtDQpTdGFuZGFyZCByYXRlDQoNCkFTU0lHTkVEIFJPT01TOiBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZw0KDQpOT1RFUzogKiogVEhJUyBSRVNFUlZBVElPTiBIQVMgQkVFTiBQUkUtUEFJRCAqKiBZb3UgaGF2ZSBhIGJvb2tlciB0aGF0DQp3b3VsZCBsaWtlIGZyZWUgcGFya2luZy4gKGJhc2VkIG9uIGF2YWlsYWJpbGl0eSkgYWR1bHQ6IDINCg0KDQo = '}}, {' partId ': ' 1 ', ' mimeType ': ' text / html ', ' filename ': ' ', ' headers ': [{' name ': ' Content - Type ', ' value ': ' text / html; charset = us - ascii '}], ' body ': {' size ': 755, ' data ': ' PHA - TmV3IHJlc2VydmF0aW9uIEJvb2tpbmc8L3A - DQoNCg0KPHA - Q3VzdG9tZXI6IFBhdHJpY2sgQW1zdHV0ejwvcD4NCjxwPkVtYWlsOiBwYW1zdHUuMjY2MDM5QGd1ZXN0LmJvb2tpbmcuY29tPC9wPg0KPHA - UGhvbmU6ICs0MSA3ODY0NTE2MDI8L3A - DQoNCjxwPlJlc2VydmF0aW9uIG4uIDI2MzgwMzI0MTUgbWFkZSBvbiAyNy8xMS8yMDIwIDA2OjM5OjI5PC9wPg0KPHA - PGI - UmVzZXJ2YXRpb24gc3VtbWFyeTo8L2I - PC9wPg0KPHA - PGI - QXJyaXZhbDo8L2I - IDA1LzA0LzIwMjEgLSA8Yj5EZXBhcnR1cmU6PC9iPiAxMS8wNC8yMDIxPC9wPg0KPHA - PGI - VG90YWwgZmFyZTo8L2I - IEV1cm8gNTU4LDY1PC9wPg0KPHA - PGI - R3Vlc3RzOjwvYj4gMjwvcD4NCjxwPjxiPlN0YXR1czo8L2I - IENvbmZpcm1lZDwvcD4NCjxwPjxiPlJlc2VydmF0aW9uIGZvcjo8L2I - IDEgeCBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZyAtIFN0YW5kYXJkIHJhdGU8L3A - DQo8cD48Yj5Bc3NpZ25lZCByb29tczo8L2I - IEFMVElETyBDaGlhZG8gU2VsZiBDaGVjay1JbiAyLUJSIEZsYXQgdy9QYXJraW5nPC9wPg0KPHA - PGI - Tm90ZXM6PC9iPiAqKiBUSElTIFJFU0VSVkFUSU9OIEhBUyBCRUVOIFBSRS1QQUlEICoqDQoNCllvdSBoYXZlIGEgYm9va2VyIHRoYXQgd291bGQgbGlrZSBmcmVlIHBhcmtpbmcuIChiYXNlZCBvbiBhdmFpbGFiaWxpdHkpDQoNCmFkdWx0OiAyDQoNCjwvcD4NCjxwPjwvcD4NCg0KDQo = '}}]}, ' sizeEstimate ': 5286, ' historyId ': ' 874369 ', ' internalDate ': ' 1606455722000 '} |
1 |
TmV3IHJlc2VydmF0aW9uIEJvb2tpbmcNCg0KQ3VzdG9tZXI6IFBhdHJpY2sgQW1zdHV0eg0KDQpFbWFpbDogcGFtc3R1LjI2NjAzOUBndWVzdC5ib29raW5nLmNvbQ0KDQpQaG9uZTogKzQxIDc4NjQ1MTYwMg0KDQpSZXNlcnZhdGlvbiBuLiAyNjM4MDMyNDE1IG1hZGUgb24gMjcvMTEvMjAyMCAwNjozOToyOQ0KDQpSRVNFUlZBVElPTiBTVU1NQVJZOg0KDQpBUlJJVkFMOiAwNS8wNC8yMDIxIC0gREVQQVJUVVJFOiAxMS8wNC8yMDIxDQoNClRPVEFMIEZBUkU6IEV1cm8gNTU4LDY1DQoNCkdVRVNUUzogMg0KDQpTVEFUVVM6IENvbmZpcm1lZA0KDQpSRVNFUlZBVElPTiBGT1I6IDEgeCBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZyAtDQpTdGFuZGFyZCByYXRlDQoNCkFTU0lHTkVEIFJPT01TOiBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZw0KDQpOT1RFUzogKiogVEhJUyBSRVNFUlZBVElPTiBIQVMgQkVFTiBQUkUtUEFJRCAqKiBZb3UgaGF2ZSBhIGJvb2tlciB0aGF0DQp3b3VsZCBsaWtlIGZyZWUgcGFya2luZy4gKGJhc2VkIG9uIGF2YWlsYWJpbGl0eSkgYWR1bHQ6IDINCg0KDQo = |
1 |
print (result_mes[ 'payload' ][ 'part' ][ 0 ][ 'body' ][ 'data' ]) |
1 |
result = result_mes[ 'payload' ][ 'part' ][ 0 ][ 'body' ][ 'data' ] |
Error:C:\Users\user\PythonApps\EmailsReader\EmailsReaderV2>python EmailsReader2.py
Messages:
Traceback (most recent call last):
File "C:\Users\user\PythonApps\EmailsReader\EmailsReaderV2\EmailsReader2.py", line 82, in <module>
getMessages(service)
File "C:\Users\user\PythonApps\EmailsReader\EmailsReaderV2\EmailsReader2.py", line 49, in getMessages
result = result_mes['payload']['parts'][0]['body']['data']
KeyError: 'data'
What is interesting is that when I made a new script and just assigned the dict that I am getting back from the GMAIL API to a dict and tried to do the same operation it worked without a problem. Any suggestions?