Google REST APIs

You might want to use one of Google’s REST APIs directly. To do this, you will need a Google API Client ID from the Google Developer Console - see Linking Anvil and Google for full instructions.

To request additional OAuth scopes, call anvil.google.auth.login() with a list of scope names. In this case we are requesting the ability to read the user’s GMail inbox with the GMail API.

# Log in and request access to a user's mailbox
anvil.google.auth.login(["https://www.googleapis.com/auth/gmail.readonly"])

Once logged in, you can get an access token for the current user’s session by calling anvil.google.auth.get_access_token(). This token is a string, and you can use it to make requests to the Google REST API. In this example, we are getting a list of threads in the user’s inbox using the GMail API.

access_token = anvil.google.auth.get_user_access_token()

email_threads = anvil.http.request(
    "https://www.googleapis.com/gmail/v1/users/me/threads",
    json=True, headers={
      'Authorization':
        'Bearer ' + access_token
    })

Access tokens expire within a short period of time (typically less than an hour). If you want to retain access after this time, you need to store a refresh token. This refresh token can be converted into an access token later by calling anvil.google.auth.refresh_access_token().

refresh_token = anvil.google.auth.get_user_refresh_token()

# ... some time later ...

access_token = anvil.google.auth.refresh_access_token(refresh_token)