mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-06-01 10:32:40 +09:00
Compare commits
18 Commits
04216ff9a2
...
1bba746891
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1bba746891 | ||
![]() |
3eb8d22ddb | ||
![]() |
4e714f9df1 | ||
![]() |
c1ea7f5a24 | ||
![]() |
96a49c7838 | ||
![]() |
f4ef8145ef | ||
![]() |
5987eb1302 | ||
![]() |
d4512dfd52 | ||
![]() |
cec9f4bf3c | ||
![]() |
10273fbd22 | ||
![]() |
d900bd96b4 | ||
![]() |
fb35bd50b0 | ||
![]() |
fd61f317bf | ||
![]() |
ad49e65d1e | ||
![]() |
1ac23b7d8c | ||
![]() |
92a3cd37a6 | ||
![]() |
f5e049fbc2 | ||
![]() |
691d549938 |
@ -32,7 +32,7 @@ class BokeCCBaseIE(InfoExtractor):
|
||||
|
||||
|
||||
class BokeCCIE(BokeCCBaseIE):
|
||||
_IE_DESC = 'CC视频'
|
||||
IE_DESC = 'CC视频'
|
||||
_VALID_URL = r'https?://union\.bokecc\.com/playvideo\.bo\?(?P<query>.*)'
|
||||
|
||||
_TESTS = [{
|
||||
|
@ -9,7 +9,7 @@ from ..utils import (
|
||||
|
||||
|
||||
class CloudyIE(InfoExtractor):
|
||||
_IE_DESC = 'cloudy.ec'
|
||||
IE_DESC = 'cloudy.ec'
|
||||
_VALID_URL = r'https?://(?:www\.)?cloudy\.ec/(?:v/|embed\.php\?.*?\bid=)(?P<id>[A-Za-z0-9]+)'
|
||||
_TESTS = [{
|
||||
'url': 'https://www.cloudy.ec/v/af511e2527aac',
|
||||
|
@ -422,6 +422,8 @@ class InfoExtractor(object):
|
||||
_GEO_COUNTRIES = None
|
||||
_GEO_IP_BLOCKS = None
|
||||
_WORKING = True
|
||||
# supply this in public subclasses: used in supported sites list, etc
|
||||
# IE_DESC = 'short description of IE'
|
||||
|
||||
def __init__(self, downloader=None):
|
||||
"""Constructor. Receives an optional downloader."""
|
||||
|
@ -907,6 +907,7 @@ from .orf import (
|
||||
ORFRadioCollectionIE,
|
||||
)
|
||||
from .outsidetv import OutsideTVIE
|
||||
from .pac12 import Pac12IE
|
||||
from .packtpub import (
|
||||
PacktPubIE,
|
||||
PacktPubCourseIE,
|
||||
|
@ -35,15 +35,6 @@ from ..utils import (
|
||||
|
||||
class ITVBaseIE(InfoExtractor):
|
||||
|
||||
def _search_nextjs_data(self, webpage, video_id, **kw):
|
||||
transform_source = kw.pop('transform_source', None)
|
||||
fatal = kw.pop('fatal', True)
|
||||
return self._parse_json(
|
||||
self._search_regex(
|
||||
r'''<script\b[^>]+\bid=('|")__NEXT_DATA__\1[^>]*>(?P<js>[^<]+)</script>''',
|
||||
webpage, 'next.js data', group='js', fatal=fatal, **kw),
|
||||
video_id, transform_source=transform_source, fatal=fatal)
|
||||
|
||||
def __handle_request_webpage_error(self, err, video_id=None, errnote=None, fatal=True):
|
||||
if errnote is False:
|
||||
return False
|
||||
@ -109,7 +100,9 @@ class ITVBaseIE(InfoExtractor):
|
||||
|
||||
class ITVIE(ITVBaseIE):
|
||||
_VALID_URL = r'https?://(?:www\.)?itv\.com/(?:(?P<w>watch)|hub)/[^/]+/(?(w)[\w-]+/)(?P<id>\w+)'
|
||||
_IE_DESC = 'ITVX'
|
||||
IE_DESC = 'ITVX'
|
||||
_WORKING = False
|
||||
|
||||
_TESTS = [{
|
||||
'note': 'Hub URLs redirect to ITVX',
|
||||
'url': 'https://www.itv.com/hub/liar/2a4547a0012',
|
||||
@ -270,7 +263,7 @@ class ITVIE(ITVBaseIE):
|
||||
'ext': determine_ext(href, 'vtt'),
|
||||
})
|
||||
|
||||
next_data = self._search_nextjs_data(webpage, video_id, fatal=False, default='{}')
|
||||
next_data = self._search_nextjs_data(webpage, video_id, fatal=False, default={})
|
||||
video_data.update(traverse_obj(next_data, ('props', 'pageProps', ('title', 'episode')), expected_type=dict)[0] or {})
|
||||
title = traverse_obj(video_data, 'headerTitle', 'episodeTitle')
|
||||
info = self._og_extract(webpage, require_title=not title)
|
||||
@ -323,7 +316,7 @@ class ITVIE(ITVBaseIE):
|
||||
|
||||
class ITVBTCCIE(ITVBaseIE):
|
||||
_VALID_URL = r'https?://(?:www\.)?itv\.com/(?!(?:watch|hub)/)(?:[^/]+/)+(?P<id>[^/?#&]+)'
|
||||
_IE_DESC = 'ITV articles: News, British Touring Car Championship'
|
||||
IE_DESC = 'ITV articles: News, British Touring Car Championship'
|
||||
_TESTS = [{
|
||||
'note': 'British Touring Car Championship',
|
||||
'url': 'https://www.itv.com/btcc/articles/btcc-2018-all-the-action-from-brands-hatch',
|
||||
|
80
youtube_dl/extractor/pac12.py
Normal file
80
youtube_dl/extractor/pac12.py
Normal file
@ -0,0 +1,80 @@
|
||||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from .common import InfoExtractor
|
||||
from ..compat import compat_str
|
||||
from ..utils import try_get
|
||||
|
||||
|
||||
class Pac12IE(InfoExtractor):
|
||||
_VALID_URL = r'https?://(?:[a-z]+\.)?pac-12.com/(?:embed/)?(?P<id>.*)'
|
||||
|
||||
_TESTS = [{
|
||||
'url': 'https://pac-12.com/videos/2020-pac-12-womens-basketball-media-day-arizona-cal-stanford',
|
||||
'md5': 'c134cb64fc884658497690dca50094a3',
|
||||
'info_dict': {
|
||||
'id': 'vod-VGQNKGlo9Go',
|
||||
'ext': 'mp4',
|
||||
'title': '2020 Pac-12 Women\'s Basketball Media Day - Arizona, Cal & Stanford',
|
||||
'description': 'During the 2020 Pac-12 Women\'s Basketball Media Day, Ros Gold-Onwude moderates a discussion with Arizona\'s Adia Barnes & Aari McDonald, Cal\'s Charmin Smith & Evelien Lutje Schipholt & Stanford\'s Tara VanDerveer & Kiana Williams. ',
|
||||
}
|
||||
}, {
|
||||
'url': 'https://pac-12.com/article/2020/11/24/sonoran-dog-dish-presented-tums',
|
||||
'md5': 'a91ae1eaf05cea2c5dbe6c1ab7997cc3',
|
||||
'info_dict': {
|
||||
'id': 'vod-YLMKpNLZvR0',
|
||||
'ext': 'mp4',
|
||||
'title': 'Sonoran Dog | The Dish, presented by TUMS',
|
||||
'description': 'Pac-12 Networks introduces "The Dish," presented by Tums. Jaymee Sire is bringing fans a closeup to game day treats from around the Conference with each treat connecting to a Pac-12 school, bringing the flavor and recipes fans know and love right to the dish! As Arizona and USC basketball seasons tip off, the first feature item from "The Dish" is the Sonoran Dog, a beloved treat by Trojans & Wildcat fans.',
|
||||
}
|
||||
}]
|
||||
|
||||
def _real_extract(self, url):
|
||||
video_id = self._match_id(url)
|
||||
webpage = self._download_webpage(url, video_id)
|
||||
|
||||
drupal_settings = self._parse_json(
|
||||
self._search_regex(
|
||||
r'<script[^>]+type="application/json"[^>]*data-drupal-selector="drupal-settings-json">([^<]+)</script>',
|
||||
webpage, 'drupal settings'), video_id)
|
||||
|
||||
cv = drupal_settings.get('currentVideo')
|
||||
|
||||
if cv is False:
|
||||
# May be an event page; look for the live stream.
|
||||
network = try_get(drupal_settings,
|
||||
lambda x: x['pac12_react'][
|
||||
'pac12_react_event_widget']['event'][
|
||||
'broadcast_info']['broadcast_networks'][0][
|
||||
'id'], int)
|
||||
if network is not None:
|
||||
cv = try_get(drupal_settings,
|
||||
lambda x: x['pac12_react']['networks'][
|
||||
str(network)], dict)
|
||||
|
||||
if not cv or 'manifest_url' not in cv:
|
||||
# Video may be embedded one level deeper; look for embed URL.
|
||||
vod_url = self._search_regex(
|
||||
r'(https?://(?:embed\.)?pac-12\.com/(?:embed/)?vod-\w+)',
|
||||
webpage, 'url', default=None)
|
||||
if vod_url is None:
|
||||
# Failure; no video found.
|
||||
return None
|
||||
return self.url_result(vod_url)
|
||||
|
||||
return {
|
||||
# cv['id'] might be an integer, string, or missing.
|
||||
'id': compat_str(cv.get('id') or video_id),
|
||||
'title': (cv.get('title')
|
||||
or self._html_search_meta(
|
||||
['og:title', 'twitter:title',
|
||||
'branch.deeplink.title'], webpage)
|
||||
or self._html_search_regex(r'<title>(.+?)</title>',
|
||||
webpage, 'title')),
|
||||
'description': (cv.get('description')
|
||||
or self._html_search_meta(
|
||||
['og:description', 'twitter:description',
|
||||
'description'], webpage, fatal=False)),
|
||||
'url': cv['manifest_url'],
|
||||
'ext': 'mp4',
|
||||
}
|
@ -47,7 +47,7 @@ class SenateISVPIE(InfoExtractor):
|
||||
['vetaff', '76462', 'http://vetaff-f.akamaihd.net'],
|
||||
['arch', '', 'http://ussenate-f.akamaihd.net/']
|
||||
]
|
||||
_IE_NAME = 'senate.gov'
|
||||
IE_NAME = 'senate.gov'
|
||||
_VALID_URL = r'https?://(?:www\.)?senate\.gov/isvp/?\?(?P<qs>.+)'
|
||||
_TESTS = [{
|
||||
'url': 'http://www.senate.gov/isvp/?comm=judiciary&type=live&stt=&filename=judiciary031715&auto_play=false&wmode=transparent&poster=http%3A%2F%2Fwww.judiciary.senate.gov%2Fthemes%2Fjudiciary%2Fimages%2Fvideo-poster-flash-fit.png',
|
||||
|
@ -686,6 +686,8 @@ class JSInterpreter(object):
|
||||
raise self.Exception('Cannot get index {idx!r:.100}'.format(**locals()), expr=repr(obj), cause=e)
|
||||
|
||||
def _dump(self, obj, namespace):
|
||||
if obj is JS_Undefined:
|
||||
return 'undefined'
|
||||
try:
|
||||
return json.dumps(obj)
|
||||
except TypeError:
|
||||
|
Loading…
x
Reference in New Issue
Block a user