<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="plus_v1.html">Google+ API</a> . <a href="plus_v1.comments.html">comments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(commentId)</a></code></p>
<p class="firstline">Get a comment.</p>
<p class="toc_element">
  <code><a href="#list">list(activityId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">List all of the comments for an activity.</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="get">get(commentId)</code>
  <pre>Get a comment.

Args:
  commentId: string, The ID of the comment to get. (required)

Returns:
  An object of the form:

    {
    "inReplyTo": [ # The activity this comment replied to.
      {
        "url": "A String", # The url of the activity.
        "id": "A String", # The id of the activity.
      },
    ],
    "kind": "plus#comment", # Identifies this resource as a comment. Value: "plus#comment".
    "object": { # The object of this comment.
      "content": "A String", # The content of this comment.
      "objectType": "comment", # The object type of this comment. Possible values are:
          # - "comment" - A comment in reply to an activity.
    },
    "updated": "A String", # The time at which this comment was last updated. Formatted as an RFC 3339 timestamp.
    "actor": { # The person who posted this comment.
      "url": "A String", # A link to the person resource for this actor.
      "image": { # The image representation of this actor.
        "url": "A String", # The URL of the actor's profile photo. To re-size the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side.
      },
      "displayName": "A String", # The name of this actor, suitable for display.
      "id": "A String", # The ID of the actor.
    },
    "verb": "post", # This comment's verb, indicating what action was performed. Possible values are:
        # - "post" - Publish content to the stream.
    "published": "A String", # The time at which this comment was initially published. Formatted as an RFC 3339 timestamp.
    "id": "A String", # The ID of this comment.
    "selfLink": "A String", # Link to this comment resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(activityId, pageToken=None, maxResults=None)</code>
  <pre>List all of the comments for an activity.

Args:
  activityId: string, The ID of the activity to get comments for. (required)
  pageToken: string, The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
  maxResults: integer, The maximum number of comments to include in the response, used for paging. For any response, the actual number returned may be less than the specified maxResults.

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.
    "kind": "plus#commentFeed", # Identifies this resource as a collection of comments. Value: "plus#commentFeed".
    "title": "A String", # The title of this collection of comments.
    "items": [ # The comments in this page of results.
      {
        "inReplyTo": [ # The activity this comment replied to.
          {
            "url": "A String", # The url of the activity.
            "id": "A String", # The id of the activity.
          },
        ],
        "kind": "plus#comment", # Identifies this resource as a comment. Value: "plus#comment".
        "object": { # The object of this comment.
          "content": "A String", # The content of this comment.
          "objectType": "comment", # The object type of this comment. Possible values are:
              # - "comment" - A comment in reply to an activity.
        },
        "updated": "A String", # The time at which this comment was last updated. Formatted as an RFC 3339 timestamp.
        "actor": { # The person who posted this comment.
          "url": "A String", # A link to the person resource for this actor.
          "image": { # The image representation of this actor.
            "url": "A String", # The URL of the actor's profile photo. To re-size the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side.
          },
          "displayName": "A String", # The name of this actor, suitable for display.
          "id": "A String", # The ID of the actor.
        },
        "verb": "post", # This comment's verb, indicating what action was performed. Possible values are:
            # - "post" - Publish content to the stream.
        "published": "A String", # The time at which this comment was initially published. Formatted as an RFC 3339 timestamp.
        "id": "A String", # The ID of this comment.
        "selfLink": "A String", # Link to this comment resource.
      },
    ],
    "updated": "A String", # The time at which this collection of comments was last updated. Formatted as an RFC 3339 timestamp.
    "nextLink": "A String", # Link to the next page of activities.
    "id": "A String", # The ID of this collection of comments.
  }</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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>