We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
ERROR: Unable to extract OpenGraph title;
## 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 *2018.12.17*. 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 **2018.12.17**

### 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
- [x] Checked that provided video/audio/playlist URLs (if any) are alive and playable in a browser

### 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

---

```
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'--verbose', u'https://i.imgur.com/jxBXAMC.gifv']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2018.12.17
[debug] Python version 2.7.12 (CPython) - Linux-4.4.0-112-generic-x86_64-with-Ubuntu-16.04-xenial
[debug] exe versions: ffmpeg 2.8.15-0ubuntu0.16.04.1, ffprobe 2.8.15-0ubuntu0.16.04.1, rtmpdump 2.4
[debug] Proxy map: {}
[Imgur] jxBXAMC: Downloading webpage
ERROR: Unable to extract OpenGraph title; 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 "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 793, in extract_info
    ie_result = ie.extract(url)
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 508, in extract
    ie_result = self._real_extract(url)
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/imgur.py", line 90, in _real_extract
    'title': self._og_search_title(webpage),
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 1095, in _og_search_title
    return self._og_search_property('title', html, **kargs)
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 1083, in _og_search_property
    escaped = self._search_regex(og_regexes, html, name, flags=re.DOTALL, **kargs)
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 983, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
RegexNotFoundError: Unable to extract OpenGraph title; 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 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/imgur.py`
Content:
```
1 from __future__ import unicode_literals
2 
3 import re
4 
5 from .common import InfoExtractor
6 from ..utils import (
7     int_or_none,
8     js_to_json,
9     mimetype2ext,
10     ExtractorError,
11 )
12 
13 
14 class ImgurIE(InfoExtractor):
15     _VALID_URL = r'https?://(?:i\.)?imgur\.com/(?!(?:a|gallery|(?:t(?:opic)?|r)/[^/]+)/)(?P<id>[a-zA-Z0-9]+)'
16 
17     _TESTS = [{
18         'url': 'https://i.imgur.com/A61SaA1.gifv',
19         'info_dict': {
20             'id': 'A61SaA1',
21             'ext': 'mp4',
22             'title': 're:Imgur GIF$|MRW gifv is up and running without any bugs$',
23         },
24     }, {
25         'url': 'https://imgur.com/A61SaA1',
26         'only_matching': True,
27     }, {
28         'url': 'https://i.imgur.com/crGpqCV.mp4',
29         'only_matching': True,
30     }]
31 
32     def _real_extract(self, url):
33         video_id = self._match_id(url)
34         webpage = self._download_webpage(
35             'https://i.imgur.com/{id}.gifv'.format(id=video_id), video_id)
36 
37         width = int_or_none(self._og_search_property(
38             'video:width', webpage, default=None))
39         height = int_or_none(self._og_search_property(
40             'video:height', webpage, default=None))
41 
42         video_elements = self._search_regex(
43             r'(?s)<div class="video-elements">(.*?)</div>',
44             webpage, 'video elements', default=None)
45         if not video_elements:
46             raise ExtractorError(
47                 'No sources found for video %s. Maybe an image?' % video_id,
48                 expected=True)
49 
50         formats = []
51         for m in re.finditer(r'<source\s+src="(?P<src>[^"]+)"\s+type="(?P<type>[^"]+)"', video_elements):
52             formats.append({
53                 'format_id': m.group('type').partition('/')[2],
54                 'url': self._proto_relative_url(m.group('src')),
55                 'ext': mimetype2ext(m.group('type')),
56                 'width': width,
57                 'height': height,
58                 'http_headers': {
59                     'User-Agent': 'youtube-dl (like wget)',
60                 },
61             })
62 
63         gif_json = self._search_regex(
64             r'(?s)var\s+videoItem\s*=\s*(\{.*?\})',
65             webpage, 'GIF code', fatal=False)
66         if gif_json:
67             gifd = self._parse_json(
68                 gif_json, video_id, transform_source=js_to_json)
69             formats.append({
70                 'format_id': 'gif',
71                 'preference': -10,
72                 'width': width,
73                 'height': height,
74                 'ext': 'gif',
75                 'acodec': 'none',
76                 'vcodec': 'gif',
77                 'container': 'gif',
78                 'url': self._proto_relative_url(gifd['gifUrl']),
79                 'filesize': gifd.get('size'),
80                 'http_headers': {
81                     'User-Agent': 'youtube-dl (like wget)',
82                 },
83             })
84 
85         self._sort_formats(formats)
86 
87         return {
88             'id': video_id,
89             'formats': formats,
90             'title': self._og_search_title(webpage),
91         }
92 
93 
94 class ImgurGalleryIE(InfoExtractor):
95     IE_NAME = 'imgur:gallery'
96     _VALID_URL = r'https?://(?:i\.)?imgur\.com/(?:gallery|(?:t(?:opic)?|r)/[^/]+)/(?P<id>[a-zA-Z0-9]+)'
97 
98     _TESTS = [{
99         'url': 'http://imgur.com/gallery/Q95ko',
100         'info_dict': {
101             'id': 'Q95ko',
102             'title': 'Adding faces make every GIF better',
103         },
104         'playlist_count': 25,
105     }, {
106         'url': 'http://imgur.com/topic/Aww/ll5Vk',
107         'only_matching': True,
108     }, {
109         'url': 'https://imgur.com/gallery/YcAQlkx',
110         'info_dict': {
111             'id': 'YcAQlkx',
112             'ext': 'mp4',
113             'title': 'Classic Steve Carell gif...cracks me up everytime....damn the repost downvotes....',
114         }
115     }, {
116         'url': 'http://imgur.com/topic/Funny/N8rOudd',
117         'only_matching': True,
118     }, {
119         'url': 'http://imgur.com/r/aww/VQcQPhM',
120         'only_matching': True,
121     }]
122 
123     def _real_extract(self, url):
124         gallery_id = self._match_id(url)
125 
126         data = self._download_json(
127             'https://imgur.com/gallery/%s.json' % gallery_id,
128             gallery_id)['data']['image']
129 
130         if data.get('is_album'):
131             entries = [
132                 self.url_result('http://imgur.com/%s' % image['hash'], ImgurIE.ie_key(), image['hash'])
133                 for image in data['album_images']['images'] if image.get('hash')]
134             return self.playlist_result(entries, gallery_id, data.get('title'), data.get('description'))
135 
136         return self.url_result('http://imgur.com/%s' % gallery_id, ImgurIE.ie_key(), gallery_id)
137 
138 
139 class ImgurAlbumIE(ImgurGalleryIE):
140     IE_NAME = 'imgur:album'
141     _VALID_URL = r'https?://(?:i\.)?imgur\.com/a/(?P<id>[a-zA-Z0-9]+)'
142 
143     _TESTS = [{
144         'url': 'http://imgur.com/a/j6Orj',
145         'info_dict': {
146             'id': 'j6Orj',
147             'title': 'A Literary Analysis of "Star Wars: The Force Awakens"',
148         },
149         'playlist_count': 12,
150     }]
151
```
--- 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/imgur.py b/youtube_dl/extractor/imgur.py
--- a/youtube_dl/extractor/imgur.py
+++ b/youtube_dl/extractor/imgur.py
@@ -27,6 +27,10 @@
     }, {
         'url': 'https://i.imgur.com/crGpqCV.mp4',
         'only_matching': True,
+    }, {
+        # no title
+        'url': 'https://i.imgur.com/jxBXAMC.gifv',
+        'only_matching': True,
     }]
 
     def _real_extract(self, url):
