Как декодировать сырой отформатированный Gmail API, получать сообщения для извлечения ссылок - PullRequest
0 голосов
/ 21 июня 2019

Попытка получить сообщение Gmail с указанным идентификатором сообщения.Я извлекаю сообщение как необработанный тип и пытаюсь декодировать его в base64, а затем использую ссылки, содержащиеся в электронном письме.Похоже, что сообщение несколько расшифровано, но похоже на бесполезные байты, а URL-адреса все еще недействительны.

def GetMessageWithId(service, user_id, msg_id, format):
    try:
        message = service.users().messages().get(userId=user_id,
                                                 id=msg_id,
                                                 format=format).execute()
        msg_str = str(base64.urlsafe_b64decode(message["raw"].encode("ASCII")))
        return msg_str
    except errors.HttpError as error:
        print("An error occurred: %s" % error)

Когда я проверяю msg_str, я вижу, где находятся ссылки, но если я пытаюсь скопировать их и поместить в браузер, они недействительны.

Затем я пытаюсь использовать красивый суп, чтобы найти теги href внутри msg_str.Тем не менее, найденные ссылки выглядят примерно так:

3D "https://post.pinterest=\r\n.com/f/a/WRi5L7G_wfTW1BovkyUGuw~~/AAAAAQA~/RgRe6WEYPwRXCXBpbnRlcmVzdEIKABwY=\r\n3AZdrwvFllIXdHVyZ2VvbmNocmlzM0BnbWFpbC5jb21YBAAAAAA~?target=3Dhttps%3A%2F%2=\r\nFwww.pinterest.com%2Fsecure%2Fautologin%2F%3Fod%3DFux7G1fLpQxdgu%252FAlq7%2=\r\n52FO0wnXhG3mrIvODBVUav9ko5yjUdnc84zWzwWN%252BPJyxYElh86K0WCnm9Th%252F6kUWW%=\r\n252FfcKmC7yJz0qo50Ss4EaaUahZGfo19MQS%252BIeP4Dlvz0hgCjvxIS4R%252BPMAF%252FG=\r\nl9BpWrQ%253D%253D%26user_id%3DNjEwMDk3MjE4MTc4OTE0MjA0%26next%3D%252Fpin%25=\r\n2F806707351985179613%252F%253Futm_campaign%253Dpopular_pins%2526e_t%253De5a=\r\nb90da0abf493b944b3c27261acfe3%2526utm_content%253D806707351985179613%2526ut=\r\nm_source%253D31%2526utm_term%253D1%2526utm_medium%253D2012

Я ожидаю, что вся необработанная электронная почта сможет быть декодирована вHTML, но кажется, что это только часть письма. Я приложу ссылку на документацию Gmail для этого сообщения get https://developers.google.com/gmail/api/v1/reference/users/messages/get

1 Ответ

0 голосов
/ 22 июня 2019

Это похоже на закодированный для печати кодированный текст, который был закодирован в формате urlenco.

import quopri
from urllib import parse

s = 'href%3D"https://post.pinterest=\r\n.com/f/a/WRi5L7G_wfTW1BovkyUGuw~~/AAAAAQA~/RgRe6WEYPwRXCXBpbnRlcmVzdEIKABwY=\r\n3AZdrwvFllIXdHVyZ2VvbmNocmlzM0BnbWFpbC5jb21YBAAAAAA~?target=3Dhttps%3A%2F%2=\r\nFwww.pinterest.com%2Fsecure%2Fautologin%2F%3Fod%3DFux7G1fLpQxdgu%252FAlq7%2=\r\n52FO0wnXhG3mrIvODBVUav9ko5yjUdnc84zWzwWN%252BPJyxYElh86K0WCnm9Th%252F6kUWW%=\r\n252FfcKmC7yJz0qo50Ss4EaaUahZGfo19MQS%252BIeP4Dlvz0hgCjvxIS4R%252BPMAF%252FG=\r\nl9BpWrQ%253D%253D%26user_id%3DNjEwMDk3MjE4MTc4OTE0MjA0%26next%3D%252Fpin%25=\r\n2F806707351985179613%252F%253Futm_campaign%253Dpopular_pins%2526e_t%253De5a=\r\nb90da0abf493b944b3c27261acfe3%2526utm_content%253D806707351985179613%2526ut=\r\nm_source%253D31%2526utm_term%253D1%2526utm_medium%253D2012'

parse.unquote_plus(quopri.decodestring(s).decode('utf-8'))
'href="https://post.pinterest.com/f/a/WRi5L7G_wfTW1BovkyUGuw~~/AAAAAQA~/RgRe6WEYPwRXCXBpbnRlcmVzdEIKABwY3AZdrwvFllIXdHVyZ2VvbmNocmlzM0BnbWFpbC5jb21YBAAAAAA~?target=https://www.pinterest.com/secure/autologin/?od=Fux7G1fLpQxdgu%2FAlq7%2FO0wnXhG3mrIvODBVUav9ko5yjUdnc84zWzwWN%2BPJyxYElh86K0WCnm9Th%2F6kUWW%2FfcKmC7yJz0qo50Ss4EaaUahZGfo19MQS%2BIeP4Dlvz0hgCjvxIS4R%2BPMAF%2FGl9BpWrQ%3D%3D&user_id=NjEwMDk3MjE4MTc4OTE0MjA0&next=%2Fpin%2F806707351985179613%2F%3Futm_campaign%3Dpopular_pins%26e_t%3De5ab90da0abf493b944b3c27261acfe3%26utm_content%3D806707351985179613%26utm_source%3D31%26utm_term%3D1%26utm_medium%3D2012'
...