# Samples by API

## ![](http://www.google.com/images/icons/product/doubleclick-32.gif) Ad Exchange Buyer API

Lets you manage your Ad Exchange Buyer account.

Documentation for the Ad Exchange Buyer API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/adexchangebuyer/v1.3/python/latest/).

<table>
  <tr>
    <td><a href="adexchangebuyer">samples/adexchangebuyer</a></td>
    <td>Samples for working with the Ad Exchange Buyer API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/adsense-32.png) AdSense Management API

Gives AdSense publishers access to their inventory and the ability to generate
reports.

Documentation for the AdSense Management API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/adsense/v1.3/python/latest/).

<table>
  <tr>
    <td><a href="adsense">samples/adsense</a></td>
    <td>Collection of command-line samples for the AdSense Management API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/analytics-32.png) Google Analytics API

View and manage your Google Analytics data.

Documentation for the Google Analytics API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/analytics/v3/python/latest/).

<table>
  <tr>
    <td><a href="analytics">samples/analytics</a></td>
    <td>Command-line samples for producing reports with the Analytics API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/search-32.gif) Enterprise Audit API

Lets you access user activities in your enterprise made through various
applications.

Documentation for the Enterprise Audit API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/audit/v1/python/latest/).

<table>
  <tr>
    <td><a href="audit">samples/audit</a></td>
    <td>Prints the activities for a domain using the Audit API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/blogger-32.png) Blogger API

API for access to the data within Blogger.

Documentation for the Blogger API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/blogger/v3/python/latest/).

<table>
  <tr>
    <td><a href="blogger">samples/blogger</a></td>
    <td>Retrieve the list of blogs and their posts for a user</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/search-32.gif) Google Maps Coordinate API

Lets you view and manage jobs in a Coordinate team.

Documentation for the Google Maps Coordinate API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/coordinate/v1/python/latest/).

<table>
  <tr>
    <td><a href="coordinate">samples/coordinate</a></td>
    <td>Demonstrates how to use the Google Coordinate API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/search-32.gif) CustomSearch API

Lets you search over a website or collection of websites.

Documentation for the CustomSearch API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/customsearch/v1/python/latest/).

<table>
  <tr>
    <td><a href="customsearch">samples/customsearch</a></td>
    <td>Search from the command-line</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/feature/filing_cabinet_search-g32.png) APIs Discovery Service

Lets you discover information about other Google APIs, such as what APIs are
available, the resource and method details for each API.

Documentation for the APIs Discovery Service in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/discovery/v1/python/latest/).

<table>
  <tr>
    <td><a href="api-python-client-doc">samples/api-python-client-doc</a></td>
    <td>
    Application serving up the Python help documentation for each API
    (see <a href="http://api-python-client-doc.appspot.com/">here</a>)
    </td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/search-32.gif) Groups Settings API

Lets you manage permission levels and related settings of a group.

Documentation for the Groups Settings API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/groupssettings/v1/python/latest/).

<table>
  <tr>
    <td><a href="groupssettings">samples/groupssettings</a></td>
    <td>Sample for the Groups Settings API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/gplus-32.png) Google+ API

The Google+ API enables developers to build on top of the Google+ platform.

Documentation for the Google+ API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/plus/v1/python/latest/).

<table>
  <tr>
    <td><a href="appengine">samples/appengine</a></td>
    <td>Demonstrates the people API and OAuth 2.0 decorator for Google App
    Engine applications</td>
  </tr>
  <tr>
    <td><a href="plus">samples/plus</a></td>
    <td>Loop over all a user's activities and print a short snippet</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/feature/predictionapi-32.png) Prediction API

Lets you access a cloud hosted machine learning service that makes it easy to
build smart apps

Documentation for the Prediction API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/prediction/v1.6/python/latest/).

<table>
  <tr>
    <td><a href="prediction">samples/prediction</a></td>
    <td>Command-line application that trains on your input data</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/search-32.gif) Search Console API

Add sites to a Search Console account, retrieve site data and diagnostics, and submit sitemaps.

Documentation for the Search Console API in
[Google Developers](https://developers.google.com/webmaster-tools/v3/).

<table>
  <tr>
    <td><a href="searchconsole">samples/searchconsole</a></td>
    <td>Command-line samples for Search Console API (formerly known as Webmaster Tools API)</td>
  </tr>
</table>


## ![](http://www.google.com/images/icons/product/search-32.gif) Search API For Shopping

Lets you search over product data.

Documentation for the Search API For Shopping in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/shopping/v1/python/latest/).

<table>
  <tr>
    <td><a href="searchforshopping">samples/searchforshopping</a></td>
    <td>Demonstrates the query capabilities for the Search API for Shopping</td>
  </tr>
</table>

## ![](https://www.google.com/images/icons/product/compute_engine-32.png) Cloud Compute Engine API

Lets you manage the Google Compute Engine instances in your projects.

<table>
  <tr>
    <td><a href="compute">samples/compute</a></td>
    <td>Creates a Google Compute Engine instance to modify a samples image and upload the result
        to a Cloud Storage bucket, then deletes the instance.</td>
  </tr>
</table>

## ![](https://www.google.com/images/icons/product/cloud_storage-32.png) Cloud Storage API

Lets you store and retrieve potentially-large, immutable data objects.

Documentation for the Cloud Storage API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/storage/v1beta2/python/latest/).

<table>
  <tr>
    <td><a href="storage">samples/storage</a></td>
    <td>Uploads and downloads files between Google Cloud Storage and the local
    filesystem using the Google APIs Python Client Library</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/tasks-32.png) Tasks API

Lets you manage your tasks and task lists.

Documentation for the Tasks API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/tasks/v1/python/latest/).

<table>
  <tr>
    <td><a href="tasks_appengine">samples/tasks_appengine</a></td>
    <td>Sample code for the guide
    <a href="https://cloud.google.com/appengine/articles/python/getting_started_with_tasks_api">
    Getting Started with Google Tasks API</a></td>
  </tr>
  <tr>
    <td><a href="service_account">samples/service_account</a></td>
    <td>Demonstrates working with service accounts</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/translate-32.png) Translate API

Lets you translate text from one language to another.

Documentation for the Translate API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/translate/v2/python/latest/).

<table>
  <tr>
    <td><a href="translate">samples/translate</a></td>
    <td>Demonstrates the Translate API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/search-32.gif) URL Shortener API

Lets you create, inspect, and manage `goo.gl` short URLs.

Documentation for the URL Shortener API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/urlshortener/v1/python/latest/).

<table>
  <tr>
    <td><a href="urlshortener">samples/urlshortener</a></td>
    <td>Shortens a URL with the URL Shortener API</td>
  </tr>
</table>

## ![](http://www.google.com/images/icons/product/youtube-32.png) YouTube Data API

Programmatic access to YouTube features.

Documentation for the YouTube Data API in
[PyDoc](https://google-api-client-libraries.appspot.com/documentation/youtube/v3/python/latest/).

<table>
  <tr>
    <td><a href="youtube">samples/youtube</a></td>
    <td>Demonstrates YouTube APIs</td>
  </tr>
</table>

# Pagination Samples

<table>
  <tr>
    <td><a href="plus">samples/plus</a></td>
    <td>Loop over all a user's activities and print a short snippet</td>
  </tr>
</table>

# OAuth 2.0 Samples

<table>
  <tr>
    <td><a href="appengine">samples/appengine</a></td>
    <td>Demonstrates the people API and OAuth 2.0 decorator for Google App
    Engine applications</td>
  </tr>
  <tr>
    <td><a href="service_account">samples/service_account</a></td>
    <td>Demonstrates working with service accounts</td>
  </tr>
</table>

# Media Upload and Download Samples

<table>
  <tr>
    <td><a href="storage">samples/storage</a></td>
    <td>Uploads and downloads files between Google Cloud Storage and the local
    filesystem using the Google APIs Python Client Library</td>
  </tr>
  <tr>
    <td><a href="youtube">samples/youtube</a></td>
    <td>Demonstrates YouTube APIs</td>
  </tr>
</table>

# Command-line Samples

<table>
  <tr>
    <td><a href="adexchangebuyer">samples/adexchangebuyer</a></td>
    <td>Samples for working with the Ad Exchange Buyer API</td>
  </tr>
  <tr>
    <td><a href="adsense">samples/adsense</a></td>
    <td>Collection of command-line samples for the AdSense Management API</td>
  </tr>
  <tr>
    <td><a href="analytics">samples/analytics</a></td>
    <td>Command-line samples for producing reports with the Analytics API</td>
  </tr>
  <tr>
    <td><a href="audit">samples/audit</a></td>
    <td>Prints the activities for a domain using the Audit API</td>
  </tr>
  <tr>
    <td><a href="blogger">samples/blogger</a></td>
    <td>Retrieve the list of blogs and their posts for a user</td>
  </tr>
  <tr>
    <td><a href="coordinate">samples/coordinate</a></td>
    <td>Demonstrates how to use the Google Coordinate API</td>
  </tr>
  <tr>
    <td><a href="customsearch">samples/customsearch</a></td>
    <td>Search from the command-line</td>
  </tr>
  <tr>
    <td><a href="groupsettings">samples/groupsettings</a></td>
    <td>Sample for the Groups Settings API</td>
  </tr>
  <tr>
    <td><a href="plus">samples/plus</a></td>
    <td>Loop over all a user's activities and print a short snippet</td>
  </tr>
  <tr>
    <td><a href="prediction">samples/prediction</a></td>
    <td>Command-line application that trains on your input data</td>
  </tr>
  <tr>
    <td><a href="searchforshopping">samples/searchforshopping</a></td>
    <td>Demonstrates the query capabilities for the Search API for Shopping</td>
  </tr>
  <tr>
    <td><a href="storage">samples/storage</a></td>
    <td>Uploads and downloads files between Google Cloud Storage and the local
    filesystem using the Google APIs Python Client Library</td>
  </tr>
  <tr>
    <td><a href="translate">samples/translate</a></td>
    <td>Demonstrates the Translate API</td>
  </tr>
  <tr>
    <td><a href="urlshortener">samples/urlshortener</a></td>
    <td>Shortens a URL with the URL Shortener API</td>
  </tr>
  <tr>
    <td><a href="youtube">samples/youtube</a></td>
    <td>Demonstrates YouTube APIs</td>
  </tr>
</table>

# Google App Engine Samples

<table>
  <tr>
    <td><a href="api-python-client-doc">samples/api-python-client-doc</a></td>
    <td>
    Application serving up the Python help documentation for each API
    (see <a href="http://api-python-client-doc.appspot.com/">here</a>)
    </td>
  </tr>
  <tr>
    <td><a href="appengine">samples/appengine</a></td>
    <td>Demonstrates the people API and OAuth 2.0 decorator for Google App
    Engine applications</td>
  </tr>
  <tr>
    <td><a href="tasks_appengine">samples/tasks_appengine</a></td>
    <td>Sample code for the guide
    <a href="https://cloud.google.com/appengine/articles/python/getting_started_with_tasks_api">
    Getting Started with Google Tasks API</a></td>
  </tr>
</table>
