We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
YleAreena extractor error
### 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 broken site
- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([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 all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#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

United Kingdom

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

YleAreena extractor error

### 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
[debug] Command-line config: ['https://areena.yle.fi/1-64829589', '-vU']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.06 [6becd25] (pip)
[debug] Python 3.10.9 (CPython x86_64 64bit) - Linux-5.15.89-1-lts-x86_64-with-glibc2.36 (OpenSSL 3.0.7 1 Nov 2022, glibc 2.36)
[debug] exe versions: ffmpeg 5.1.2 (setts), ffprobe 5.1.2, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1760 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2023.01.06, Current version: 2023.01.06
yt-dlp is up to date (2023.01.06)
[YleAreena] Extracting URL: https://areena.yle.fi/1-64829589
[YleAreena] 1-64829589: Downloading webpage
[YleAreena] 1-64829589: Downloading JSON metadata
ERROR: 1-64829589: An extractor error has occurred. (caused by KeyError('kaltura')); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "/home/erwin/.local/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 680, in extract
    ie_result = self._real_extract(url)
  File "/home/erwin/.local/lib/python3.10/site-packages/yt_dlp/extractor/yle_areena.py", line 97, in _real_extract
    f'kaltura:1955031:{video_data["data"]["ongoing_ondemand"]["kaltura"]["id"]}',
KeyError: 'kaltura'
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `yt_dlp/extractor/yle_areena.py`
Content:
```
1 from .common import InfoExtractor
2 from .kaltura import KalturaIE
3 from ..utils import (
4     int_or_none,
5     smuggle_url,
6     traverse_obj,
7     unified_strdate,
8     url_or_none,
9 )
10 
11 
12 class YleAreenaIE(InfoExtractor):
13     _VALID_URL = r'https?://areena\.yle\.fi/(?P<id>[\d-]+)'
14     _TESTS = [
15         {
16             'url': 'https://areena.yle.fi/1-4371942',
17             'md5': '932edda0ecf5dfd6423804182d32f8ac',
18             'info_dict': {
19                 'id': '0_a3tjk92c',
20                 'ext': 'mp4',
21                 'title': 'Pouchit',
22                 'description': 'md5:d487309c3abbe5650265bbd1742d2f82',
23                 'series': 'Modernit miehet',
24                 'season': 'Season 1',
25                 'season_number': 1,
26                 'episode': 'Episode 2',
27                 'episode_number': 2,
28                 'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/0_a3tjk92c/version/100061',
29                 'uploader_id': 'ovp@yle.fi',
30                 'duration': 1435,
31                 'view_count': int,
32                 'upload_date': '20181204',
33                 'release_date': '20190106',
34                 'timestamp': 1543916210,
35                 'subtitles': {'fin': [{'url': r're:^https?://', 'ext': 'srt'}]},
36                 'age_limit': 7,
37                 'webpage_url': 'https://areena.yle.fi/1-4371942'
38             }
39         },
40         {
41             'url': 'https://areena.yle.fi/1-2158940',
42             'md5': 'cecb603661004e36af8c5188b5212b12',
43             'info_dict': {
44                 'id': '1_l38iz9ur',
45                 'ext': 'mp4',
46                 'title': 'Albi haluaa vessan',
47                 'description': 'md5:15236d810c837bed861fae0e88663c33',
48                 'series': 'Albi Lumiukko',
49                 'season': None,
50                 'season_number': None,
51                 'episode': None,
52                 'episode_number': None,
53                 'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/1_l38iz9ur/version/100021',
54                 'uploader_id': 'ovp@yle.fi',
55                 'duration': 319,
56                 'view_count': int,
57                 'upload_date': '20211202',
58                 'release_date': '20211215',
59                 'timestamp': 1638448202,
60                 'subtitles': {},
61                 'age_limit': 0,
62                 'webpage_url': 'https://areena.yle.fi/1-2158940'
63             }
64         }
65     ]
66 
67     def _real_extract(self, url):
68         video_id = self._match_id(url)
69         info = self._search_json_ld(self._download_webpage(url, video_id), video_id, default={})
70         video_data = self._download_json(
71             f'https://player.api.yle.fi/v1/preview/{video_id}.json?app_id=player_static_prod&app_key=8930d72170e48303cf5f3867780d549b',
72             video_id, headers={
73                 'origin': 'https://areena.yle.fi',
74                 'referer': 'https://areena.yle.fi/',
75                 'content-type': 'application/json'
76             })
77 
78         # Example title: 'K1, J2: Pouchit | Modernit miehet'
79         series, season_number, episode_number, episode = self._search_regex(
80             r'K(?P<season_no>[\d]+),\s*J(?P<episode_no>[\d]+):?\s*\b(?P<episode>[^|]+)\s*|\s*(?P<series>.+)',
81             info.get('title') or '', 'episode metadata', group=('season_no', 'episode_no', 'episode', 'series'),
82             default=(None, None, None, None))
83         description = traverse_obj(video_data, ('data', 'ongoing_ondemand', 'description', 'fin'), expected_type=str)
84 
85         subtitles = {}
86         for sub in traverse_obj(video_data, ('data', 'ongoing_ondemand', 'subtitles', ...)):
87             if url_or_none(sub.get('uri')):
88                 subtitles.setdefault(sub.get('language') or 'und', []).append({
89                     'url': sub['uri'],
90                     'ext': 'srt',
91                     'name': sub.get('kind'),
92                 })
93 
94         return {
95             '_type': 'url_transparent',
96             'url': smuggle_url(
97                 f'kaltura:1955031:{video_data["data"]["ongoing_ondemand"]["kaltura"]["id"]}',
98                 {'source_url': url}),
99             'ie_key': KalturaIE.ie_key(),
100             'title': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'title', 'fin'), expected_type=str)
101                       or episode or info.get('title')),
102             'description': description,
103             'series': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'series', 'title', 'fin'), expected_type=str)
104                        or series),
105             'season_number': (int_or_none(self._search_regex(r'Kausi (\d+)', description, 'season number', default=None))
106                               or int_or_none(season_number)),
107             'episode_number': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'episode_number'), expected_type=int_or_none)
108                                or int_or_none(episode_number)),
109             'thumbnails': traverse_obj(info, ('thumbnails', ..., {'url': 'url'})),
110             'age_limit': traverse_obj(video_data, ('data', 'ongoing_ondemand', 'content_rating', 'age_restriction'), expected_type=int_or_none),
111             'subtitles': subtitles,
112             'release_date': unified_strdate(traverse_obj(video_data, ('data', 'ongoing_ondemand', 'start_time'), expected_type=str)),
113         }
114
```
--- 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/yt_dlp/extractor/yle_areena.py b/yt_dlp/extractor/yle_areena.py
--- a/yt_dlp/extractor/yle_areena.py
+++ b/yt_dlp/extractor/yle_areena.py
@@ -61,7 +61,22 @@
                 'age_limit': 0,
                 'webpage_url': 'https://areena.yle.fi/1-2158940'
             }
-        }
+        },
+        {
+            'url': 'https://areena.yle.fi/1-64829589',
+            'info_dict': {
+                'id': '1-64829589',
+                'ext': 'mp4',
+                'title': 'HKO & Mälkki & Tanner',
+                'description': 'md5:b4f1b1af2c6569b33f75179a86eea156',
+                'series': 'Helsingin kaupunginorkesterin konsertteja',
+                'thumbnail': r're:^https?://.+\.jpg$',
+                'release_date': '20230120',
+            },
+            'params': {
+                'skip_download': 'm3u8',
+            },
+        },
     ]
 
     def _real_extract(self, url):
