We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[Heise] ERROR: Unable to extract container ID
## Please follow the guide below

- You will be asked some questions and requested to provide some information, please read them **carefully** and answer honestly
- Put an `x` into all the boxes [ ] relevant to your *issue* (like this: `[x]`)
- Use the *Preview* tab to see what your issue will actually look like

---

### Make sure you are using the *latest* version: run `youtube-dl --version` and ensure your version is *2017.12.10*. If it's not, read [this FAQ entry](https://github.com/rg3/youtube-dl/blob/master/README.md#how-do-i-update-youtube-dl) and update. Issues with outdated version will be rejected.
- [x] I've **verified** and **I assure** that I'm running youtube-dl **2017.12.10**

### Before submitting an *issue* make sure you have:
- [x] At least skimmed through the [README](https://github.com/rg3/youtube-dl/blob/master/README.md), **most notably** the [FAQ](https://github.com/rg3/youtube-dl#faq) and [BUGS](https://github.com/rg3/youtube-dl#bugs) sections
- [x] [Searched](https://github.com/rg3/youtube-dl/search?type=Issues) the bugtracker for similar issues including closed ones

### What is the purpose of your *issue*?
- [x] Bug report (encountered problems with youtube-dl)
- [ ] Site support request (request for adding support for a new site)
- [ ] Feature request (request for a new functionality)
- [ ] Question
- [ ] Other

---

### The following sections concretize particular purposed issues, you can erase any section (the contents between triple ---) not applicable to your *issue*

---

### If the purpose of this *issue* is a *bug report*, *site support request* or you are not completely sure provide the full verbose output as follows:

Add the `-v` flag to **your command line** you run youtube-dl with (`youtube-dl -v <your command line>`), copy the **whole** output and insert it here. It should look similar to one below (replace it with **your** log inserted between triple ```):

```
youtube-dl -v "https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html"
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v', 'https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html']
[debug] Encodings: locale cp1252, fs mbcs, out cp850, pref cp1252
[debug] youtube-dl version 2017.12.10
[debug] Python version 3.4.4 - Windows-10-10.0.10240
[debug] exe versions: ffmpeg 3.4, ffprobe 3.4
[debug] Proxy map: {}
[Heise] 3700244: Downloading webpage
ERROR: Unable to extract container ID; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmp9arpqqmf\build\youtube_dl\YoutubeDL.py", line 784, in extract_info
  File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmp9arpqqmf\build\youtube_dl\extractor\common.py", line 437, in extract
  File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmp9arpqqmf\build\youtube_dl\extractor\heise.py", line 72, in _real_extract
  File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmp9arpqqmf\build\youtube_dl\extractor\common.py", line 792, in _search_regex
youtube_dl.utils.RegexNotFoundError: Unable to extract container ID; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.<end of log>
```

---

### Description of your *issue*, suggested solution and other information

Heise extractor seems to fail with videos on https://www.heise.de/video/ - getting ERROR: Unable to extract container ID

--- 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/heise.py`
Content:
```
1 # coding: utf-8
2 from __future__ import unicode_literals
3 
4 from .common import InfoExtractor
5 from .youtube import YoutubeIE
6 from ..utils import (
7     determine_ext,
8     int_or_none,
9     parse_iso8601,
10     xpath_text,
11 )
12 
13 
14 class HeiseIE(InfoExtractor):
15     _VALID_URL = r'https?://(?:www\.)?heise\.de/(?:[^/]+/)+[^/]+-(?P<id>[0-9]+)\.html'
16     _TESTS = [{
17         'url': 'http://www.heise.de/video/artikel/Podcast-c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2404147.html',
18         'md5': 'ffed432483e922e88545ad9f2f15d30e',
19         'info_dict': {
20             'id': '2404147',
21             'ext': 'mp4',
22             'title': "Podcast: c't uplink 3.3 – Owncloud / Tastaturen / Peilsender Smartphone",
23             'format_id': 'mp4_720p',
24             'timestamp': 1411812600,
25             'upload_date': '20140927',
26             'description': 'md5:c934cbfb326c669c2bcabcbe3d3fcd20',
27             'thumbnail': r're:^https?://.*/gallery/$',
28         }
29     }, {
30         # YouTube embed
31         'url': 'http://www.heise.de/newsticker/meldung/Netflix-In-20-Jahren-vom-Videoverleih-zum-TV-Revolutionaer-3814130.html',
32         'md5': 'e403d2b43fea8e405e88e3f8623909f1',
33         'info_dict': {
34             'id': '6kmWbXleKW4',
35             'ext': 'mp4',
36             'title': 'NEU IM SEPTEMBER | Netflix',
37             'description': 'md5:2131f3c7525e540d5fd841de938bd452',
38             'upload_date': '20170830',
39             'uploader': 'Netflix Deutschland, Österreich und Schweiz',
40             'uploader_id': 'netflixdach',
41         },
42         'params': {
43             'skip_download': True,
44         },
45     }, {
46         'url': 'http://www.heise.de/ct/artikel/c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2403911.html',
47         'only_matching': True,
48     }, {
49         'url': 'http://www.heise.de/newsticker/meldung/c-t-uplink-Owncloud-Tastaturen-Peilsender-Smartphone-2404251.html?wt_mc=rss.ho.beitrag.atom',
50         'only_matching': True,
51     }, {
52         'url': 'http://www.heise.de/ct/ausgabe/2016-12-Spiele-3214137.html',
53         'only_matching': True,
54     }]
55 
56     def _real_extract(self, url):
57         video_id = self._match_id(url)
58         webpage = self._download_webpage(url, video_id)
59 
60         title = self._html_search_meta('fulltitle', webpage, default=None)
61         if not title or title == "c't":
62             title = self._search_regex(
63                 r'<div[^>]+class="videoplayerjw"[^>]+data-title="([^"]+)"',
64                 webpage, 'title')
65 
66         yt_urls = YoutubeIE._extract_urls(webpage)
67         if yt_urls:
68             return self.playlist_from_matches(yt_urls, video_id, title, ie=YoutubeIE.ie_key())
69 
70         container_id = self._search_regex(
71             r'<div class="videoplayerjw"[^>]+data-container="([0-9]+)"',
72             webpage, 'container ID')
73         sequenz_id = self._search_regex(
74             r'<div class="videoplayerjw"[^>]+data-sequenz="([0-9]+)"',
75             webpage, 'sequenz ID')
76 
77         doc = self._download_xml(
78             'http://www.heise.de/videout/feed', video_id, query={
79                 'container': container_id,
80                 'sequenz': sequenz_id,
81             })
82 
83         formats = []
84         for source_node in doc.findall('.//{http://rss.jwpcdn.com/}source'):
85             label = source_node.attrib['label']
86             height = int_or_none(self._search_regex(
87                 r'^(.*?_)?([0-9]+)p$', label, 'height', default=None))
88             video_url = source_node.attrib['file']
89             ext = determine_ext(video_url, '')
90             formats.append({
91                 'url': video_url,
92                 'format_note': label,
93                 'format_id': '%s_%s' % (ext, label),
94                 'height': height,
95             })
96         self._sort_formats(formats)
97 
98         description = self._og_search_description(
99             webpage, default=None) or self._html_search_meta(
100             'description', webpage)
101 
102         return {
103             'id': video_id,
104             'title': title,
105             'description': description,
106             'thumbnail': (xpath_text(doc, './/{http://rss.jwpcdn.com/}image') or
107                           self._og_search_thumbnail(webpage)),
108             'timestamp': parse_iso8601(
109                 self._html_search_meta('date', webpage)),
110             'formats': formats,
111         }
112
```
--- 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/heise.py b/youtube_dl/extractor/heise.py
--- a/youtube_dl/extractor/heise.py
+++ b/youtube_dl/extractor/heise.py
@@ -2,11 +2,13 @@
 from __future__ import unicode_literals
 
 from .common import InfoExtractor
+from .kaltura import KalturaIE
 from .youtube import YoutubeIE
 from ..utils import (
     determine_ext,
     int_or_none,
     parse_iso8601,
+    smuggle_url,
     xpath_text,
 )
 
@@ -42,6 +44,19 @@
         'params': {
             'skip_download': True,
         },
+    }, {
+        'url': 'https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html',
+        'md5': '4b58058b46625bdbd841fc2804df95fc',
+        'info_dict': {
+            'id': '1_ntrmio2s',
+            'timestamp': 1512470717,
+            'upload_date': '20171205',
+            'ext': 'mp4',
+            'title': 'ct10 nachgehakt hos restrictor',
+        },
+        'params': {
+            'skip_download': True,
+        },
     }, {
         'url': 'http://www.heise.de/ct/artikel/c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2403911.html',
         'only_matching': True,
@@ -67,9 +82,14 @@
         if yt_urls:
             return self.playlist_from_matches(yt_urls, video_id, title, ie=YoutubeIE.ie_key())
 
+        kaltura_url = KalturaIE._extract_url(webpage)
+        if kaltura_url:
+            return self.url_result(smuggle_url(kaltura_url, {'source_url': url}), KalturaIE.ie_key())
+
         container_id = self._search_regex(
             r'<div class="videoplayerjw"[^>]+data-container="([0-9]+)"',
             webpage, 'container ID')
+
         sequenz_id = self._search_regex(
             r'<div class="videoplayerjw"[^>]+data-sequenz="([0-9]+)"',
             webpage, 'sequenz ID')

{"golden_diff": "diff --git a/youtube_dl/extractor/heise.py b/youtube_dl/extractor/heise.py\n--- a/youtube_dl/extractor/heise.py\n+++ b/youtube_dl/extractor/heise.py\n@@ -2,11 +2,13 @@\n from __future__ import unicode_literals\n \n from .common import InfoExtractor\n+from .kaltura import KalturaIE\n from .youtube import YoutubeIE\n from ..utils import (\n     determine_ext,\n     int_or_none,\n     parse_iso8601,\n+    smuggle_url,\n     xpath_text,\n )\n \n@@ -42,6 +44,19 @@\n         'params': {\n             'skip_download': True,\n         },\n+    }, {\n+        'url': 'https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html',\n+        'md5': '4b58058b46625bdbd841fc2804df95fc',\n+        'info_dict': {\n+            'id': '1_ntrmio2s',\n+            'timestamp': 1512470717,\n+            'upload_date': '20171205',\n+            'ext': 'mp4',\n+            'title': 'ct10 nachgehakt hos restrictor',\n+        },\n+        'params': {\n+            'skip_download': True,\n+        },\n     }, {\n         'url': 'http://www.heise.de/ct/artikel/c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2403911.html',\n         'only_matching': True,\n@@ -67,9 +82,14 @@\n         if yt_urls:\n             return self.playlist_from_matches(yt_urls, video_id, title, ie=YoutubeIE.ie_key())\n \n+        kaltura_url = KalturaIE._extract_url(webpage)\n+        if kaltura_url:\n+            return self.url_result(smuggle_url(kaltura_url, {'source_url': url}), KalturaIE.ie_key())\n+\n         container_id = self._search_regex(\n             r'<div class=\"videoplayerjw\"[^>]+data-container=\"([0-9]+)\"',\n             webpage, 'container ID')\n+\n         sequenz_id = self._search_regex(\n             r'<div class=\"videoplayerjw\"[^>]+data-sequenz=\"([0-9]+)\"',\n             webpage, 'sequenz ID')\n", "issue": "[Heise] ERROR: Unable to extract container ID\n## Please follow the guide below\r\n\r\n- You will be asked some questions and requested to provide some information, please read them **carefully** and answer honestly\r\n- Put an `x` into all the boxes [ ] relevant to your *issue* (like this: `[x]`)\r\n- Use the *Preview* tab to see what your issue will actually look like\r\n\r\n---\r\n\r\n### Make sure you are using the *latest* version: run `youtube-dl --version` and ensure your version is *2017.12.10*. If it's not, read [this FAQ entry](https://github.com/rg3/youtube-dl/blob/master/README.md#how-do-i-update-youtube-dl) and update. Issues with outdated version will be rejected.\r\n- [x] I've **verified** and **I assure** that I'm running youtube-dl **2017.12.10**\r\n\r\n### Before submitting an *issue* make sure you have:\r\n- [x] At least skimmed through the [README](https://github.com/rg3/youtube-dl/blob/master/README.md), **most notably** the [FAQ](https://github.com/rg3/youtube-dl#faq) and [BUGS](https://github.com/rg3/youtube-dl#bugs) sections\r\n- [x] [Searched](https://github.com/rg3/youtube-dl/search?type=Issues) the bugtracker for similar issues including closed ones\r\n\r\n### What is the purpose of your *issue*?\r\n- [x] Bug report (encountered problems with youtube-dl)\r\n- [ ] Site support request (request for adding support for a new site)\r\n- [ ] Feature request (request for a new functionality)\r\n- [ ] Question\r\n- [ ] Other\r\n\r\n---\r\n\r\n### The following sections concretize particular purposed issues, you can erase any section (the contents between triple ---) not applicable to your *issue*\r\n\r\n---\r\n\r\n### If the purpose of this *issue* is a *bug report*, *site support request* or you are not completely sure provide the full verbose output as follows:\r\n\r\nAdd the `-v` flag to **your command line** you run youtube-dl with (`youtube-dl -v <your command line>`), copy the **whole** output and insert it here. It should look similar to one below (replace it with **your** log inserted between triple ```):\r\n\r\n```\r\nyoutube-dl -v \"https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html\"\r\n[debug] System config: []\r\n[debug] User config: []\r\n[debug] Custom config: []\r\n[debug] Command-line args: ['-v', 'https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html']\r\n[debug] Encodings: locale cp1252, fs mbcs, out cp850, pref cp1252\r\n[debug] youtube-dl version 2017.12.10\r\n[debug] Python version 3.4.4 - Windows-10-10.0.10240\r\n[debug] exe versions: ffmpeg 3.4, ffprobe 3.4\r\n[debug] Proxy map: {}\r\n[Heise] 3700244: Downloading webpage\r\nERROR: Unable to extract container ID; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.\r\nTraceback (most recent call last):\r\n  File \"C:\\Users\\dst\\AppData\\Roaming\\Build archive\\youtube-dl\\rg3\\tmp9arpqqmf\\build\\youtube_dl\\YoutubeDL.py\", line 784, in extract_info\r\n  File \"C:\\Users\\dst\\AppData\\Roaming\\Build archive\\youtube-dl\\rg3\\tmp9arpqqmf\\build\\youtube_dl\\extractor\\common.py\", line 437, in extract\r\n  File \"C:\\Users\\dst\\AppData\\Roaming\\Build archive\\youtube-dl\\rg3\\tmp9arpqqmf\\build\\youtube_dl\\extractor\\heise.py\", line 72, in _real_extract\r\n  File \"C:\\Users\\dst\\AppData\\Roaming\\Build archive\\youtube-dl\\rg3\\tmp9arpqqmf\\build\\youtube_dl\\extractor\\common.py\", line 792, in _search_regex\r\nyoutube_dl.utils.RegexNotFoundError: Unable to extract container ID; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.<end of log>\r\n```\r\n\r\n---\r\n\r\n### Description of your *issue*, suggested solution and other information\r\n\r\nHeise extractor seems to fail with videos on https://www.heise.de/video/ - getting ERROR: Unable to extract container ID\n", "before_files": [{"content": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom .youtube import YoutubeIE\nfrom ..utils import (\n    determine_ext,\n    int_or_none,\n    parse_iso8601,\n    xpath_text,\n)\n\n\nclass HeiseIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?heise\\.de/(?:[^/]+/)+[^/]+-(?P<id>[0-9]+)\\.html'\n    _TESTS = [{\n        'url': 'http://www.heise.de/video/artikel/Podcast-c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2404147.html',\n        'md5': 'ffed432483e922e88545ad9f2f15d30e',\n        'info_dict': {\n            'id': '2404147',\n            'ext': 'mp4',\n            'title': \"Podcast: c't uplink 3.3 \u2013 Owncloud / Tastaturen / Peilsender Smartphone\",\n            'format_id': 'mp4_720p',\n            'timestamp': 1411812600,\n            'upload_date': '20140927',\n            'description': 'md5:c934cbfb326c669c2bcabcbe3d3fcd20',\n            'thumbnail': r're:^https?://.*/gallery/$',\n        }\n    }, {\n        # YouTube embed\n        'url': 'http://www.heise.de/newsticker/meldung/Netflix-In-20-Jahren-vom-Videoverleih-zum-TV-Revolutionaer-3814130.html',\n        'md5': 'e403d2b43fea8e405e88e3f8623909f1',\n        'info_dict': {\n            'id': '6kmWbXleKW4',\n            'ext': 'mp4',\n            'title': 'NEU IM SEPTEMBER | Netflix',\n            'description': 'md5:2131f3c7525e540d5fd841de938bd452',\n            'upload_date': '20170830',\n            'uploader': 'Netflix Deutschland, \u00d6sterreich und Schweiz',\n            'uploader_id': 'netflixdach',\n        },\n        'params': {\n            'skip_download': True,\n        },\n    }, {\n        'url': 'http://www.heise.de/ct/artikel/c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2403911.html',\n        'only_matching': True,\n    }, {\n        'url': 'http://www.heise.de/newsticker/meldung/c-t-uplink-Owncloud-Tastaturen-Peilsender-Smartphone-2404251.html?wt_mc=rss.ho.beitrag.atom',\n        'only_matching': True,\n    }, {\n        'url': 'http://www.heise.de/ct/ausgabe/2016-12-Spiele-3214137.html',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(url, video_id)\n\n        title = self._html_search_meta('fulltitle', webpage, default=None)\n        if not title or title == \"c't\":\n            title = self._search_regex(\n                r'<div[^>]+class=\"videoplayerjw\"[^>]+data-title=\"([^\"]+)\"',\n                webpage, 'title')\n\n        yt_urls = YoutubeIE._extract_urls(webpage)\n        if yt_urls:\n            return self.playlist_from_matches(yt_urls, video_id, title, ie=YoutubeIE.ie_key())\n\n        container_id = self._search_regex(\n            r'<div class=\"videoplayerjw\"[^>]+data-container=\"([0-9]+)\"',\n            webpage, 'container ID')\n        sequenz_id = self._search_regex(\n            r'<div class=\"videoplayerjw\"[^>]+data-sequenz=\"([0-9]+)\"',\n            webpage, 'sequenz ID')\n\n        doc = self._download_xml(\n            'http://www.heise.de/videout/feed', video_id, query={\n                'container': container_id,\n                'sequenz': sequenz_id,\n            })\n\n        formats = []\n        for source_node in doc.findall('.//{http://rss.jwpcdn.com/}source'):\n            label = source_node.attrib['label']\n            height = int_or_none(self._search_regex(\n                r'^(.*?_)?([0-9]+)p$', label, 'height', default=None))\n            video_url = source_node.attrib['file']\n            ext = determine_ext(video_url, '')\n            formats.append({\n                'url': video_url,\n                'format_note': label,\n                'format_id': '%s_%s' % (ext, label),\n                'height': height,\n            })\n        self._sort_formats(formats)\n\n        description = self._og_search_description(\n            webpage, default=None) or self._html_search_meta(\n            'description', webpage)\n\n        return {\n            'id': video_id,\n            'title': title,\n            'description': description,\n            'thumbnail': (xpath_text(doc, './/{http://rss.jwpcdn.com/}image') or\n                          self._og_search_thumbnail(webpage)),\n            'timestamp': parse_iso8601(\n                self._html_search_meta('date', webpage)),\n            'formats': formats,\n        }\n", "path": "youtube_dl/extractor/heise.py"}], "after_files": [{"content": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom .kaltura import KalturaIE\nfrom .youtube import YoutubeIE\nfrom ..utils import (\n    determine_ext,\n    int_or_none,\n    parse_iso8601,\n    smuggle_url,\n    xpath_text,\n)\n\n\nclass HeiseIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?heise\\.de/(?:[^/]+/)+[^/]+-(?P<id>[0-9]+)\\.html'\n    _TESTS = [{\n        'url': 'http://www.heise.de/video/artikel/Podcast-c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2404147.html',\n        'md5': 'ffed432483e922e88545ad9f2f15d30e',\n        'info_dict': {\n            'id': '2404147',\n            'ext': 'mp4',\n            'title': \"Podcast: c't uplink 3.3 \u2013 Owncloud / Tastaturen / Peilsender Smartphone\",\n            'format_id': 'mp4_720p',\n            'timestamp': 1411812600,\n            'upload_date': '20140927',\n            'description': 'md5:c934cbfb326c669c2bcabcbe3d3fcd20',\n            'thumbnail': r're:^https?://.*/gallery/$',\n        }\n    }, {\n        # YouTube embed\n        'url': 'http://www.heise.de/newsticker/meldung/Netflix-In-20-Jahren-vom-Videoverleih-zum-TV-Revolutionaer-3814130.html',\n        'md5': 'e403d2b43fea8e405e88e3f8623909f1',\n        'info_dict': {\n            'id': '6kmWbXleKW4',\n            'ext': 'mp4',\n            'title': 'NEU IM SEPTEMBER | Netflix',\n            'description': 'md5:2131f3c7525e540d5fd841de938bd452',\n            'upload_date': '20170830',\n            'uploader': 'Netflix Deutschland, \u00d6sterreich und Schweiz',\n            'uploader_id': 'netflixdach',\n        },\n        'params': {\n            'skip_download': True,\n        },\n    }, {\n        'url': 'https://www.heise.de/video/artikel/nachgehakt-Wie-sichert-das-c-t-Tool-Restric-tor-Windows-10-ab-3700244.html',\n        'md5': '4b58058b46625bdbd841fc2804df95fc',\n        'info_dict': {\n            'id': '1_ntrmio2s',\n            'timestamp': 1512470717,\n            'upload_date': '20171205',\n            'ext': 'mp4',\n            'title': 'ct10 nachgehakt hos restrictor',\n        },\n        'params': {\n            'skip_download': True,\n        },\n    }, {\n        'url': 'http://www.heise.de/ct/artikel/c-t-uplink-3-3-Owncloud-Tastaturen-Peilsender-Smartphone-2403911.html',\n        'only_matching': True,\n    }, {\n        'url': 'http://www.heise.de/newsticker/meldung/c-t-uplink-Owncloud-Tastaturen-Peilsender-Smartphone-2404251.html?wt_mc=rss.ho.beitrag.atom',\n        'only_matching': True,\n    }, {\n        'url': 'http://www.heise.de/ct/ausgabe/2016-12-Spiele-3214137.html',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(url, video_id)\n\n        title = self._html_search_meta('fulltitle', webpage, default=None)\n        if not title or title == \"c't\":\n            title = self._search_regex(\n                r'<div[^>]+class=\"videoplayerjw\"[^>]+data-title=\"([^\"]+)\"',\n                webpage, 'title')\n\n        yt_urls = YoutubeIE._extract_urls(webpage)\n        if yt_urls:\n            return self.playlist_from_matches(yt_urls, video_id, title, ie=YoutubeIE.ie_key())\n\n        kaltura_url = KalturaIE._extract_url(webpage)\n        if kaltura_url:\n            return self.url_result(smuggle_url(kaltura_url, {'source_url': url}), KalturaIE.ie_key())\n\n        container_id = self._search_regex(\n            r'<div class=\"videoplayerjw\"[^>]+data-container=\"([0-9]+)\"',\n            webpage, 'container ID')\n\n        sequenz_id = self._search_regex(\n            r'<div class=\"videoplayerjw\"[^>]+data-sequenz=\"([0-9]+)\"',\n            webpage, 'sequenz ID')\n\n        doc = self._download_xml(\n            'http://www.heise.de/videout/feed', video_id, query={\n                'container': container_id,\n                'sequenz': sequenz_id,\n            })\n\n        formats = []\n        for source_node in doc.findall('.//{http://rss.jwpcdn.com/}source'):\n            label = source_node.attrib['label']\n            height = int_or_none(self._search_regex(\n                r'^(.*?_)?([0-9]+)p$', label, 'height', default=None))\n            video_url = source_node.attrib['file']\n            ext = determine_ext(video_url, '')\n            formats.append({\n                'url': video_url,\n                'format_note': label,\n                'format_id': '%s_%s' % (ext, label),\n                'height': height,\n            })\n        self._sort_formats(formats)\n\n        description = self._og_search_description(\n            webpage, default=None) or self._html_search_meta(\n            'description', webpage)\n\n        return {\n            'id': video_id,\n            'title': title,\n            'description': description,\n            'thumbnail': (xpath_text(doc, './/{http://rss.jwpcdn.com/}image') or\n                          self._og_search_thumbnail(webpage)),\n            'timestamp': parse_iso8601(\n                self._html_search_meta('date', webpage)),\n            'formats': formats,\n        }\n", "path": "youtube_dl/extractor/heise.py"}]}