Accessing and Using the Gmail and Blogger APIs with Python

Published on 31 March 2024
5 min read
API
Gmail
Blogger
Python
Programming
Tutorial
Accessing and Using the Gmail and Blogger APIs with Python

Introduction

The Gmail and Blogger APIs provide powerful, flexible, and easy-to-use ways to manage your email and blog content programmatically. This blog post will guide you through the process of accessing and using these APIs with Python, covering everything from initial setup to sending your first email and creating blog posts.

Setting Up Your Google Cloud Project

To use the Gmail and Blogger APIs, you need to set up a project on Google Cloud and enable the necessary APIs.

  1. Create a Google Cloud Project:

    Go to the Google Cloud Console, and create a new project.

    Creating a Google Cloud Project
  2. Enable the Gmail and Blogger APIs:

    Navigate to the Gmail API page and Blogger API page, and enable them for your project.

    Enabling the Gmail and Blogger APIs
  3. Set Up OAuth 2.0 Credentials:

    Go to the “Credentials” page, and create OAuth 2.0 Client IDs. Configure the consent screen, and then create credentials for a web application.

    Setting up OAuth 2.0 credentials

    Download the JSON file containing your client credentials.

Installing Required Libraries

To interact with the Gmail and Blogger APIs using Python, you need to install the necessary libraries. Use the following command to install them:

bash
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Authenticating and Authorizing Your Application

Next, you need to authenticate and authorize your application to access Gmail and Blogger data.

python
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# If modifying these SCOPES, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/blogger']

def authenticate(scopes):
    creds = None
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', scopes)
    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.json', 'w') as token:
            token.write(creds.to_json())
    return creds

def main():
    creds = authenticate(SCOPES)
    gmail_service = build('gmail', 'v1', credentials=creds)
    blogger_service = build('blogger', 'v3', credentials=creds)
    
    # Call the Gmail API
    results = gmail_service.users().labels().list(userId='me').execute()
    labels = results.get('labels', [])

    if not labels:
        print('No labels found.')
    else:
        print('Labels:')
        for label in labels:
            print(label['name'])

    # Call the Blogger API
    blogs = blogger_service.blogs().listByUser(userId='self').execute()
    print('Blogs:')
    for blog in blogs.get('items', []):
        print(blog['name'])

if __name__ == '__main__':
    main()

Sending an Email with the Gmail API

With authentication set up, you can now send an email using the Gmail API.

python
import base64
from email.mime.text import MIMEText
from googleapiclient.errors import HttpError

def create_message(sender, to, subject, message_text):
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
    return {'raw': raw}

def send_message(service, user_id, message):
    try:
        message = service.users().messages().send(userId=user_id, body=message).execute()
        print(f'Message Id: {message["id"]}')
        return message
    except HttpError as error:
        print(f'An error occurred: {error}')
        return None

def main():
    creds = authenticate(SCOPES)
    service = build('gmail', 'v1', credentials=creds)
    sender = "your-email@gmail.com"
    to = "recipient-email@gmail.com"
    subject = "Test Email"
    message_text = "Hello, this is a test email from the Gmail API!"

    message = create_message(sender, to, subject, message_text)
    send_message(service, 'me', message)

if __name__ == '__main__':
    main()

Creating a Blog Post with the Blogger API

Now, let’s create a new blog post using the Blogger API.

python
def create_blog_post(service, blog_id, title, content):
    post = {
        "kind": "blogger#post",
        "blog": {
            "id": blog_id
        },
        "title": title,
        "content": content
    }
    return service.posts().insert(blogId=blog_id, body=post).execute()

def main():
    creds = authenticate(SCOPES)
    service = build('blogger', 'v3', credentials=creds)
    blog_id = 'your-blog-id'
    title = "Test Blog Post"
    content = "This is a test blog post created using the Blogger API."

    post = create_blog_post(service, blog_id, title, content)
    print(f'Post created: {post["url"]}')

if __name__ == '__main__':
    main()

Using the Python Package

To make the process of interacting with the Gmail and Blogger APIs easier, I’ve created a Python package. This package provides simple interfaces for common tasks. Here’s how you can use it.

Gmail Class Examples

  1. Sending an Email
python
from gmail import Gmail

gmail = Gmail('credentials.json', 'token.json')
gmail.send_email(
    sender="your-email@gmail.com",
    to="recipient-email@gmail.com",
    subject="Test Email from Package",
    message_text="This is a test email sent using the Gmail package."
)
  1. Listing Labels
python
labels = gmail.list_labels()
print("Labels:")
for label in labels:
    print(label)
  1. Reading Emails
python
emails = gmail.read_emails()
print("Emails:")
for email in emails:
    print(f"From: {email['from']}, Subject: {email['subject']}")

Blogger Class Examples

  1. Creating a Blog Post
python
from blogger import Blogger

blogger = Blogger('credentials.json', 'token.json')
blogger.create_post(
    blog_id='your-blog-id',
    title="Test Post from Package",
    content="This is a test post created using the Blogger package."
)
  1. Listing Blogs
python
blogs = blogger.list_blogs()
print("Blogs:")
for blog in blogs:
    print(blog)
  1. Reading Blog Posts
python
posts = blogger.list_posts(blog_id='your-blog-id')
print("Posts:")
for post in posts:
    print(f"Title: {post['title']}, URL: {post['url']}")

Conclusion

Using the Gmail and Blogger APIs in Python opens up a world of possibilities for automating email and blog tasks. From sending and reading emails to creating and managing blog posts, these APIs provide a comprehensive set of features. By following this guide and using the provided Python package, you should now be able to set up your Google Cloud project, authenticate your application, and perform basic operations using the Gmail and Blogger APIs.

For more detailed information, refer to the Gmail API documentation and Blogger API documentation. Additionally, you can find the source code for this guide on GitHub.

Happy coding!

Powered by SvelteKit. Icons by Iconoir.