@@ -87,7 +91,7 @@
         return {
             'id': video_id,
             'formats': formats,
-            'title': self._og_search_title(webpage),
+            'title': self._og_search_title(webpage, default=video_id),
         }

{"golden_diff": "diff --git a/youtube_dl/extractor/imgur.py b/youtube_dl/extractor/imgur.py\n--- a/youtube_dl/extractor/imgur.py\n+++ b/youtube_dl/extractor/imgur.py\n@@ -27,6 +27,10 @@\n     }, {\n         'url': 'https://i.imgur.com/crGpqCV.mp4',\n         'only_matching': True,\n+    }, {\n+        # no title\n+        'url': 'https://i.imgur.com/jxBXAMC.gifv',\n+        'only_matching': True,\n     }]\n \n     def _real_extract(self, url):\n@@ -87,7 +91,7 @@\n         return {\n             'id': video_id,\n             'formats': formats,\n-            'title': self._og_search_title(webpage),\n+            'title': self._og_search_title(webpage, default=video_id),\n         }\n", "issue": "ERROR: Unable to extract OpenGraph title;\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 *2018.12.17*. 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 **2018.12.17**\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- [x] Checked that provided video/audio/playlist URLs (if any) are alive and playable in a browser\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```\r\n[debug] System config: []\r\n[debug] User config: []\r\n[debug] Custom config: []\r\n[debug] Command-line args: [u'--verbose', u'https://i.imgur.com/jxBXAMC.gifv']\r\n[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8\r\n[debug] youtube-dl version 2018.12.17\r\n[debug] Python version 2.7.12 (CPython) - Linux-4.4.0-112-generic-x86_64-with-Ubuntu-16.04-xenial\r\n[debug] exe versions: ffmpeg 2.8.15-0ubuntu0.16.04.1, ffprobe 2.8.15-0ubuntu0.16.04.1, rtmpdump 2.4\r\n[debug] Proxy map: {}\r\n[Imgur] jxBXAMC: Downloading webpage\r\nERROR: Unable to extract OpenGraph title; 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 \"/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py\", line 793, in extract_info\r\n    ie_result = ie.extract(url)\r\n  File \"/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py\", line 508, in extract\r\n    ie_result = self._real_extract(url)\r\n  File \"/usr/local/bin/youtube-dl/youtube_dl/extractor/imgur.py\", line 90, in _real_extract\r\n    'title': self._og_search_title(webpage),\r\n  File \"/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py\", line 1095, in _og_search_title\r\n    return self._og_search_property('title', html, **kargs)\r\n  File \"/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py\", line 1083, in _og_search_property\r\n    escaped = self._search_regex(og_regexes, html, name, flags=re.DOTALL, **kargs)\r\n  File \"/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py\", line 983, in _search_regex\r\n    raise RegexNotFoundError('Unable to extract %s' % _name)\r\nRegexNotFoundError: Unable to extract OpenGraph title; 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\n```\n", "before_files": [{"content": "from __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    int_or_none,\n    js_to_json,\n    mimetype2ext,\n    ExtractorError,\n)\n\n\nclass ImgurIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:i\\.)?imgur\\.com/(?!(?:a|gallery|(?:t(?:opic)?|r)/[^/]+)/)(?P<id>[a-zA-Z0-9]+)'\n\n    _TESTS = [{\n        'url': 'https://i.imgur.com/A61SaA1.gifv',\n        'info_dict': {\n            'id': 'A61SaA1',\n            'ext': 'mp4',\n            'title': 're:Imgur GIF$|MRW gifv is up and running without any bugs$',\n        },\n    }, {\n        'url': 'https://imgur.com/A61SaA1',\n        'only_matching': True,\n    }, {\n        'url': 'https://i.imgur.com/crGpqCV.mp4',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(\n            'https://i.imgur.com/{id}.gifv'.format(id=video_id), video_id)\n\n        width = int_or_none(self._og_search_property(\n            'video:width', webpage, default=None))\n        height = int_or_none(self._og_search_property(\n            'video:height', webpage, default=None))\n\n        video_elements = self._search_regex(\n            r'(?s)<div class=\"video-elements\">(.*?)</div>',\n            webpage, 'video elements', default=None)\n        if not video_elements:\n            raise ExtractorError(\n                'No sources found for video %s. Maybe an image?' % video_id,\n                expected=True)\n\n        formats = []\n        for m in re.finditer(r'<source\\s+src=\"(?P<src>[^\"]+)\"\\s+type=\"(?P<type>[^\"]+)\"', video_elements):\n            formats.append({\n                'format_id': m.group('type').partition('/')[2],\n                'url': self._proto_relative_url(m.group('src')),\n                'ext': mimetype2ext(m.group('type')),\n                'width': width,\n                'height': height,\n                'http_headers': {\n                    'User-Agent': 'youtube-dl (like wget)',\n                },\n            })\n\n        gif_json = self._search_regex(\n            r'(?s)var\\s+videoItem\\s*=\\s*(\\{.*?\\})',\n            webpage, 'GIF code', fatal=False)\n        if gif_json:\n            gifd = self._parse_json(\n                gif_json, video_id, transform_source=js_to_json)\n            formats.append({\n                'format_id': 'gif',\n                'preference': -10,\n                'width': width,\n                'height': height,\n                'ext': 'gif',\n                'acodec': 'none',\n                'vcodec': 'gif',\n                'container': 'gif',\n                'url': self._proto_relative_url(gifd['gifUrl']),\n                'filesize': gifd.get('size'),\n                'http_headers': {\n                    'User-Agent': 'youtube-dl (like wget)',\n                },\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        }\n\n\nclass ImgurGalleryIE(InfoExtractor):\n    IE_NAME = 'imgur:gallery'\n    _VALID_URL = r'https?://(?:i\\.)?imgur\\.com/(?:gallery|(?:t(?:opic)?|r)/[^/]+)/(?P<id>[a-zA-Z0-9]+)'\n\n    _TESTS = [{\n        'url': 'http://imgur.com/gallery/Q95ko',\n        'info_dict': {\n            'id': 'Q95ko',\n            'title': 'Adding faces make every GIF better',\n        },\n        'playlist_count': 25,\n    }, {\n        'url': 'http://imgur.com/topic/Aww/ll5Vk',\n        'only_matching': True,\n    }, {\n        'url': 'https://imgur.com/gallery/YcAQlkx',\n        'info_dict': {\n            'id': 'YcAQlkx',\n            'ext': 'mp4',\n            'title': 'Classic Steve Carell gif...cracks me up everytime....damn the repost downvotes....',\n        }\n    }, {\n        'url': 'http://imgur.com/topic/Funny/N8rOudd',\n        'only_matching': True,\n    }, {\n        'url': 'http://imgur.com/r/aww/VQcQPhM',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        gallery_id = self._match_id(url)\n\n        data = self._download_json(\n            'https://imgur.com/gallery/%s.json' % gallery_id,\n            gallery_id)['data']['image']\n\n        if data.get('is_album'):\n            entries = [\n                self.url_result('http://imgur.com/%s' % image['hash'], ImgurIE.ie_key(), image['hash'])\n                for image in data['album_images']['images'] if image.get('hash')]\n            return self.playlist_result(entries, gallery_id, data.get('title'), data.get('description'))\n\n        return self.url_result('http://imgur.com/%s' % gallery_id, ImgurIE.ie_key(), gallery_id)\n\n\nclass ImgurAlbumIE(ImgurGalleryIE):\n    IE_NAME = 'imgur:album'\n    _VALID_URL = r'https?://(?:i\\.)?imgur\\.com/a/(?P<id>[a-zA-Z0-9]+)'\n\n    _TESTS = [{\n        'url': 'http://imgur.com/a/j6Orj',\n        'info_dict': {\n            'id': 'j6Orj',\n            'title': 'A Literary Analysis of \"Star Wars: The Force Awakens\"',\n        },\n        'playlist_count': 12,\n    }]\n", "path": "youtube_dl/extractor/imgur.py"}], "after_files": [{"content": "from __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    int_or_none,\n    js_to_json,\n    mimetype2ext,\n    ExtractorError,\n)\n\n\nclass ImgurIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:i\\.)?imgur\\.com/(?!(?:a|gallery|(?:t(?:opic)?|r)/[^/]+)/)(?P<id>[a-zA-Z0-9]+)'\n\n    _TESTS = [{\n        'url': 'https://i.imgur.com/A61SaA1.gifv',\n        'info_dict': {\n            'id': 'A61SaA1',\n            'ext': 'mp4',\n            'title': 're:Imgur GIF$|MRW gifv is up and running without any bugs$',\n        },\n    }, {\n        'url': 'https://imgur.com/A61SaA1',\n        'only_matching': True,\n    }, {\n        'url': 'https://i.imgur.com/crGpqCV.mp4',\n        'only_matching': True,\n    }, {\n        # no title\n        'url': 'https://i.imgur.com/jxBXAMC.gifv',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(\n            'https://i.imgur.com/{id}.gifv'.format(id=video_id), video_id)\n\n        width = int_or_none(self._og_search_property(\n            'video:width', webpage, default=None))\n        height = int_or_none(self._og_search_property(\n            'video:height', webpage, default=None))\n\n        video_elements = self._search_regex(\n            r'(?s)<div class=\"video-elements\">(.*?)</div>',\n            webpage, 'video elements', default=None)\n        if not video_elements:\n            raise ExtractorError(\n                'No sources found for video %s. Maybe an image?' % video_id,\n                expected=True)\n\n        formats = []\n        for m in re.finditer(r'<source\\s+src=\"(?P<src>[^\"]+)\"\\s+type=\"(?P<type>[^\"]+)\"', video_elements):\n            formats.append({\n                'format_id': m.group('type').partition('/')[2],\n                'url': self._proto_relative_url(m.group('src')),\n                'ext': mimetype2ext(m.group('type')),\n                'width': width,\n                'height': height,\n                'http_headers': {\n                    'User-Agent': 'youtube-dl (like wget)',\n                },\n            })\n\n        gif_json = self._search_regex(\n            r'(?s)var\\s+videoItem\\s*=\\s*(\\{.*?\\})',\n            webpage, 'GIF code', fatal=False)\n        if gif_json:\n            gifd = self._parse_json(\n                gif_json, video_id, transform_source=js_to_json)\n            formats.append({\n                'format_id': 'gif',\n                'preference': -10,\n                'width': width,\n                'height': height,\n                'ext': 'gif',\n                'acodec': 'none',\n                'vcodec': 'gif',\n                'container': 'gif',\n                'url': self._proto_relative_url(gifd['gifUrl']),\n                'filesize': gifd.get('size'),\n                'http_headers': {\n                    'User-Agent': 'youtube-dl (like wget)',\n                },\n            })\n\n        self._sort_formats(formats)\n\n        return {\n            'id': video_id,\n            'formats': formats,\n            'title': self._og_search_title(webpage, default=video_id),\n        }\n\n\nclass ImgurGalleryIE(InfoExtractor):\n    IE_NAME = 'imgur:gallery'\n    _VALID_URL = r'https?://(?:i\\.)?imgur\\.com/(?:gallery|(?:t(?:opic)?|r)/[^/]+)/(?P<id>[a-zA-Z0-9]+)'\n\n    _TESTS = [{\n        'url': 'http://imgur.com/gallery/Q95ko',\n        'info_dict': {\n            'id': 'Q95ko',\n            'title': 'Adding faces make every GIF better',\n        },\n        'playlist_count': 25,\n    }, {\n        'url': 'http://imgur.com/topic/Aww/ll5Vk',\n        'only_matching': True,\n    }, {\n        'url': 'https://imgur.com/gallery/YcAQlkx',\n        'info_dict': {\n            'id': 'YcAQlkx',\n            'ext': 'mp4',\n            'title': 'Classic Steve Carell gif...cracks me up everytime....damn the repost downvotes....',\n        }\n    }, {\n        'url': 'http://imgur.com/topic/Funny/N8rOudd',\n        'only_matching': True,\n    }, {\n        'url': 'http://imgur.com/r/aww/VQcQPhM',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        gallery_id = self._match_id(url)\n\n        data = self._download_json(\n            'https://imgur.com/gallery/%s.json' % gallery_id,\n            gallery_id)['data']['image']\n\n        if data.get('is_album'):\n            entries = [\n                self.url_result('http://imgur.com/%s' % image['hash'], ImgurIE.ie_key(), image['hash'])\n                for image in data['album_images']['images'] if image.get('hash')]\n            return self.playlist_result(entries, gallery_id, data.get('title'), data.get('description'))\n\n        return self.url_result('http://imgur.com/%s' % gallery_id, ImgurIE.ie_key(), gallery_id)\n\n\nclass ImgurAlbumIE(ImgurGalleryIE):\n    IE_NAME = 'imgur:album'\n    _VALID_URL = r'https?://(?:i\\.)?imgur\\.com/a/(?P<id>[a-zA-Z0-9]+)'\n\n    _TESTS = [{\n        'url': 'http://imgur.com/a/j6Orj',\n        'info_dict': {\n            'id': 'j6Orj',\n            'title': 'A Literary Analysis of \"Star Wars: The Force Awakens\"',\n        },\n        'playlist_count': 12,\n    }]\n", "path": "youtube_dl/extractor/imgur.py"}]}