[PYTHON] Afficher tout le corps de l'e-mail du groupe de messagerie recherché par Gmail et réduit

introduction

Depuis que la fonction de sortie de document de gmail qui était dans Labs of Gmail a disparu, j'ai essayé de l'écrire facilement avec python en utilisant l'API Gmail de Google Apps.

Préparation

Lisez la documentation suivante pour obtenir client_secret.json.

Tout ce que vous avez à faire est de définir l'application et de la télécharger pour pouvoir le faire en une minute environ.

Installation

Installez le client api avec pip.

$ pip install --upgrade google-api-python-client

Exemple de code

Dans le cas de l'exemple d'adresse ci-dessus, il se termine par la sortie de l'étiquette, alors ajoutez le code pour obtenir le corps du message.

sample.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

# from __future__ import print_function
import httplib2
import os
import base64
import logging
import traceback

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Gmail API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(
        credential_dir,
        'gmail-python-quickstart.json'
    )

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else:  # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials


def extract_message(service, message):
    try:
        msg_obj = service.users().messages().get(userId='me', id=message['id'], format='raw').execute()
        return base64.urlsafe_b64decode(msg_obj['raw'].encode('ASCII'))
    except:
        logging.error(traceback.format_exc())


def extract_message_body(service, message):
    try:
        email_str = extract_message(service, message)
        subject_idx = email_str.find('Subject:')
        body_idx = email_str[subject_idx:].find(os.linesep)
        return email_str[subject_idx + body_idx:].strip()
    except:
        logging.error(traceback.format_exc())


def main():
    """Shows basic usage of the Gmail API.

    Creates a Gmail API service object and outputs a list of label names
    of the user's Gmail account.
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('gmail', 'v1', http=http)

    results = service.users().messages().list(userId='me', q="").execute()
    print results
    messages = results.get('messages', [])

    if not messages:
        print 'No messages found.'
    else:
        print 'messages:'
        for message in messages:
            print 'message body: ', extract_message_body(service, message)


if __name__ == '__main__':
    main()

Le mot-clé de recherche est jeté dans q de la fonction de liste sous forme de chaîne de caractères. Le format est le même que celui de la recherche gmail.

Recommended Posts

Afficher tout le corps de l'e-mail du groupe de messagerie recherché par Gmail et réduit
Comment extraire les conditions (acquérir tous les éléments du Groupe qui remplissent les conditions) pour Groupe par Groupe
Afficher progressivement la sortie de la commande exécutée par le sous-processus.
Sauvegardez la sortie de GAN une par une ~ Avec l'implémentation de GAN par PyTorch ~
Obtenir toutes les adresses IP des instances du groupe d'autoscaling