We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Unable to extract video_id from http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant
python -m youtube_dl -v --skip-download http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '--skip-download', 'http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2014.04.04.1
[debug] Python version 2.7.5 - Darwin-13.1.0-x86_64-i386-64bit
[debug] Proxy map: {}
[Teamcoco] 80187/conan-becomes-a-mary-kay-beauty-consultant: Downloading webpage
ERROR: Unable to extract video id; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type  youtube-dl -U  to update.
Traceback (most recent call last):
  File "/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/YoutubeDL.py", line 511, in extract_info
    ie_result = ie.extract(url)
  File "/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/common.py", line 161, in extract
    return self._real_extract(url)
  File "/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/teamcoco.py", line 32, in _real_extract
    webpage, 'video id')
  File "/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/common.py", line 380, in _html_search_regex
    res = self._search_regex(pattern, string, name, default, fatal, flags)
  File "/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/common.py", line 370, in _search_regex
    raise RegexNotFoundError(u'Unable to extract %s' % _name)
RegexNotFoundError: Unable to extract video id; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type  youtube-dl -U  to update.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `youtube_dl/extractor/teamcoco.py`
Content:
```
1 from __future__ import unicode_literals
2 
3 import re
4 
5 from .common import InfoExtractor
6 from ..utils import (
7     ExtractorError,
8 )
9 
10 
11 class TeamcocoIE(InfoExtractor):
12     _VALID_URL = r'http://teamcoco\.com/video/(?P<url_title>.*)'
13     _TEST = {
14         'url': 'http://teamcoco.com/video/louis-ck-interview-george-w-bush',
15         'file': '19705.mp4',
16         'md5': 'cde9ba0fa3506f5f017ce11ead928f9a',
17         'info_dict': {
18             "description": "Louis C.K. got starstruck by George W. Bush, so what? Part one.",
19             "title": "Louis C.K. Interview Pt. 1 11/3/11"
20         }
21     }
22 
23     def _real_extract(self, url):
24         mobj = re.match(self._VALID_URL, url)
25         if mobj is None:
26             raise ExtractorError('Invalid URL: %s' % url)
27         url_title = mobj.group('url_title')
28         webpage = self._download_webpage(url, url_title)
29 
30         video_id = self._html_search_regex(
31             r'<article class="video" data-id="(\d+?)"',
32             webpage, 'video id')
33 
34         self.report_extraction(video_id)
35 
36         data_url = 'http://teamcoco.com/cvp/2.0/%s.xml' % video_id
37         data = self._download_xml(data_url, video_id, 'Downloading data webpage')
38 
39         qualities = ['500k', '480p', '1000k', '720p', '1080p']
40         formats = []
41         for filed in data.findall('files/file'):
42             if filed.attrib.get('playmode') == 'all':
43                 # it just duplicates one of the entries
44                 break
45             file_url = filed.text
46             m_format = re.search(r'(\d+(k|p))\.mp4', file_url)
47             if m_format is not None:
48                 format_id = m_format.group(1)
49             else:
50                 format_id = filed.attrib['bitrate']
51             tbr = (
52                 int(filed.attrib['bitrate'])
53                 if filed.attrib['bitrate'].isdigit()
54                 else None)
55 
56             try:
57                 quality = qualities.index(format_id)
58             except ValueError:
59                 quality = -1
60             formats.append({
61                 'url': file_url,
62                 'ext': 'mp4',
63                 'tbr': tbr,
64                 'format_id': format_id,
65                 'quality': quality,
66             })
67 
68         self._sort_formats(formats)
69 
70         return {
71             'id': video_id,
72             'formats': formats,
73             'title': self._og_search_title(webpage),
74             'thumbnail': self._og_search_thumbnail(webpage),
75             'description': self._og_search_description(webpage),
76         }
77
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/youtube_dl/extractor/teamcoco.py b/youtube_dl/extractor/teamcoco.py
--- a/youtube_dl/extractor/teamcoco.py
+++ b/youtube_dl/extractor/teamcoco.py
@@ -9,8 +9,18 @@
 
 
 class TeamcocoIE(InfoExtractor):
-    _VALID_URL = r'http://teamcoco\.com/video/(?P<url_title>.*)'
-    _TEST = {
+    _VALID_URL = r'http://teamcoco\.com/video/(?P<video_id>\d*)?/?(?P<url_title>.*)'
+    _TESTS = [
+    {
+        'url': 'http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant',
+        'file': '80187.mp4',
+        'md5': '3f7746aa0dc86de18df7539903d399ea',
+        'info_dict': {
+            'title': 'Conan Becomes A Mary Kay Beauty Consultant',
+            'description': 'Mary Kay is perhaps the most trusted name in female beauty, so of course Conan is a natural choice to sell their products.'
+        }
+    },
+    {
         'url': 'http://teamcoco.com/video/louis-ck-interview-george-w-bush',
         'file': '19705.mp4',
         'md5': 'cde9ba0fa3506f5f017ce11ead928f9a',
@@ -19,6 +29,7 @@
             "title": "Louis C.K. Interview Pt. 1 11/3/11"
         }
     }
+    ]
 
     def _real_extract(self, url):
         mobj = re.match(self._VALID_URL, url)
@@ -26,11 +37,13 @@
             raise ExtractorError('Invalid URL: %s' % url)
         url_title = mobj.group('url_title')
         webpage = self._download_webpage(url, url_title)
-
-        video_id = self._html_search_regex(
-            r'<article class="video" data-id="(\d+?)"',
-            webpage, 'video id')
-
+        
+        video_id = mobj.group("video_id")
+        if video_id == '':
+            video_id = self._html_search_regex(
+                r'<article class="video" data-id="(\d+?)"',
+                webpage, 'video id')
+        
         self.report_extraction(video_id)
 
         data_url = 'http://teamcoco.com/cvp/2.0/%s.xml' % video_id

{"golden_diff": "diff --git a/youtube_dl/extractor/teamcoco.py b/youtube_dl/extractor/teamcoco.py\n--- a/youtube_dl/extractor/teamcoco.py\n+++ b/youtube_dl/extractor/teamcoco.py\n@@ -9,8 +9,18 @@\n \n \n class TeamcocoIE(InfoExtractor):\n-    _VALID_URL = r'http://teamcoco\\.com/video/(?P<url_title>.*)'\n-    _TEST = {\n+    _VALID_URL = r'http://teamcoco\\.com/video/(?P<video_id>\\d*)?/?(?P<url_title>.*)'\n+    _TESTS = [\n+    {\n+        'url': 'http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant',\n+        'file': '80187.mp4',\n+        'md5': '3f7746aa0dc86de18df7539903d399ea',\n+        'info_dict': {\n+            'title': 'Conan Becomes A Mary Kay Beauty Consultant',\n+            'description': 'Mary Kay is perhaps the most trusted name in female beauty, so of course Conan is a natural choice to sell their products.'\n+        }\n+    },\n+    {\n         'url': 'http://teamcoco.com/video/louis-ck-interview-george-w-bush',\n         'file': '19705.mp4',\n         'md5': 'cde9ba0fa3506f5f017ce11ead928f9a',\n@@ -19,6 +29,7 @@\n             \"title\": \"Louis C.K. Interview Pt. 1 11/3/11\"\n         }\n     }\n+    ]\n \n     def _real_extract(self, url):\n         mobj = re.match(self._VALID_URL, url)\n@@ -26,11 +37,13 @@\n             raise ExtractorError('Invalid URL: %s' % url)\n         url_title = mobj.group('url_title')\n         webpage = self._download_webpage(url, url_title)\n-\n-        video_id = self._html_search_regex(\n-            r'<article class=\"video\" data-id=\"(\\d+?)\"',\n-            webpage, 'video id')\n-\n+        \n+        video_id = mobj.group(\"video_id\")\n+        if video_id == '':\n+            video_id = self._html_search_regex(\n+                r'<article class=\"video\" data-id=\"(\\d+?)\"',\n+                webpage, 'video id')\n+        \n         self.report_extraction(video_id)\n \n         data_url = 'http://teamcoco.com/cvp/2.0/%s.xml' % video_id\n", "issue": "Unable to extract video_id from http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant\npython -m youtube_dl -v --skip-download http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant\n[debug] System config: []\n[debug] User config: []\n[debug] Command-line args: ['-v', '--skip-download', 'http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant']\n[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8\n[debug] youtube-dl version 2014.04.04.1\n[debug] Python version 2.7.5 - Darwin-13.1.0-x86_64-i386-64bit\n[debug] Proxy map: {}\n[Teamcoco] 80187/conan-becomes-a-mary-kay-beauty-consultant: Downloading webpage\nERROR: Unable to extract video id; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type  youtube-dl -U  to update.\nTraceback (most recent call last):\n  File \"/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/YoutubeDL.py\", line 511, in extract_info\n    ie_result = ie.extract(url)\n  File \"/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/common.py\", line 161, in extract\n    return self._real_extract(url)\n  File \"/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/teamcoco.py\", line 32, in _real_extract\n    webpage, 'video id')\n  File \"/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/common.py\", line 380, in _html_search_regex\n    res = self._search_regex(pattern, string, name, default, fatal, flags)\n  File \"/Users/jill/june/.virtualenv/lib/python2.7/site-packages/youtube_dl/extractor/common.py\", line 370, in _search_regex\n    raise RegexNotFoundError(u'Unable to extract %s' % _name)\nRegexNotFoundError: Unable to extract video id; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type  youtube-dl -U  to update.\n\n", "before_files": [{"content": "from __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    ExtractorError,\n)\n\n\nclass TeamcocoIE(InfoExtractor):\n    _VALID_URL = r'http://teamcoco\\.com/video/(?P<url_title>.*)'\n    _TEST = {\n        'url': 'http://teamcoco.com/video/louis-ck-interview-george-w-bush',\n        'file': '19705.mp4',\n        'md5': 'cde9ba0fa3506f5f017ce11ead928f9a',\n        'info_dict': {\n            \"description\": \"Louis C.K. got starstruck by George W. Bush, so what? Part one.\",\n            \"title\": \"Louis C.K. Interview Pt. 1 11/3/11\"\n        }\n    }\n\n    def _real_extract(self, url):\n        mobj = re.match(self._VALID_URL, url)\n        if mobj is None:\n            raise ExtractorError('Invalid URL: %s' % url)\n        url_title = mobj.group('url_title')\n        webpage = self._download_webpage(url, url_title)\n\n        video_id = self._html_search_regex(\n            r'<article class=\"video\" data-id=\"(\\d+?)\"',\n            webpage, 'video id')\n\n        self.report_extraction(video_id)\n\n        data_url = 'http://teamcoco.com/cvp/2.0/%s.xml' % video_id\n        data = self._download_xml(data_url, video_id, 'Downloading data webpage')\n\n        qualities = ['500k', '480p', '1000k', '720p', '1080p']\n        formats = []\n        for filed in data.findall('files/file'):\n            if filed.attrib.get('playmode') == 'all':\n                # it just duplicates one of the entries\n                break\n            file_url = filed.text\n            m_format = re.search(r'(\\d+(k|p))\\.mp4', file_url)\n            if m_format is not None:\n                format_id = m_format.group(1)\n            else:\n                format_id = filed.attrib['bitrate']\n            tbr = (\n                int(filed.attrib['bitrate'])\n                if filed.attrib['bitrate'].isdigit()\n                else None)\n\n            try:\n                quality = qualities.index(format_id)\n            except ValueError:\n                quality = -1\n            formats.append({\n                'url': file_url,\n                'ext': 'mp4',\n                'tbr': tbr,\n                'format_id': format_id,\n                'quality': quality,\n            })\n\n        self._sort_formats(formats)\n\n        return {\n            'id': video_id,\n            'formats': formats,\n            'title': self._og_search_title(webpage),\n            'thumbnail': self._og_search_thumbnail(webpage),\n            'description': self._og_search_description(webpage),\n        }\n", "path": "youtube_dl/extractor/teamcoco.py"}], "after_files": [{"content": "from __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    ExtractorError,\n)\n\n\nclass TeamcocoIE(InfoExtractor):\n    _VALID_URL = r'http://teamcoco\\.com/video/(?P<video_id>\\d*)?/?(?P<url_title>.*)'\n    _TESTS = [\n    {\n        'url': 'http://teamcoco.com/video/80187/conan-becomes-a-mary-kay-beauty-consultant',\n        'file': '80187.mp4',\n        'md5': '3f7746aa0dc86de18df7539903d399ea',\n        'info_dict': {\n            'title': 'Conan Becomes A Mary Kay Beauty Consultant',\n            'description': 'Mary Kay is perhaps the most trusted name in female beauty, so of course Conan is a natural choice to sell their products.'\n        }\n    },\n    {\n        'url': 'http://teamcoco.com/video/louis-ck-interview-george-w-bush',\n        'file': '19705.mp4',\n        'md5': 'cde9ba0fa3506f5f017ce11ead928f9a',\n        'info_dict': {\n            \"description\": \"Louis C.K. got starstruck by George W. Bush, so what? Part one.\",\n            \"title\": \"Louis C.K. Interview Pt. 1 11/3/11\"\n        }\n    }\n    ]\n\n    def _real_extract(self, url):\n        mobj = re.match(self._VALID_URL, url)\n        if mobj is None:\n            raise ExtractorError('Invalid URL: %s' % url)\n        url_title = mobj.group('url_title')\n        webpage = self._download_webpage(url, url_title)\n        \n        video_id = mobj.group(\"video_id\")\n        if video_id == '':\n            video_id = self._html_search_regex(\n                r'<article class=\"video\" data-id=\"(\\d+?)\"',\n                webpage, 'video id')\n        \n        self.report_extraction(video_id)\n\n        data_url = 'http://teamcoco.com/cvp/2.0/%s.xml' % video_id\n        data = self._download_xml(data_url, video_id, 'Downloading data webpage')\n\n        qualities = ['500k', '480p', '1000k', '720p', '1080p']\n        formats = []\n        for filed in data.findall('files/file'):\n            if filed.attrib.get('playmode') == 'all':\n                # it just duplicates one of the entries\n                break\n            file_url = filed.text\n            m_format = re.search(r'(\\d+(k|p))\\.mp4', file_url)\n            if m_format is not None:\n                format_id = m_format.group(1)\n            else:\n                format_id = filed.attrib['bitrate']\n            tbr = (\n                int(filed.attrib['bitrate'])\n                if filed.attrib['bitrate'].isdigit()\n                else None)\n\n            try:\n                quality = qualities.index(format_id)\n            except ValueError:\n                quality = -1\n            formats.append({\n                'url': file_url,\n                'ext': 'mp4',\n                'tbr': tbr,\n                'format_id': format_id,\n                'quality': quality,\n            })\n\n        self._sort_formats(formats)\n\n        return {\n            'id': video_id,\n            'formats': formats,\n            'title': self._og_search_title(webpage),\n            'thumbnail': self._og_search_thumbnail(webpage),\n            'description': self._og_search_description(webpage),\n        }\n", "path": "youtube_dl/extractor/teamcoco.py"}]}