Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/youtubeAnalytics_v2.groupItems.html b/docs/dyn/youtubeAnalytics_v2.groupItems.html
new file mode 100644
index 0000000..be4d886
--- /dev/null
+++ b/docs/dyn/youtubeAnalytics_v2.groupItems.html
@@ -0,0 +1,493 @@
+<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="youtubeAnalytics_v2.html">YouTube Analytics API</a> . <a href="youtubeAnalytics_v2.groupItems.html">groupItems</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(onBehalfOfContentOwner=None, id=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Removes an item from a group.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(body, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a group item.</p>
+<p class="toc_element">
+  <code><a href="#list">list(onBehalfOfContentOwner=None, groupId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns a collection of group items that match the API request parameters.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(onBehalfOfContentOwner=None, id=None, x__xgafv=None)</code>
+  <pre>Removes an item from a group.
+
+Args:
+  onBehalfOfContentOwner: string, This parameter can only be used in a properly authorized request. **Note:**
+This parameter is intended exclusively for YouTube content partners that
+own and manage many different YouTube channels.
+
+The `onBehalfOfContentOwner` parameter indicates that the request's
+authorization credentials identify a YouTube user who is acting on behalf
+of the content owner specified in the parameter value. It allows content
+owners to authenticate once and get access to all their video and channel
+data, without having to provide authentication credentials for each
+individual channel. The account that the user authenticates with must be
+linked to the specified YouTube content owner.
+  id: string, The `id` parameter specifies the YouTube group item ID of the group item
+that is being deleted.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Empty response.
+    "errors": { # Request Error information. # Apiary error details
+        #
+        # The presence of an error field signals that the operation
+        # has failed.
+      "code": "A String", # Global error code. Deprecated and ignored.
+          # Set custom error codes in ErrorProto.domain and ErrorProto.code
+          # instead.
+      "requestId": "A String", # Request identifier generated by the service, which can be
+          # used to identify the error in the logs
+      "error": [ # Specific error description and codes
+        { # Describes one specific error.
+          "domain": "A String", # Error domain. RoSy services can define their own
+              # domain and error codes. This should normally be
+              # the name of an enum type, such as: gdata.CoreErrorDomain
+          "code": "A String", # Error code in the error domain. This should correspond to
+              # a value of the enum type whose name is in domain. See
+              # the core error domain in error_domain.proto.
+          "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
+              #
+              # Please set domain, code and arguments whenever possible instead of this
+              # error message so that external APIs can build safe error messages
+              # themselves.
+              #
+              # External messages built in a RoSy interface will most likely refer to
+              # information and concepts that are not available externally and should not
+              # be exposed. It is safer if external APIs can understand the errors and
+              # decide what the error message should look like.
+          "debugInfo": "A String", # Debugging information, which should not be
+              # shared externally.
+          "locationType": "A String",
+          "argument": [ # Error arguments, to be used when building user-friendly error messages
+              # given the error domain and code.  Different error codes require different
+              # arguments.
+            "A String",
+          ],
+          "location": "A String", # Location of the error, as specified by the location type.
+              #
+              # If location_type is PATH, this should be a path to a field that's
+              # relative to the request, using FieldPath notation
+              # (net/proto2/util/public/field_path.h).
+              #
+              # Examples:
+              #   authenticated_user.gaia_id
+              #   resource.address[2].country
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(body, onBehalfOfContentOwner=None, x__xgafv=None)</code>
+  <pre>Creates a group item.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A group item.
+    "kind": "A String", # Identifies the API resource's type. The value will be `youtube#groupItem`.
+    "errors": { # Request Error information. # Apiary error details
+        #
+        # The presence of an error field signals that the operation
+        # has failed.
+      "code": "A String", # Global error code. Deprecated and ignored.
+          # Set custom error codes in ErrorProto.domain and ErrorProto.code
+          # instead.
+      "requestId": "A String", # Request identifier generated by the service, which can be
+          # used to identify the error in the logs
+      "error": [ # Specific error description and codes
+        { # Describes one specific error.
+          "domain": "A String", # Error domain. RoSy services can define their own
+              # domain and error codes. This should normally be
+              # the name of an enum type, such as: gdata.CoreErrorDomain
+          "code": "A String", # Error code in the error domain. This should correspond to
+              # a value of the enum type whose name is in domain. See
+              # the core error domain in error_domain.proto.
+          "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
+              #
+              # Please set domain, code and arguments whenever possible instead of this
+              # error message so that external APIs can build safe error messages
+              # themselves.
+              #
+              # External messages built in a RoSy interface will most likely refer to
+              # information and concepts that are not available externally and should not
+              # be exposed. It is safer if external APIs can understand the errors and
+              # decide what the error message should look like.
+          "debugInfo": "A String", # Debugging information, which should not be
+              # shared externally.
+          "locationType": "A String",
+          "argument": [ # Error arguments, to be used when building user-friendly error messages
+              # given the error domain and code.  Different error codes require different
+              # arguments.
+            "A String",
+          ],
+          "location": "A String", # Location of the error, as specified by the location type.
+              #
+              # If location_type is PATH, this should be a path to a field that's
+              # relative to the request, using FieldPath notation
+              # (net/proto2/util/public/field_path.h).
+              #
+              # Examples:
+              #   authenticated_user.gaia_id
+              #   resource.address[2].country
+        },
+      ],
+    },
+    "resource": { # The `resource` object contains information that identifies the item being
+        # added to the group.
+      "kind": "A String", # Identifies the type of resource being added to the group.
+          #
+          # Valid values for this property are:
+          #  * `youtube#channel`
+          #  * `youtube#playlist`
+          #  * `youtube#video`
+          #  * `youtubePartner#asset`
+      "id": "A String", # The channel, video, playlist, or asset ID that YouTube uses to uniquely
+          # identify the item that is being added to the group.
+    },
+    "groupId": "A String", # The ID that YouTube uses to uniquely identify the group that contains the
+        # item.
+    "etag": "A String", # The Etag of this resource.
+    "id": "A String", # The ID that YouTube uses to uniquely identify the `channel`, `video`,
+        # `playlist`, or `asset` resource that is included in the group. Note that
+        # this ID refers specifically to the inclusion of that resource in a
+        # particular group and is different than the channel ID, video ID,
+        # playlist ID, or asset ID that uniquely identifies the resource itself.
+        # The `resource.id` property's value specifies the unique channel, video,
+        # playlist, or asset ID.
+  }
+
+  onBehalfOfContentOwner: string, This parameter can only be used in a properly authorized request. **Note:**
+This parameter is intended exclusively for YouTube content partners that
+own and manage many different YouTube channels.
+
+The `onBehalfOfContentOwner` parameter indicates that the request's
+authorization credentials identify a YouTube user who is acting on behalf
+of the content owner specified in the parameter value. It allows content
+owners to authenticate once and get access to all their video and channel
+data, without having to provide authentication credentials for each
+individual channel. The account that the user authenticates with must be
+linked to the specified YouTube content owner.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A group item.
+      "kind": "A String", # Identifies the API resource's type. The value will be `youtube#groupItem`.
+      "errors": { # Request Error information. # Apiary error details
+          #
+          # The presence of an error field signals that the operation
+          # has failed.
+        "code": "A String", # Global error code. Deprecated and ignored.
+            # Set custom error codes in ErrorProto.domain and ErrorProto.code
+            # instead.
+        "requestId": "A String", # Request identifier generated by the service, which can be
+            # used to identify the error in the logs
+        "error": [ # Specific error description and codes
+          { # Describes one specific error.
+            "domain": "A String", # Error domain. RoSy services can define their own
+                # domain and error codes. This should normally be
+                # the name of an enum type, such as: gdata.CoreErrorDomain
+            "code": "A String", # Error code in the error domain. This should correspond to
+                # a value of the enum type whose name is in domain. See
+                # the core error domain in error_domain.proto.
+            "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
+                #
+                # Please set domain, code and arguments whenever possible instead of this
+                # error message so that external APIs can build safe error messages
+                # themselves.
+                #
+                # External messages built in a RoSy interface will most likely refer to
+                # information and concepts that are not available externally and should not
+                # be exposed. It is safer if external APIs can understand the errors and
+                # decide what the error message should look like.
+            "debugInfo": "A String", # Debugging information, which should not be
+                # shared externally.
+            "locationType": "A String",
+            "argument": [ # Error arguments, to be used when building user-friendly error messages
+                # given the error domain and code.  Different error codes require different
+                # arguments.
+              "A String",
+            ],
+            "location": "A String", # Location of the error, as specified by the location type.
+                #
+                # If location_type is PATH, this should be a path to a field that's
+                # relative to the request, using FieldPath notation
+                # (net/proto2/util/public/field_path.h).
+                #
+                # Examples:
+                #   authenticated_user.gaia_id
+                #   resource.address[2].country
+          },
+        ],
+      },
+      "resource": { # The `resource` object contains information that identifies the item being
+          # added to the group.
+        "kind": "A String", # Identifies the type of resource being added to the group.
+            #
+            # Valid values for this property are:
+            #  * `youtube#channel`
+            #  * `youtube#playlist`
+            #  * `youtube#video`
+            #  * `youtubePartner#asset`
+        "id": "A String", # The channel, video, playlist, or asset ID that YouTube uses to uniquely
+            # identify the item that is being added to the group.
+      },
+      "groupId": "A String", # The ID that YouTube uses to uniquely identify the group that contains the
+          # item.
+      "etag": "A String", # The Etag of this resource.
+      "id": "A String", # The ID that YouTube uses to uniquely identify the `channel`, `video`,
+          # `playlist`, or `asset` resource that is included in the group. Note that
+          # this ID refers specifically to the inclusion of that resource in a
+          # particular group and is different than the channel ID, video ID,
+          # playlist ID, or asset ID that uniquely identifies the resource itself.
+          # The `resource.id` property's value specifies the unique channel, video,
+          # playlist, or asset ID.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(onBehalfOfContentOwner=None, groupId=None, x__xgafv=None)</code>
+  <pre>Returns a collection of group items that match the API request parameters.
+
+Args:
+  onBehalfOfContentOwner: string, This parameter can only be used in a properly authorized request. **Note:**
+This parameter is intended exclusively for YouTube content partners that
+own and manage many different YouTube channels.
+
+The `onBehalfOfContentOwner` parameter indicates that the request's
+authorization credentials identify a YouTube user who is acting on behalf
+of the content owner specified in the parameter value. It allows content
+owners to authenticate once and get access to all their video and channel
+data, without having to provide authentication credentials for each
+individual channel. The account that the user authenticates with must be
+linked to the specified YouTube content owner.
+  groupId: string, The `groupId` parameter specifies the unique ID of the group for which you
+want to retrieve group items.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response message for GroupsService.ListGroupItems.
+    "items": [ # A list of groups that match the API request parameters. Each item in the
+        # list represents a `groupItem` resource.
+      { # A group item.
+          "kind": "A String", # Identifies the API resource's type. The value will be `youtube#groupItem`.
+          "errors": { # Request Error information. # Apiary error details
+              #
+              # The presence of an error field signals that the operation
+              # has failed.
+            "code": "A String", # Global error code. Deprecated and ignored.
+                # Set custom error codes in ErrorProto.domain and ErrorProto.code
+                # instead.
+            "requestId": "A String", # Request identifier generated by the service, which can be
+                # used to identify the error in the logs
+            "error": [ # Specific error description and codes
+              { # Describes one specific error.
+                "domain": "A String", # Error domain. RoSy services can define their own
+                    # domain and error codes. This should normally be
+                    # the name of an enum type, such as: gdata.CoreErrorDomain
+                "code": "A String", # Error code in the error domain. This should correspond to
+                    # a value of the enum type whose name is in domain. See
+                    # the core error domain in error_domain.proto.
+                "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
+                    #
+                    # Please set domain, code and arguments whenever possible instead of this
+                    # error message so that external APIs can build safe error messages
+                    # themselves.
+                    #
+                    # External messages built in a RoSy interface will most likely refer to
+                    # information and concepts that are not available externally and should not
+                    # be exposed. It is safer if external APIs can understand the errors and
+                    # decide what the error message should look like.
+                "debugInfo": "A String", # Debugging information, which should not be
+                    # shared externally.
+                "locationType": "A String",
+                "argument": [ # Error arguments, to be used when building user-friendly error messages
+                    # given the error domain and code.  Different error codes require different
+                    # arguments.
+                  "A String",
+                ],
+                "location": "A String", # Location of the error, as specified by the location type.
+                    #
+                    # If location_type is PATH, this should be a path to a field that's
+                    # relative to the request, using FieldPath notation
+                    # (net/proto2/util/public/field_path.h).
+                    #
+                    # Examples:
+                    #   authenticated_user.gaia_id
+                    #   resource.address[2].country
+              },
+            ],
+          },
+          "resource": { # The `resource` object contains information that identifies the item being
+              # added to the group.
+            "kind": "A String", # Identifies the type of resource being added to the group.
+                #
+                # Valid values for this property are:
+                #  * `youtube#channel`
+                #  * `youtube#playlist`
+                #  * `youtube#video`
+                #  * `youtubePartner#asset`
+            "id": "A String", # The channel, video, playlist, or asset ID that YouTube uses to uniquely
+                # identify the item that is being added to the group.
+          },
+          "groupId": "A String", # The ID that YouTube uses to uniquely identify the group that contains the
+              # item.
+          "etag": "A String", # The Etag of this resource.
+          "id": "A String", # The ID that YouTube uses to uniquely identify the `channel`, `video`,
+              # `playlist`, or `asset` resource that is included in the group. Note that
+              # this ID refers specifically to the inclusion of that resource in a
+              # particular group and is different than the channel ID, video ID,
+              # playlist ID, or asset ID that uniquely identifies the resource itself.
+              # The `resource.id` property's value specifies the unique channel, video,
+              # playlist, or asset ID.
+        },
+    ],
+    "kind": "A String", # Identifies the API resource's type. The value will be
+        # `youtube#groupItemListResponse`.
+    "etag": "A String", # The Etag of this resource.
+    "errors": { # Request Error information. # Apiary error details
+        #
+        # The presence of an error field signals that the operation
+        # has failed.
+      "code": "A String", # Global error code. Deprecated and ignored.
+          # Set custom error codes in ErrorProto.domain and ErrorProto.code
+          # instead.
+      "requestId": "A String", # Request identifier generated by the service, which can be
+          # used to identify the error in the logs
+      "error": [ # Specific error description and codes
+        { # Describes one specific error.
+          "domain": "A String", # Error domain. RoSy services can define their own
+              # domain and error codes. This should normally be
+              # the name of an enum type, such as: gdata.CoreErrorDomain
+          "code": "A String", # Error code in the error domain. This should correspond to
+              # a value of the enum type whose name is in domain. See
+              # the core error domain in error_domain.proto.
+          "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
+              #
+              # Please set domain, code and arguments whenever possible instead of this
+              # error message so that external APIs can build safe error messages
+              # themselves.
+              #
+              # External messages built in a RoSy interface will most likely refer to
+              # information and concepts that are not available externally and should not
+              # be exposed. It is safer if external APIs can understand the errors and
+              # decide what the error message should look like.
+          "debugInfo": "A String", # Debugging information, which should not be
+              # shared externally.
+          "locationType": "A String",
+          "argument": [ # Error arguments, to be used when building user-friendly error messages
+              # given the error domain and code.  Different error codes require different
+              # arguments.
+            "A String",
+          ],
+          "location": "A String", # Location of the error, as specified by the location type.
+              #
+              # If location_type is PATH, this should be a path to a field that's
+              # relative to the request, using FieldPath notation
+              # (net/proto2/util/public/field_path.h).
+              #
+              # Examples:
+              #   authenticated_user.gaia_id
+              #   resource.address[2].country
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file