Repository: yt-dlp/yt-dlp

Issue:
[Rumble] Extract description
### Checklist

- [X] I'm reporting a broken site
- [X] I've verified that I'm running yt-dlp version **2022.02.04**. ([update instructions](https://github.com/yt-dlp/yt-dlp#update))
- [X] I've checked that all provided URLs are alive and playable in a browser
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/ytdl-org/youtube-dl#video-url-contains-an-ampersand-and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues including closed ones. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

US

### Description

When downloading Youtube videos the channel name, url, title and description are saved to the metadata. When downloading from Rumble the url and title are saved to metadata, but not the channel name or description.

### Verbose log

```shell
[debug] Command-line config: ['-Uv', 'https://rumble.com/vv6cru-hurro.html']
[debug] User config "/Users/me/.config/yt-dlp/config": ['--cookies-from-browser', 'firefox', '--cache-dir', '/Users/me/.config/youtube-dl/', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:85.0) Gecko/20100101 Firefox/85.0', '--geo-bypass', '-u', 'PRIVATE', '-p', 'PRIVATE', '-i', '--no-mark-watched', '--no-warnings', '--retries', 'infinite', '--fragment-retries', 'infinite', '--download-archive', '/Users/me/.config/youtube-dl/downloads.txt', '-o', '/Users/me/Youtubes/%(uploader)s/%(playlist_title)s/%(upload_date)s - %(title)s.%(ext)s', '-f', 'bestvideo[ext=mp4][height<=1080]+bestaudio[ext=m4a][abr<=192]/bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio/best', '--sub-format', 'srt', '--convert-subs', 'srt', '--write-subs', '--write-auto-subs', '--embed-subs', '--compat-options', 'no-keep-subs', '--sub-lang', 'en,ja', '--embed-thumbnail', '--embed-metadata', '--embed-chapters', '--xattrs', '--audio-format', 'm4a', '--recode-video', 'mp4']
[Cookies] Extracting cookies from firefox
[debug] Extracting cookies from: "/Users/me/Library/Application Support/Firefox/Profiles/xy4v0sei.default-release-1574345941647/cookies.sqlite"
[Cookies] Extracted 762 cookies from firefox
[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, err utf-8, pref UTF-8
[debug] yt-dlp version 2022.02.04 [c1653e9ef]
[debug] Compatibility options: no-keep-subs
[debug] Python version 3.10.2 (CPython 64bit) - macOS-12.2-arm64-arm-64bit
[debug] exe versions: ffmpeg 5.0 (setts), ffprobe 5.0
[debug] Optional libraries: Cryptodome, mutagen, sqlite, websockets
[debug] Proxy map: {}
[debug] Loading archive file '/Users/me/.config/youtube-dl/downloads.txt'
Latest version: 2022.02.04, Current version: 2022.02.04
yt-dlp is up to date (2022.02.04)
[debug] [generic] Extracting URL: https://rumble.com/vv6cru-hurro.html
[generic] vv6cru-hurro: Requesting header
[generic] vv6cru-hurro: Downloading webpage
[generic] vv6cru-hurro: Extracting information
[debug] Looking for video embeds
[debug] [RumbleEmbed] Extracting URL: https://rumble.com/embed/vsk6pm
[RumbleEmbed] vsk6pm: Downloading JSON metadata
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
[info] vsk6pm: Downloading 1 format(s): mp4-1080p
[info] Downloading video thumbnail 0 ...
[info] Writing video thumbnail 0 to: /Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say 'hello' over and over again.jpg
[SubtitlesConvertor] There aren't any subtitles to convert
[debug] Invoking downloader on "https://sp.rmbl.ws/s8/2/Q/u/W/h/QuWhd.haa.mp4"
[download] Destination: /Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say 'hello' over and over again.mp4
[download] 100% of 18.95MiB in 00:05
[VideoConvertor] Not converting media file "/Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say 'hello' over and over again.mp4"; already is in target format mp4
[EmbedSubtitle] There aren't any subtitles to embed
[Metadata] Adding metadata to "/Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say 'hello' over and over again.mp4"
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i 'file:/Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say '"'"'hello'"'"' over and over again.mp4' -map 0 -dn -ignore_unknown -c copy -metadata 'title=Listen to this cat literally say "hello" over and over again' -metadata date=20220217 -metadata purl=https://rumble.com/embed/vsk6pm -metadata comment=https://rumble.com/embed/vsk6pm -movflags +faststart 'file:/Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say '"'"'hello'"'"' over and over again.temp.mp4'
[EmbedThumbnail] mutagen: Adding thumbnail to "/Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say 'hello' over and over again.mp4"
Deleting original file /Users/me/Youtubes/NA/NA/20220217 - Listen to this cat literally say 'hello' over and over again.jpg (pass -k to keep)
[XAttrMetadata] Writing metadata to file's xattrs
[debug] Adding to archive: rumbleembed vsk6pm
```



Discussion:
The rumble extractor only defines `channel`, and not `uploader`. Use `--parse-metadata "channel:%(meta_artist)s"` if you want to add the channel name as artist in the metadata
@pukkandan Thank you - that works for the artist. For the description I'm using the example in the config section `--parse-metadata "description:(?s)(?P<meta_comment>.+)"` but that doesn't seem to work. Is that not possible with Rumble do you know?
Description is not currently being extracted for rumble. Hence why I re-titled the issue
Each paragraph of the video's description starts with following tag:
>&lt;p class="media-description"&gt;

Would like for me to submit a pull request that extracts the description?
Yes, but note the discussion in #3031

Resolving patch:
diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py
--- a/yt_dlp/extractor/_extractors.py
+++ b/yt_dlp/extractor/_extractors.py
@@ -1561,6 +1561,7 @@
 from .rule34video import Rule34VideoIE
 from .rumble import (
     RumbleEmbedIE,
+    RumbleIE,
     RumbleChannelIE,
 )
 from .rutube import (
diff --git a/yt_dlp/extractor/rumble.py b/yt_dlp/extractor/rumble.py
--- a/yt_dlp/extractor/rumble.py
+++ b/yt_dlp/extractor/rumble.py
@@ -4,11 +4,15 @@
 from .common import InfoExtractor
 from ..compat import compat_HTTPError
 from ..utils import (
+    ExtractorError,
+    UnsupportedError,
+    clean_html,
+    get_element_by_class,
     int_or_none,
+    parse_count,
     parse_iso8601,
     traverse_obj,
     unescapeHTML,
-    ExtractorError,
 )
 
 
@@ -111,24 +115,6 @@ class RumbleEmbedIE(InfoExtractor):
     }]
 
     _WEBPAGE_TESTS = [
-        {
-            'note': 'Rumble embed',
-            'url': 'https://rumble.com/vdmum1-moose-the-dog-helps-girls-dig-a-snow-fort.html',
-            'md5': '53af34098a7f92c4e51cf0bd1c33f009',
-            'info_dict': {
-                'id': 'vb0ofn',
-                'ext': 'mp4',
-                'timestamp': 1612662578,
-                'uploader': 'LovingMontana',
-                'channel': 'LovingMontana',
-                'upload_date': '20210207',
-                'title': 'Winter-loving dog helps girls dig a snow fort ',
-                'channel_url': 'https://rumble.com/c/c-546523',
-                'thumbnail': 'https://sp.rmbl.ws/s8/1/5/f/x/x/5fxxb.OvCc.1-small-Moose-The-Dog-Helps-Girls-D.jpg',
-                'duration': 103,
-                'live_status': 'not_live',
-            }
-        },
         {
             'note': 'Rumble JS embed',
             'url': 'https://therightscoop.com/what-does-9-plus-1-plus-1-equal-listen-to-this-audio-of-attempted-kavanaugh-assassins-call-and-youll-get-it',
@@ -236,6 +222,84 @@ def _real_extract(self, url):
         }
 
 
+class RumbleIE(InfoExtractor):
+    _VALID_URL = r'https?://(?:www\.)?rumble\.com/(?P<id>v(?!ideos)[\w.-]+)[^/]*$'
+    _EMBED_REGEX = [r'<a class=video-item--a href=(?P<url>/v[\w.-]+\.html)>']
+    _TESTS = [{
+        'add_ie': ['RumbleEmbed'],
+        'url': 'https://rumble.com/vdmum1-moose-the-dog-helps-girls-dig-a-snow-fort.html',
+        'md5': '53af34098a7f92c4e51cf0bd1c33f009',
+        'info_dict': {
+            'id': 'vb0ofn',
+            'ext': 'mp4',
+            'timestamp': 1612662578,
+            'uploader': 'LovingMontana',
+            'channel': 'LovingMontana',
+            'upload_date': '20210207',
+            'title': 'Winter-loving dog helps girls dig a snow fort ',
+            'description': 'Moose the dog is more than happy to help with digging out this epic snow fort. Great job, Moose!',
+            'channel_url': 'https://rumble.com/c/c-546523',
+            'thumbnail': r're:https://.+\.jpg',
+            'duration': 103,
+            'like_count': int,
+            'view_count': int,
+            'live_status': 'not_live',
+        }
+    }, {
+        'url': 'http://www.rumble.com/vDMUM1?key=value',
+        'only_matching': True,
+    }]
+
+    _WEBPAGE_TESTS = [{
+        'url': 'https://rumble.com/videos?page=2',
+        'playlist_count': 25,
+        'info_dict': {
+            'id': 'videos?page=2',
+            'title': 'All videos',
+            'description': 'Browse videos uploaded to Rumble.com',
+            'age_limit': 0,
+        },
+    }, {
+        'url': 'https://rumble.com/live-videos',
+        'playlist_mincount': 19,
+        'info_dict': {
+            'id': 'live-videos',
+            'title': 'Live Videos',
+            'description': 'Live videos on Rumble.com',
+            'age_limit': 0,
+        },
+    }, {
+        'url': 'https://rumble.com/search/video?q=rumble&sort=views',
+        'playlist_count': 24,
+        'info_dict': {
+            'id': 'video?q=rumble&sort=views',
+            'title': 'Search results for: rumble',
+            'age_limit': 0,
+        },
+    }]
+
+    def _real_extract(self, url):
+        page_id = self._match_id(url)
+        webpage = self._download_webpage(url, page_id)
+        url_info = next(RumbleEmbedIE.extract_from_webpage(self._downloader, url, webpage), None)
+        if not url_info:
+            raise UnsupportedError(url)
+
+        release_ts_str = self._search_regex(
+            r'(?:Livestream begins|Streamed on):\s+<time datetime="([^"]+)',
+            webpage, 'release date', fatal=False, default=None)
+        view_count_str = self._search_regex(r'<span class="media-heading-info">([\d,]+) Views',
+                                            webpage, 'view count', fatal=False, default=None)
+
+        return self.url_result(
+            url_info['url'], ie_key=url_info['ie_key'], url_transparent=True,
+            view_count=parse_count(view_count_str),
+            release_timestamp=parse_iso8601(release_ts_str),
+            like_count=parse_count(get_element_by_class('rumbles-count', webpage)),
+            description=clean_html(get_element_by_class('media-description', webpage)),
+        )
+
+
 class RumbleChannelIE(InfoExtractor):
     _VALID_URL = r'(?P<url>https?://(?:www\.)?rumble\.com/(?:c|user)/(?P<id>[^&?#$/]+))'
 


Test patch: