# Call the Data Portability API Using a Python Script

In this quickstart, you obtain an OAuth token for your account, and you send
requests to the Data Portability API endpoints using a Python script.

## What you learn

In this quickstart you use a Python script to:

- Send an authenticated request to the `InitiatePortabilityArchive` endpoint by providing a valid OAuth token. The response is a valid `job_id`.
- Send an authenticated request to the `GetPortabilityArchiveState` endpoint and download the data. The response should contain a valid job state, and when the job is complete, a signed URL.
- Store OAuth token with time-based access for later reuse.
- Send an authenticated request to the `ResetAuthorization` endpoint. This request revokes all user-granted OAuth scopes.
- Send an authenticated request to the `InitiatePortabilityArchive` endpoint by providing a valid OAuth token along with `start_time` or `end_time` to apply a time filter to your request.

## Prerequisites

To run this quickstart, you need to:

- Verify that the Data Portability API is available to you. For a list of supported countries and regions, see [Common Questions](https://support.google.com/accounts/answer/14452558) on the "Share a copy of your data with a third party" page.
- Complete the [setup steps](https://developers.google.com/data-portability/user-guide/setup) for the Data Portability API, and verify that you're using a new project.
- Obtain access to an account owned or controlled by your organization. This account's search activity data is exported in this quickstart.

Before you begin this quickstart, you also need to set up OAuth, Python, and the
OAuth package for the Python client libraries.

### Set up OAuth

- Follow the steps to configure OAuth for [installed applications](https://googleapis.github.io/google-api-python-client/docs/oauth-installed.html). This flow is similar to the OAuth flow for [web server applications](https://developers.google.com/identity/protocols/oauth2/web-server). When you configure your OAuth client ID:
  - The **Application type** should be **Desktop app**.
  - After you create the client ID, download the client secret in JSON format, and name the file: `client_secrets.json`.
  - When you [configure scopes](https://developers.google.com/data-portability/user-guide/configure-oauth) for the Data Portability API, note that this quickstart uses these resource groups:
    - [`myactivity.search`](https://developers.google.com/data-portability/schema-reference/my_activity): https://www.googleapis.com/auth/dataportability.myactivity.search
    - [`myactivity.youtube`](https://developers.google.com/data-portability/schema-reference/my_activity): https://www.googleapis.com/auth/dataportability.myactivity.youtube

### Set up Python

You need to set up Python on your local machine to run the script used in this
quickstart. To setup Python:

- Install the [Pip](https://pypi.org/project/pip/) package management tool and [Python 3.11](https://www.python.org/downloads/) (or higher).
- Install the [Google API Client Library for Python](https://github.com/googleapis/google-api-python-client/blob/main/docs/start.md).
- Install the `google_auth_oauthlib` package for the Python client library by
  running this command. This package provides [oauthlib](https://oauthlib.readthedocs.io/) integration
  with `google-auth`---the Google authentication library for Python.

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

## Run the script

This script uses a localhost redirect in the OAuth flow. This option requires
the application to listen on a localhost port, and then open the system browser
to initiate the OAuth authorization flow.

Click this link to open the script, or download a copy of the script by
right-clicking the link.

[Data Portability API Python quickstart script](https://developers.google.com/static/data-portability/user-guide/data-portability-quickstart.py)

To run the script and export the full data corpus, enter this command:

    python3 data-portability-quickstart.py

To use different scopes, specify them using `--resources`, for example:

    python3 data-portability-quickstart.py --resources myactivity.shopping myactivity.play

To apply [time filtering](https://developers.google.com/data-portability/user-guide/time-filter), use the same script with `start_time`
and `end_time` flags. For example:

    python3 data-portability-quickstart.py --start_time 2023-01-01T12:00:00Z --end_time 2024-01-01T12:00:00Z

The actions taken by the script are detailed in the comments.