<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="blogger_v3.html">Blogger API</a> . <a href="blogger_v3.comments.html">comments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(blogId, postId, commentId)</a></code></p>
<p class="firstline">Gets one comment by id.</p>
<p class="toc_element">
  <code><a href="#list">list(blogId, postId, startDate=None, fetchBodies=None, endDate=None, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Retrieves the comments for a blog, possibly filtered.</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(blogId, postId, commentId)</code>
  <pre>Gets one comment by id.

Args:
  blogId: string, ID of the blog to containing the comment. (required)
  postId: string, ID of the post to fetch posts from. (required)
  commentId: string, The ID of the comment to get. (required)

Returns:
  An object of the form:

    {
    "content": "A String", # The actual content of the comment. May include HTML markup.
    "kind": "blogger#comment", # The kind of this entry. Always blogger#comment
    "inReplyTo": { # Data about the comment this is in reply to.
      "id": "A String", # The identified of the parent of this comment.
    },
    "author": { # The author of this Comment.
      "url": "A String", # The URL of the Comment creator's Profile page.
      "image": { # The comment creator's avatar.
        "url": "A String", # The comment creator's avatar URL.
      },
      "displayName": "A String", # The display name.
      "id": "A String", # The identifier of the Comment creator.
    },
    "updated": "A String", # RFC 3339 date-time when this comment was last updated.
    "blog": { # Data about the blog containing this comment.
      "id": "A String", # The identifier of the blog containing this comment.
    },
    "published": "A String", # RFC 3339 date-time when this comment was published.
    "post": { # Data about the post containing this comment.
      "id": "A String", # The identifier of the post containing this comment.
    },
    "id": "A String", # The identifier for this resource.
    "selfLink": "A String", # The API REST URL to fetch this resource from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(blogId, postId, startDate=None, fetchBodies=None, endDate=None, pageToken=None, maxResults=None)</code>
  <pre>Retrieves the comments for a blog, possibly filtered.

Args:
  blogId: string, ID of the blog to fetch comments from. (required)
  postId: string, ID of the post to fetch posts from. (required)
  startDate: string, Earliest date of comment to fetch, a date-time with RFC 3339 formatting.
  fetchBodies: boolean, Whether the body content of the comments is included.
  endDate: string, Latest date of comment to fetch, a date-time with RFC 3339 formatting.
  pageToken: string, Continuation token if request is paged.
  maxResults: integer, Maximum number of comments to include in the result.

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # Pagination token to fetch the next page, if one exists.
    "items": [ # The List of Comments for a Post.
      {
        "content": "A String", # The actual content of the comment. May include HTML markup.
        "kind": "blogger#comment", # The kind of this entry. Always blogger#comment
        "inReplyTo": { # Data about the comment this is in reply to.
          "id": "A String", # The identified of the parent of this comment.
        },
        "author": { # The author of this Comment.
          "url": "A String", # The URL of the Comment creator's Profile page.
          "image": { # The comment creator's avatar.
            "url": "A String", # The comment creator's avatar URL.
          },
          "displayName": "A String", # The display name.
          "id": "A String", # The identifier of the Comment creator.
        },
        "updated": "A String", # RFC 3339 date-time when this comment was last updated.
        "blog": { # Data about the blog containing this comment.
          "id": "A String", # The identifier of the blog containing this comment.
        },
        "published": "A String", # RFC 3339 date-time when this comment was published.
        "post": { # Data about the post containing this comment.
          "id": "A String", # The identifier of the post containing this comment.
        },
        "id": "A String", # The identifier for this resource.
        "selfLink": "A String", # The API REST URL to fetch this resource from.
      },
    ],
    "kind": "blogger#commentList", # The kind of this entry. Always blogger#commentList
    "prevPageToken": "A String", # Pagination token to fetch the previous page, if one exists.
  }</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>