<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="games_v1.html">Google Play Game Services</a> . <a href="games_v1.metagame.html">metagame</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="#getMetagameConfig">getMetagameConfig(x__xgafv=None)</a></code></p>
<p class="firstline">Return the metagame configuration data for the calling application.</p>
<p class="toc_element">
  <code><a href="#listCategoriesByPlayer">listCategoriesByPlayer(playerId, collection, language=None, maxResults=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List play data aggregated per category for the player corresponding to `playerId`.</p>
<p class="toc_element">
  <code><a href="#listCategoriesByPlayer_next">listCategoriesByPlayer_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="getMetagameConfig">getMetagameConfig(x__xgafv=None)</code>
  <pre>Return the metagame configuration data for the calling application.

Args:
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The metagame config resource
  &quot;currentVersion&quot;: 42, # Current version of the metagame configuration data. When this data is updated, the version number will be increased by one.
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#metagameConfig`.
  &quot;playerLevels&quot;: [ # The list of player levels.
    { # 1P/3P metadata about a user&#x27;s level.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#playerLevel`.
      &quot;level&quot;: 42, # The level for the user.
      &quot;maxExperiencePoints&quot;: &quot;A String&quot;, # The maximum experience points for this level.
      &quot;minExperiencePoints&quot;: &quot;A String&quot;, # The minimum experience points for this level.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="listCategoriesByPlayer">listCategoriesByPlayer(playerId, collection, language=None, maxResults=None, pageToken=None, x__xgafv=None)</code>
  <pre>List play data aggregated per category for the player corresponding to `playerId`.

Args:
  playerId: string, A player ID. A value of `me` may be used in place of the authenticated player&#x27;s ID. (required)
  collection: string, The collection of categories for which data will be returned. (required)
    Allowed values
      COLLECTION_UNSPECIFIED - Default value. This value is unused.
      ALL - Retrieve data for all categories. This is the default.
  language: string, The preferred language to use for strings returned by this method.
  maxResults: integer, The maximum number of category resources to return in the response, used for paging. For any response, the actual number of category resources returned may be less than the specified `maxResults`.
  pageToken: string, The token returned by the previous request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A third party list metagame categories response.
  &quot;items&quot;: [ # The list of categories with usage data.
    { # Data related to individual game categories.
      &quot;category&quot;: &quot;A String&quot;, # The category name.
      &quot;experiencePoints&quot;: &quot;A String&quot;, # Experience points earned in this category.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#category`.
    },
  ],
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#categoryListResponse`.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token corresponding to the next page of results.
}</pre>
</div>

<div class="method">
    <code class="details" id="listCategoriesByPlayer_next">listCategoriesByPlayer_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>