Skip to content

Commit

Permalink
[extractor/antenna] Improvements
Browse files Browse the repository at this point in the history
* Rename base extractor as Antenna, as that's the top-level name
* Make `Ant1NewsGrBaseIE` to `AntennaWatchGrBaseIE` as an ABC
  * `_API_PATH` is mandatory, differs per extractor
* Untangle `formats, subs` assignment
* Create a clone of `Ant1NewsGrWatchIE`, `AntennaGrWatchIE`
  (with almost everything similar)
* Convert `Ant1NewsGrArticleIE` to `InfoExtractor`,
  as it shared nothing with its parent class

Signed-off-by: Stavros Ntentos <133706+stdedos@users.noreply.github.com>
  • Loading branch information
stdedos committed Jul 14, 2023
1 parent 8a4cd12 commit 3d23a30
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 9 deletions.
3 changes: 2 additions & 1 deletion yt_dlp/extractor/_extractors.py
Expand Up @@ -1696,7 +1696,8 @@
MegaTVComIE,
MegaTVComEmbedIE,
)
from .ant1newsgr import (
from .antenna import (
AntennaGrWatchIE,
Ant1NewsGrWatchIE,
Ant1NewsGrArticleIE,
Ant1NewsGrEmbedIE,
Expand Down
50 changes: 42 additions & 8 deletions yt_dlp/extractor/ant1newsgr.py → yt_dlp/extractor/antenna.py
@@ -1,6 +1,8 @@
import urllib.parse
from abc import ABCMeta, abstractmethod

from .common import InfoExtractor
from .. import NO_DEFAULT
from ..utils import (
HEADRequest,
ExtractorError,
Expand All @@ -9,16 +11,25 @@
)


class Ant1NewsGrBaseIE(InfoExtractor):
class AntennaWatchGrBaseIE(InfoExtractor, metaclass=ABCMeta):
@property
@abstractmethod
def _API_PATH(self):
pass

def _download_and_extract_api_data(self, video_id, netloc, cid=None):
url = f'{self.http_scheme()}//{netloc}{self._API_PATH}'
info = self._download_json(url, video_id, query={'cid': cid or video_id})
try:
source = info['url']
except KeyError:
raise ExtractorError('no source found for %s' % video_id)
formats, subs = (self._extract_m3u8_formats_and_subtitles(source, video_id, 'mp4')
if determine_ext(source) == 'm3u8' else ([{'url': source}], {}))

formats = [{'url': source}]
subs = {}
if determine_ext(source) == 'm3u8':
formats, subs = self._extract_m3u8_formats_and_subtitles(source, video_id, 'mp4')

thumbnails = scale_thumbnails_to_max_format_width(
formats, [{'url': info['thumb']}], r'(?<=/imgHandler/)\d+')
return {
Expand All @@ -30,7 +41,7 @@ def _download_and_extract_api_data(self, video_id, netloc, cid=None):
}


class Ant1NewsGrWatchIE(Ant1NewsGrBaseIE):
class Ant1NewsGrWatchIE(AntennaWatchGrBaseIE):
IE_NAME = 'ant1newsgr:watch'
IE_DESC = 'ant1news.gr videos'
_VALID_URL = r'https?://(?P<netloc>(?:www\.)?ant1news\.gr)/watch/(?P<id>\d+)/'
Expand All @@ -48,15 +59,38 @@ class Ant1NewsGrWatchIE(Ant1NewsGrBaseIE):
},
}]

def _real_extract(self, url):
def real_extract_template(self, url, default=NO_DEFAULT):
video_id, netloc = self._match_valid_url(url).group('id', 'netloc')
webpage = self._download_webpage(url, video_id)
info = self._download_and_extract_api_data(video_id, netloc)
info['description'] = self._og_search_description(webpage)
info['description'] = self._og_search_description(webpage, default=default)
return info

def _real_extract(self, url):
return self.real_extract_template(url)


class AntennaGrWatchIE(Ant1NewsGrWatchIE):
IE_NAME = 'antennagr:watch'
IE_DESC = 'antenna.gr videos'
_VALID_URL = r'https?://(?P<netloc>(?:www\.)?antenna\.gr)/watch/(?P<id>\d+)/'

_TESTS = [{
'url': 'https://www.antenna.gr/watch/1643812/oi-prodotes-epeisodio-01',
'info_dict': {
'id': '1643812',
'ext': 'mp4',
'title': 'ΟΙ ΠΡΟΔΟΤΕΣ – ΕΠΕΙΣΟΔΙΟ 01',
'description': None,
'thumbnail': 'https://ant1media.azureedge.net/imgHandler/1000/b3d63096-e72d-43c4-87a0-00d4363d242f.jpg',
},
}]

def _real_extract(self, url, default=None):
return self.real_extract_template(url, default=default)


class Ant1NewsGrArticleIE(Ant1NewsGrBaseIE):
class Ant1NewsGrArticleIE(InfoExtractor):
IE_NAME = 'ant1newsgr:article'
IE_DESC = 'ant1news.gr articles'
_VALID_URL = r'https?://(?:www\.)?ant1news\.gr/[^/]+/article/(?P<id>\d+)/'
Expand Down Expand Up @@ -96,7 +130,7 @@ def _real_extract(self, url):
video_kwargs={'url_transparent': True, 'timestamp': info.get('timestamp')})


class Ant1NewsGrEmbedIE(Ant1NewsGrBaseIE):
class Ant1NewsGrEmbedIE(AntennaWatchGrBaseIE):
IE_NAME = 'ant1newsgr:embed'
IE_DESC = 'ant1news.gr embedded videos'
_BASE_PLAYER_URL_RE = r'(?:https?:)?//(?:[a-zA-Z0-9\-]+\.)?(?:antenna|ant1news)\.gr/templates/pages/player'
Expand Down

0 comments on commit 3d23a30

Please sign in to comment.