Repository: yt-dlp/yt-dlp

Issue:
[zeenews.india.com] Site support request.
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a new site support request
- [X] I've verified that I'm running yt-dlp version **2022.09.01** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that none of provided URLs [violate any copyrights](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#is-the-website-primarily-used-for-piracy) or contain any [DRM](https://en.wikipedia.org/wiki/Digital_rights_management) to the best of my knowledge
- [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 am willing to share it if required

### Region

India

### Example URLs

https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750

https://zeenews.india.com/hindi/india/video/videsh-superfast-queen-elizabeth-iis-funeral-today/1357710

### Provide a description that is worded well enough to be understood

Hello
Although I have no experience and mastery in programming yt-dlp. But it might be useful for you to know that the blob url is available for the video. for eg: 
blob:https://zeenews.india.com/605a3e30-d354-4358-84d5-3dfdebe6b539

I extracted this from "https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750" this url.

It might be possible to get the video file from this url and can be easily downloaded through yt-dlp.
If this does not work then I apologize. 

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
yt-dlp -vU https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750
[debug] Command-line config: ['-vU', 'https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750']
[debug] User config "C:\Users\user\AppData\Roaming\yt-dlp\config.txt": ['--all-subs', '--embed-subs', '--embed-thumbnail', '--add-metadata', '--write-annotations', '--download-archive=All Youtube History.txt', '--write-annotations', '--write-description', '--write-info-json', '--write-thumbnail', '-f', 'bv+ba/best', '--merge-output-format', 'mp4', '-ciw', '--retries', 'infinite', '-o', '%(title)s-%(id)s-%(format_id)s.%(ext)s']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.09.01 [5d7c7d6] (win32_exe)
[debug] Python 3.8.10 (CPython 64bit) - Windows-10-10.0.19043-SP0
[debug] Checking exe version: ffmpeg -bsfs
[debug] Checking exe version: ffprobe -bsfs
[debug] exe versions: ffmpeg 4.4-full_build-www.gyan.dev (setts), ffprobe 4.4-full_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.06.15, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.3
[debug] Proxy map: {}
[debug] Loaded 1670 extractors
[debug] Loading archive file 'All Youtube History.txt'
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.09.01, Current version: 2022.09.01
yt-dlp is up to date (2022.09.01)
[debug] [generic] Extracting URL: https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750
[generic] 1322750: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] 1322750: Extracting information
[debug] Looking for Brightcove embeds
[debug] Looking for embeds
ERROR: Unsupported URL: https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750
Traceback (most recent call last):
  File "yt_dlp\YoutubeDL.py", line 1459, in wrapper
  File "yt_dlp\YoutubeDL.py", line 1535, in __extract_info
  File "yt_dlp\extractor\common.py", line 670, in extract
  File "yt_dlp\extractor\generic.py", line 3078, in _real_extract
yt_dlp.utils.UnsupportedError: Unsupported URL: https://zeenews.india.com/hindi/world/video/the-china-files-how-did-xi-jinping-become-the-most-powerful-and-only-leader-of-chinas-power/1322750
```



Discussion:
Appears to use Kaltura player but with it's own playback url and initialization process, so I don't think this can be generic or redirect to Kaltura IE.

streaming url can be extracted from `var videourl= "...";` (note the lack of space; relax the regex) 
thumbnail can be extracted from `var thumbnail = "..."`
video id can be extracted from `var mediaid = "..."`

description and upload date can be extracted from the html

e.g.
```
<h1>Namaste India : क्या PFI पर लगेगा बैन?  </h1><div class="articleauthor_details"><span class="aaticleauthor_name"></span><span class="padLR5">|</span><span>Updated: </span><span>Sep 24, 2022, 10:00 AM IST</span></div><div class="video_decription">NIA ने PFI पर बहुत बड़ा खुलासा किया है. PFI, मुस्लिम युवकों की भर्ती ISIS में कर रहा है और आतंकी हमले की साजिश रची जा रही थी.</div>
```

note that below the video appear to be "recommended" videos which appear as json ld video objects. These may include the current video. Also all include the m3u8 streaming url for some strange reason.


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
@@ -2295,6 +2295,7 @@
     Zee5IE,
     Zee5SeriesIE,
 )
+from .zeenews import ZeeNewsIE
 from .zhihu import ZhihuIE
 from .zingmp3 import (
     ZingMp3IE,
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py
--- a/yt_dlp/extractor/common.py
+++ b/yt_dlp/extractor/common.py
@@ -1576,7 +1576,7 @@ def traverse_json_ld(json_ld, at_top_level=True):
                     continue
                 if at_top_level and set(e.keys()) == {'@context', '@graph'}:
                     traverse_json_ld(e['@graph'], at_top_level=False)
-                    break
+                    continue
                 if expected_type is not None and not is_type(e, expected_type):
                     continue
                 rating = traverse_obj(e, ('aggregateRating', 'ratingValue'), expected_type=float_or_none)
diff --git a/yt_dlp/extractor/zeenews.py b/yt_dlp/extractor/zeenews.py
new file mode 100644
--- /dev/null
+++ b/yt_dlp/extractor/zeenews.py
@@ -0,0 +1,58 @@
+from .common import InfoExtractor
+from ..utils import ExtractorError, traverse_obj
+
+
+class ZeeNewsIE(InfoExtractor):
+    _VALID_URL = r'https?://zeenews\.india\.com/[^#?]+/video/(?P<display_id>[^#/?]+)/(?P<id>\d+)'
+    _TESTS = [
+        {
+            'url': 'https://zeenews.india.com/hindi/india/delhi-ncr-haryana/delhi-ncr/video/greater-noida-video-viral-on-social-media-attackers-beat-businessman-and-his-son-oppose-market-closed-atdnh/1402138',
+            'info_dict': {
+                'id': '1402138',
+                'ext': 'mp4',
+                'title': 'Greater Noida Video: हमलावरों ने दिनदहाड़े दुकान में घुसकर की मारपीट, देखें वीडियो',
+                'display_id': 'greater-noida-video-viral-on-social-media-attackers-beat-businessman-and-his-son-oppose-market-closed-atdnh',
+                'upload_date': '20221019',
+                'thumbnail': r're:^https?://.*\.jpg*',
+                'timestamp': 1666174501,
+                'view_count': int,
+                'duration': 97,
+                'description': 'ग्रेटर नोएडा जारचा थाना क्षेत्र के प्याबली में दिनदहाड़े दुकान में घुसकर अज्ञात हमलावरों ने हमला कर',
+            }
+        },
+        {
+            'url': 'https://zeenews.india.com/hindi/india/video/videsh-superfast-queen-elizabeth-iis-funeral-today/1357710',
+            'info_dict': {
+                'id': '1357710',
+                'ext': 'mp4',
+                'title': 'Videsh Superfast: महारानी के अंतिम संस्कार की तैयारी शुरू',
+                'display_id': 'videsh-superfast-queen-elizabeth-iis-funeral-today',
+                'upload_date': '20220919',
+                'thumbnail': r're:^https?://.*\.jpg*',
+                'timestamp': 1663556881,
+                'view_count': int,
+                'duration': 133,
+                'description': 'सेगमेंट विदेश सुपराफास्ट में देखिए देश और दुनिया की सभी बड़ी खबरें, वो भी हर खबर फटाफट अंदाज में.',
+            }
+        }
+    ]
+
+    def _real_extract(self, url):
+        content_id, display_id = self._match_valid_url(url).group('id', 'display_id')
+        webpage = self._download_webpage(url, content_id)
+        json_ld_list = list(self._yield_json_ld(webpage, display_id))
+
+        embed_url = traverse_obj(
+            json_ld_list, (lambda _, v: v['@type'] == 'VideoObject', 'embedUrl'), get_all=False)
+        if not embed_url:
+            raise ExtractorError('No video found', expected=True)
+
+        formats = self._extract_m3u8_formats(embed_url, content_id, 'mp4')
+        self._sort_formats(formats)
+
+        return {
+            **self._json_ld(json_ld_list, display_id),
+            'id': content_id,
+            'display_id': display_id,
+            'formats': formats,
+        }


Test patch: