<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="books_v1.html">Books API</a> . <a href="books_v1.layers.html">layers</a> . <a href="books_v1.layers.annotationData.html">annotationData</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(volumeId, layerId, annotationDataId, allowWebDefinitions=None, w=None, contentVersion=None, h=None, locale=None, source=None, scale=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the annotation data.</p>
<p class="toc_element">
  <code><a href="#list">list(volumeId, layerId, updatedMax=None, updatedMin=None, source=None, scale=None, pageToken=None, annotationDataId=None, h=None, w=None, locale=None, maxResults=None, contentVersion=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the annotation data for a volume and layer.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(volumeId, layerId, annotationDataId, allowWebDefinitions=None, w=None, contentVersion=None, h=None, locale=None, source=None, scale=None, x__xgafv=None)</code>
  <pre>Gets the annotation data.

Args:
  volumeId: string, The volume to retrieve annotations for. (required)
  layerId: string, The ID for the layer to get the annotations. (required)
  annotationDataId: string, The ID of the annotation data to retrieve. (required)
  allowWebDefinitions: boolean, For the dictionary layer. Whether or not to allow web definitions.
  w: integer, The requested pixel width for any images. If width is provided height must also be provided.
  contentVersion: string, The content version for the volume you are trying to retrieve.
  h: integer, The requested pixel height for any images. If height is provided width must also be provided.
  locale: string, The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: &#x27;en_US&#x27;.
  source: string, String to identify the originator of this request.
  scale: integer, The requested scale for the image.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;encodedData&quot;: &quot;A String&quot;, # Base64 encoded data for this annotation data.
    &quot;id&quot;: &quot;A String&quot;, # Unique id for this annotation data.
    &quot;data&quot;: { # JSON encoded data for this dictionary annotation data. Emitted with name &#x27;data&#x27; in JSON output. Either this or geo_data will be populated.
      &quot;common&quot;: {
        &quot;title&quot;: &quot;A String&quot;, # The display title and localized canonical name to use when searching for this entity on Google search.
      },
      &quot;dict&quot;: {
        &quot;source&quot;: { # The source, url and attribution for this dictionary data.
          &quot;url&quot;: &quot;A String&quot;,
          &quot;attribution&quot;: &quot;A String&quot;,
        },
        &quot;words&quot;: [
          {
            &quot;source&quot;: { # The words with different meanings but not related words, e.g. &quot;go&quot; (game) and &quot;go&quot; (verb).
              &quot;attribution&quot;: &quot;A String&quot;,
              &quot;url&quot;: &quot;A String&quot;,
            },
            &quot;senses&quot;: [
              {
                &quot;pronunciation&quot;: &quot;A String&quot;,
                &quot;source&quot;: {
                  &quot;attribution&quot;: &quot;A String&quot;,
                  &quot;url&quot;: &quot;A String&quot;,
                },
                &quot;definitions&quot;: [
                  {
                    &quot;examples&quot;: [
                      {
                        &quot;source&quot;: {
                          &quot;attribution&quot;: &quot;A String&quot;,
                          &quot;url&quot;: &quot;A String&quot;,
                        },
                        &quot;text&quot;: &quot;A String&quot;,
                      },
                    ],
                    &quot;definition&quot;: &quot;A String&quot;,
                  },
                ],
                &quot;pronunciationUrl&quot;: &quot;A String&quot;,
                &quot;conjugations&quot;: [
                  {
                    &quot;value&quot;: &quot;A String&quot;,
                    &quot;type&quot;: &quot;A String&quot;,
                  },
                ],
                &quot;synonyms&quot;: [
                  {
                    &quot;source&quot;: {
                      &quot;url&quot;: &quot;A String&quot;,
                      &quot;attribution&quot;: &quot;A String&quot;,
                    },
                    &quot;text&quot;: &quot;A String&quot;,
                  },
                ],
                &quot;syllabification&quot;: &quot;A String&quot;,
                &quot;partOfSpeech&quot;: &quot;A String&quot;,
              },
            ],
            &quot;examples&quot;: [
              {
                &quot;source&quot;: {
                  &quot;url&quot;: &quot;A String&quot;,
                  &quot;attribution&quot;: &quot;A String&quot;,
                },
                &quot;text&quot;: &quot;A String&quot;,
              },
            ],
            &quot;derivatives&quot;: [
              {
                &quot;text&quot;: &quot;A String&quot;,
                &quot;source&quot;: {
                  &quot;attribution&quot;: &quot;A String&quot;,
                  &quot;url&quot;: &quot;A String&quot;,
                },
              },
            ],
          },
        ],
      },
      &quot;kind&quot;: &quot;A String&quot;,
    },
    &quot;kind&quot;: &quot;A String&quot;, # Resource Type
    &quot;volumeId&quot;: &quot;A String&quot;, # The volume id for this data. *
    &quot;selfLink&quot;: &quot;A String&quot;, # URL for this resource. *
    &quot;layerId&quot;: &quot;A String&quot;, # The Layer id for this data. *
    &quot;annotationType&quot;: &quot;A String&quot;, # The type of annotation this data is for.
    &quot;updated&quot;: &quot;A String&quot;, # Timestamp for the last time this data was updated. (RFC 3339 UTC date-time format).
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(volumeId, layerId, updatedMax=None, updatedMin=None, source=None, scale=None, pageToken=None, annotationDataId=None, h=None, w=None, locale=None, maxResults=None, contentVersion=None, x__xgafv=None)</code>
  <pre>Gets the annotation data for a volume and layer.

Args:
  volumeId: string, The volume to retrieve annotation data for. (required)
  layerId: string, The ID for the layer to get the annotation data. (required)
  updatedMax: string, RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).
  updatedMin: string, RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).
  source: string, String to identify the originator of this request.
  scale: integer, The requested scale for the image.
  pageToken: string, The value of the nextToken from the previous page.
  annotationDataId: string, The list of Annotation Data Ids to retrieve. Pagination is ignored if this is set. (repeated)
  h: integer, The requested pixel height for any images. If height is provided width must also be provided.
  w: integer, The requested pixel width for any images. If width is provided height must also be provided.
  locale: string, The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: &#x27;en_US&#x27;.
  maxResults: integer, Maximum number of results to return
  contentVersion: string, The content version for the requested volume.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to pass in for pagination for the next page. This will not be present if this request does not have more results.
    &quot;kind&quot;: &quot;A String&quot;, # Resource type
    &quot;items&quot;: [ # A list of Annotation Data.
      {
        &quot;layerId&quot;: &quot;A String&quot;, # The Layer id for this data. *
        &quot;volumeId&quot;: &quot;A String&quot;, # The volume id for this data. *
        &quot;selfLink&quot;: &quot;A String&quot;, # URL for this resource. *
        &quot;updated&quot;: &quot;A String&quot;, # Timestamp for the last time this data was updated. (RFC 3339 UTC date-time format).
        &quot;data&quot;: { # JSON encoded data for this geo annotation data. Emitted with name &#x27;data&#x27; in JSON output. Either this or dict_data will be populated.
          &quot;kind&quot;: &quot;A String&quot;,
          &quot;common&quot;: {
            &quot;snippet&quot;: &quot;A String&quot;, # The description for this location.
            &quot;title&quot;: &quot;A String&quot;, # The display title and localized canonical name to use when searching for this entity on Google search.
            &quot;lang&quot;: &quot;A String&quot;, # The language of the information url and description.
            &quot;previewImageUrl&quot;: &quot;A String&quot;, # The URL for the preview image information.
            &quot;snippetUrl&quot;: &quot;A String&quot;, # The URL for information for this location. Ex: wikipedia link.
          },
          &quot;geo&quot;: {
            &quot;cachePolicy&quot;: &quot;A String&quot;, # The cache policy active for this data. EX: UNRESTRICTED, RESTRICTED, NEVER
            &quot;latitude&quot;: 3.14, # The latitude of the location.
            &quot;countryCode&quot;: &quot;A String&quot;, # The country code of the location.
            &quot;zoom&quot;: 42, # The Zoom level to use for the map. Zoom levels between 0 (the lowest zoom level, in which the entire world can be seen on one map) to 21+ (down to individual buildings). See: https: //developers.google.com/maps/documentation/staticmaps/#Zoomlevels
            &quot;mapType&quot;: &quot;A String&quot;, # The type of map that should be used for this location. EX: HYBRID, ROADMAP, SATELLITE, TERRAIN
            &quot;viewport&quot;: { # The viewport for showing this location. This is a latitude, longitude rectangle.
              &quot;hi&quot;: {
                &quot;latitude&quot;: 3.14,
                &quot;longitude&quot;: 3.14,
              },
              &quot;lo&quot;: {
                &quot;longitude&quot;: 3.14,
                &quot;latitude&quot;: 3.14,
              },
            },
            &quot;boundary&quot;: [ # The boundary of the location as a set of loops containing pairs of latitude, longitude coordinates.
              &quot;A String&quot;,
            ],
            &quot;longitude&quot;: 3.14, # The longitude of the location.
          },
        },
        &quot;id&quot;: &quot;A String&quot;, # Unique id for this annotation data.
        &quot;encodedData&quot;: &quot;A String&quot;, # Base64 encoded data for this annotation data.
        &quot;kind&quot;: &quot;A String&quot;, # Resource Type
        &quot;annotationType&quot;: &quot;A String&quot;, # The type of annotation this data is for.
      },
    ],
    &quot;totalItems&quot;: 42, # The total number of volume annotations found.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>