@@ -91,12 +106,22 @@
                     'name': sub.get('kind'),
                 })
 
+        kaltura_id = traverse_obj(video_data, ('data', 'ongoing_ondemand', 'kaltura', 'id'), expected_type=str)
+        if kaltura_id:
+            info_dict = {
+                '_type': 'url_transparent',
+                'url': smuggle_url(f'kaltura:1955031:{kaltura_id}', {'source_url': url}),
+                'ie_key': KalturaIE.ie_key(),
+            }
+        else:
+            info_dict = {
+                'id': video_id,
+                'formats': self._extract_m3u8_formats(
+                    video_data['data']['ongoing_ondemand']['manifest_url'], video_id, 'mp4', m3u8_id='hls'),
+            }
+
         return {
-            '_type': 'url_transparent',
-            'url': smuggle_url(
-                f'kaltura:1955031:{video_data["data"]["ongoing_ondemand"]["kaltura"]["id"]}',
-                {'source_url': url}),
-            'ie_key': KalturaIE.ie_key(),
+            **info_dict,
             'title': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'title', 'fin'), expected_type=str)
                       or episode or info.get('title')),
             'description': description,

{"golden_diff": "diff --git a/yt_dlp/extractor/yle_areena.py b/yt_dlp/extractor/yle_areena.py\n--- a/yt_dlp/extractor/yle_areena.py\n+++ b/yt_dlp/extractor/yle_areena.py\n@@ -61,7 +61,22 @@\n                 'age_limit': 0,\n                 'webpage_url': 'https://areena.yle.fi/1-2158940'\n             }\n-        }\n+        },\n+        {\n+            'url': 'https://areena.yle.fi/1-64829589',\n+            'info_dict': {\n+                'id': '1-64829589',\n+                'ext': 'mp4',\n+                'title': 'HKO & M\u00e4lkki & Tanner',\n+                'description': 'md5:b4f1b1af2c6569b33f75179a86eea156',\n+                'series': 'Helsingin kaupunginorkesterin konsertteja',\n+                'thumbnail': r're:^https?://.+\\.jpg$',\n+                'release_date': '20230120',\n+            },\n+            'params': {\n+                'skip_download': 'm3u8',\n+            },\n+        },\n     ]\n \n     def _real_extract(self, url):\n@@ -91,12 +106,22 @@\n                     'name': sub.get('kind'),\n                 })\n \n+        kaltura_id = traverse_obj(video_data, ('data', 'ongoing_ondemand', 'kaltura', 'id'), expected_type=str)\n+        if kaltura_id:\n+            info_dict = {\n+                '_type': 'url_transparent',\n+                'url': smuggle_url(f'kaltura:1955031:{kaltura_id}', {'source_url': url}),\n+                'ie_key': KalturaIE.ie_key(),\n+            }\n+        else:\n+            info_dict = {\n+                'id': video_id,\n+                'formats': self._extract_m3u8_formats(\n+                    video_data['data']['ongoing_ondemand']['manifest_url'], video_id, 'mp4', m3u8_id='hls'),\n+            }\n+\n         return {\n-            '_type': 'url_transparent',\n-            'url': smuggle_url(\n-                f'kaltura:1955031:{video_data[\"data\"][\"ongoing_ondemand\"][\"kaltura\"][\"id\"]}',\n-                {'source_url': url}),\n-            'ie_key': KalturaIE.ie_key(),\n+            **info_dict,\n             'title': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'title', 'fin'), expected_type=str)\n                       or episode or info.get('title')),\n             'description': description,\n", "issue": "YleAreena extractor error\n### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE\n\n- [X] I understand that I will be **blocked** if I remove or skip any mandatory\\* field\n\n### Checklist\n\n- [X] I'm reporting a broken site\n- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)\n- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details\n- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)\n- [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\n- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)\n- [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\n\n### Region\n\nUnited Kingdom\n\n### Provide a description that is worded well enough to be understood\n\nYleAreena extractor error\n\n### Provide verbose output that clearly demonstrates the problem\n\n- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)\n- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below\n\n### Complete Verbose Output\n\n```shell\n[debug] Command-line config: ['https://areena.yle.fi/1-64829589', '-vU']\r\n[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8\r\n[debug] yt-dlp version 2023.01.06 [6becd25] (pip)\r\n[debug] Python 3.10.9 (CPython x86_64 64bit) - Linux-5.15.89-1-lts-x86_64-with-glibc2.36 (OpenSSL 3.0.7 1 Nov 2022, glibc 2.36)\r\n[debug] exe versions: ffmpeg 5.1.2 (setts), ffprobe 5.1.2, rtmpdump 2.4\r\n[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4\r\n[debug] Proxy map: {}\r\n[debug] Loaded 1760 extractors\r\n[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest\r\nLatest version: 2023.01.06, Current version: 2023.01.06\r\nyt-dlp is up to date (2023.01.06)\r\n[YleAreena] Extracting URL: https://areena.yle.fi/1-64829589\r\n[YleAreena] 1-64829589: Downloading webpage\r\n[YleAreena] 1-64829589: Downloading JSON metadata\r\nERROR: 1-64829589: An extractor error has occurred. (caused by KeyError('kaltura')); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U\r\n  File \"/home/erwin/.local/lib/python3.10/site-packages/yt_dlp/extractor/common.py\", line 680, in extract\r\n    ie_result = self._real_extract(url)\r\n  File \"/home/erwin/.local/lib/python3.10/site-packages/yt_dlp/extractor/yle_areena.py\", line 97, in _real_extract\r\n    f'kaltura:1955031:{video_data[\"data\"][\"ongoing_ondemand\"][\"kaltura\"][\"id\"]}',\r\nKeyError: 'kaltura'\n```\n\n", "before_files": [{"content": "from .common import InfoExtractor\nfrom .kaltura import KalturaIE\nfrom ..utils import (\n    int_or_none,\n    smuggle_url,\n    traverse_obj,\n    unified_strdate,\n    url_or_none,\n)\n\n\nclass YleAreenaIE(InfoExtractor):\n    _VALID_URL = r'https?://areena\\.yle\\.fi/(?P<id>[\\d-]+)'\n    _TESTS = [\n        {\n            'url': 'https://areena.yle.fi/1-4371942',\n            'md5': '932edda0ecf5dfd6423804182d32f8ac',\n            'info_dict': {\n                'id': '0_a3tjk92c',\n                'ext': 'mp4',\n                'title': 'Pouchit',\n                'description': 'md5:d487309c3abbe5650265bbd1742d2f82',\n                'series': 'Modernit miehet',\n                'season': 'Season 1',\n                'season_number': 1,\n                'episode': 'Episode 2',\n                'episode_number': 2,\n                'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/0_a3tjk92c/version/100061',\n                'uploader_id': 'ovp@yle.fi',\n                'duration': 1435,\n                'view_count': int,\n                'upload_date': '20181204',\n                'release_date': '20190106',\n                'timestamp': 1543916210,\n                'subtitles': {'fin': [{'url': r're:^https?://', 'ext': 'srt'}]},\n                'age_limit': 7,\n                'webpage_url': 'https://areena.yle.fi/1-4371942'\n            }\n        },\n        {\n            'url': 'https://areena.yle.fi/1-2158940',\n            'md5': 'cecb603661004e36af8c5188b5212b12',\n            'info_dict': {\n                'id': '1_l38iz9ur',\n                'ext': 'mp4',\n                'title': 'Albi haluaa vessan',\n                'description': 'md5:15236d810c837bed861fae0e88663c33',\n                'series': 'Albi Lumiukko',\n                'season': None,\n                'season_number': None,\n                'episode': None,\n                'episode_number': None,\n                'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/1_l38iz9ur/version/100021',\n                'uploader_id': 'ovp@yle.fi',\n                'duration': 319,\n                'view_count': int,\n                'upload_date': '20211202',\n                'release_date': '20211215',\n                'timestamp': 1638448202,\n                'subtitles': {},\n                'age_limit': 0,\n                'webpage_url': 'https://areena.yle.fi/1-2158940'\n            }\n        }\n    ]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        info = self._search_json_ld(self._download_webpage(url, video_id), video_id, default={})\n        video_data = self._download_json(\n            f'https://player.api.yle.fi/v1/preview/{video_id}.json?app_id=player_static_prod&app_key=8930d72170e48303cf5f3867780d549b',\n            video_id, headers={\n                'origin': 'https://areena.yle.fi',\n                'referer': 'https://areena.yle.fi/',\n                'content-type': 'application/json'\n            })\n\n        # Example title: 'K1, J2: Pouchit | Modernit miehet'\n        series, season_number, episode_number, episode = self._search_regex(\n            r'K(?P<season_no>[\\d]+),\\s*J(?P<episode_no>[\\d]+):?\\s*\\b(?P<episode>[^|]+)\\s*|\\s*(?P<series>.+)',\n            info.get('title') or '', 'episode metadata', group=('season_no', 'episode_no', 'episode', 'series'),\n            default=(None, None, None, None))\n        description = traverse_obj(video_data, ('data', 'ongoing_ondemand', 'description', 'fin'), expected_type=str)\n\n        subtitles = {}\n        for sub in traverse_obj(video_data, ('data', 'ongoing_ondemand', 'subtitles', ...)):\n            if url_or_none(sub.get('uri')):\n                subtitles.setdefault(sub.get('language') or 'und', []).append({\n                    'url': sub['uri'],\n                    'ext': 'srt',\n                    'name': sub.get('kind'),\n                })\n\n        return {\n            '_type': 'url_transparent',\n            'url': smuggle_url(\n                f'kaltura:1955031:{video_data[\"data\"][\"ongoing_ondemand\"][\"kaltura\"][\"id\"]}',\n                {'source_url': url}),\n            'ie_key': KalturaIE.ie_key(),\n            'title': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'title', 'fin'), expected_type=str)\n                      or episode or info.get('title')),\n            'description': description,\n            'series': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'series', 'title', 'fin'), expected_type=str)\n                       or series),\n            'season_number': (int_or_none(self._search_regex(r'Kausi (\\d+)', description, 'season number', default=None))\n                              or int_or_none(season_number)),\n            'episode_number': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'episode_number'), expected_type=int_or_none)\n                               or int_or_none(episode_number)),\n            'thumbnails': traverse_obj(info, ('thumbnails', ..., {'url': 'url'})),\n            'age_limit': traverse_obj(video_data, ('data', 'ongoing_ondemand', 'content_rating', 'age_restriction'), expected_type=int_or_none),\n            'subtitles': subtitles,\n            'release_date': unified_strdate(traverse_obj(video_data, ('data', 'ongoing_ondemand', 'start_time'), expected_type=str)),\n        }\n", "path": "yt_dlp/extractor/yle_areena.py"}], "after_files": [{"content": "from .common import InfoExtractor\nfrom .kaltura import KalturaIE\nfrom ..utils import (\n    int_or_none,\n    smuggle_url,\n    traverse_obj,\n    unified_strdate,\n    url_or_none,\n)\n\n\nclass YleAreenaIE(InfoExtractor):\n    _VALID_URL = r'https?://areena\\.yle\\.fi/(?P<id>[\\d-]+)'\n    _TESTS = [\n        {\n            'url': 'https://areena.yle.fi/1-4371942',\n            'md5': '932edda0ecf5dfd6423804182d32f8ac',\n            'info_dict': {\n                'id': '0_a3tjk92c',\n                'ext': 'mp4',\n                'title': 'Pouchit',\n                'description': 'md5:d487309c3abbe5650265bbd1742d2f82',\n                'series': 'Modernit miehet',\n                'season': 'Season 1',\n                'season_number': 1,\n                'episode': 'Episode 2',\n                'episode_number': 2,\n                'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/0_a3tjk92c/version/100061',\n                'uploader_id': 'ovp@yle.fi',\n                'duration': 1435,\n                'view_count': int,\n                'upload_date': '20181204',\n                'release_date': '20190106',\n                'timestamp': 1543916210,\n                'subtitles': {'fin': [{'url': r're:^https?://', 'ext': 'srt'}]},\n                'age_limit': 7,\n                'webpage_url': 'https://areena.yle.fi/1-4371942'\n            }\n        },\n        {\n            'url': 'https://areena.yle.fi/1-2158940',\n            'md5': 'cecb603661004e36af8c5188b5212b12',\n            'info_dict': {\n                'id': '1_l38iz9ur',\n                'ext': 'mp4',\n                'title': 'Albi haluaa vessan',\n                'description': 'md5:15236d810c837bed861fae0e88663c33',\n                'series': 'Albi Lumiukko',\n                'season': None,\n                'season_number': None,\n                'episode': None,\n                'episode_number': None,\n                'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/1_l38iz9ur/version/100021',\n                'uploader_id': 'ovp@yle.fi',\n                'duration': 319,\n                'view_count': int,\n                'upload_date': '20211202',\n                'release_date': '20211215',\n                'timestamp': 1638448202,\n                'subtitles': {},\n                'age_limit': 0,\n                'webpage_url': 'https://areena.yle.fi/1-2158940'\n            }\n        },\n        {\n            'url': 'https://areena.yle.fi/1-64829589',\n            'info_dict': {\n                'id': '1-64829589',\n                'ext': 'mp4',\n                'title': 'HKO & M\u00e4lkki & Tanner',\n                'description': 'md5:b4f1b1af2c6569b33f75179a86eea156',\n                'series': 'Helsingin kaupunginorkesterin konsertteja',\n                'thumbnail': r're:^https?://.+\\.jpg$',\n                'release_date': '20230120',\n            },\n            'params': {\n                'skip_download': 'm3u8',\n            },\n        },\n    ]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        info = self._search_json_ld(self._download_webpage(url, video_id), video_id, default={})\n        video_data = self._download_json(\n            f'https://player.api.yle.fi/v1/preview/{video_id}.json?app_id=player_static_prod&app_key=8930d72170e48303cf5f3867780d549b',\n            video_id, headers={\n                'origin': 'https://areena.yle.fi',\n                'referer': 'https://areena.yle.fi/',\n                'content-type': 'application/json'\n            })\n\n        # Example title: 'K1, J2: Pouchit | Modernit miehet'\n        series, season_number, episode_number, episode = self._search_regex(\n            r'K(?P<season_no>[\\d]+),\\s*J(?P<episode_no>[\\d]+):?\\s*\\b(?P<episode>[^|]+)\\s*|\\s*(?P<series>.+)',\n            info.get('title') or '', 'episode metadata', group=('season_no', 'episode_no', 'episode', 'series'),\n            default=(None, None, None, None))\n        description = traverse_obj(video_data, ('data', 'ongoing_ondemand', 'description', 'fin'), expected_type=str)\n\n        subtitles = {}\n        for sub in traverse_obj(video_data, ('data', 'ongoing_ondemand', 'subtitles', ...)):\n            if url_or_none(sub.get('uri')):\n                subtitles.setdefault(sub.get('language') or 'und', []).append({\n                    'url': sub['uri'],\n                    'ext': 'srt',\n                    'name': sub.get('kind'),\n                })\n\n        kaltura_id = traverse_obj(video_data, ('data', 'ongoing_ondemand', 'kaltura', 'id'), expected_type=str)\n        if kaltura_id:\n            info_dict = {\n                '_type': 'url_transparent',\n                'url': smuggle_url(f'kaltura:1955031:{kaltura_id}', {'source_url': url}),\n                'ie_key': KalturaIE.ie_key(),\n            }\n        else:\n            info_dict = {\n                'id': video_id,\n                'formats': self._extract_m3u8_formats(\n                    video_data['data']['ongoing_ondemand']['manifest_url'], video_id, 'mp4', m3u8_id='hls'),\n            }\n\n        return {\n            **info_dict,\n            'title': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'title', 'fin'), expected_type=str)\n                      or episode or info.get('title')),\n            'description': description,\n            'series': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'series', 'title', 'fin'), expected_type=str)\n                       or series),\n            'season_number': (int_or_none(self._search_regex(r'Kausi (\\d+)', description, 'season number', default=None))\n                              or int_or_none(season_number)),\n            'episode_number': (traverse_obj(video_data, ('data', 'ongoing_ondemand', 'episode_number'), expected_type=int_or_none)\n                               or int_or_none(episode_number)),\n            'thumbnails': traverse_obj(info, ('thumbnails', ..., {'url': 'url'})),\n            'age_limit': traverse_obj(video_data, ('data', 'ongoing_ondemand', 'content_rating', 'age_restriction'), expected_type=int_or_none),\n            'subtitles': subtitles,\n            'release_date': unified_strdate(traverse_obj(video_data, ('data', 'ongoing_ondemand', 'start_time'), expected_type=str)),\n        }\n", "path": "yt_dlp/extractor/yle_areena.py"}]}