Hello community,
here is the log from the commit of package youtube-dl for openSUSE:Factory checked in at 2016-11-14 20:17:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/youtube-dl (Old)
and /work/SRC/openSUSE:Factory/.youtube-dl.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "youtube-dl"
Changes:
--------
--- /work/SRC/openSUSE:Factory/youtube-dl/youtube-dl.changes 2016-11-12 13:03:30.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.youtube-dl.new/youtube-dl.changes 2016-11-14 20:17:09.000000000 +0100
@@ -1,0 +2,7 @@
+Mon Nov 14 12:11:21 UTC 2016 - jengelh@inai.de
+
+- Update to new upstream release 2016.11.14.1
+* audioboom: Recognize /posts/ URLs
+* afreecatv: Add support for vod.afreecatv.com
+
+-------------------------------------------------------------------
Old:
----
youtube-dl-2016.11.08.1.tar.gz
youtube-dl-2016.11.08.1.tar.gz.sig
New:
----
youtube-dl-2016.11.14.1.tar.gz
youtube-dl-2016.11.14.1.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ youtube-dl.spec ++++++
--- /var/tmp/diff_new_pack.CGHo9d/_old 2016-11-14 20:17:10.000000000 +0100
+++ /var/tmp/diff_new_pack.CGHo9d/_new 2016-11-14 20:17:10.000000000 +0100
@@ -17,7 +17,7 @@
Name: youtube-dl
-Version: 2016.11.08.1
+Version: 2016.11.14.1
Release: 0
Summary: A tool for downloading from video sites for offline watching
License: SUSE-Public-Domain and CC-BY-SA-3.0
++++++ youtube-dl-2016.11.08.1.tar.gz -> youtube-dl-2016.11.14.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/ChangeLog new/youtube-dl/ChangeLog
--- old/youtube-dl/ChangeLog 2016-11-08 16:30:52.000000000 +0100
+++ new/youtube-dl/ChangeLog 2016-11-13 20:48:14.000000000 +0100
@@ -1,3 +1,21 @@
+version 2016.11.14.1
+
+Core
++ [downoader/fragment,f4m,hls] Respect HTTP headers from info dict
+* [extractor/common] Fix media templates with Bandwidth substitution pattern in
+ MPD manifests (#11175)
+* [extractor/common] Improve thumbnail extraction from JSON-LD
+
+Extractors
++ [nrk] Workaround geo restriction
++ [nrk] Improve error detection and messages
++ [afreecatv] Add support for vod.afreecatv.com (#11174)
+* [cda] Fix and improve extraction (#10929, #10936)
+* [plays] Fix extraction (#11165)
+* [eagleplatform] Fix extraction (#11160)
++ [audioboom] Recognize /posts/ URLs (#11149)
+
+
version 2016.11.08.1
Extractors
Files old/youtube-dl/youtube-dl and new/youtube-dl/youtube-dl differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/downloader/f4m.py new/youtube-dl/youtube_dl/downloader/f4m.py
--- old/youtube-dl/youtube_dl/downloader/f4m.py 2016-11-08 16:30:30.000000000 +0100
+++ new/youtube-dl/youtube_dl/downloader/f4m.py 2016-11-13 20:27:51.000000000 +0100
@@ -314,7 +314,8 @@
man_url = info_dict['url']
requested_bitrate = info_dict.get('tbr')
self.to_screen('[%s] Downloading f4m manifest' % self.FD_NAME)
- urlh = self.ydl.urlopen(man_url)
+
+ urlh = self.ydl.urlopen(self._prepare_url(info_dict, man_url))
man_url = urlh.geturl()
# Some manifests may be malformed, e.g. prosiebensat1 generated manifests
# (see https://github.com/rg3/youtube-dl/issues/6215#issuecomment-121704244
@@ -387,7 +388,10 @@
url_parsed = base_url_parsed._replace(path=base_url_parsed.path + name, query='&'.join(query))
frag_filename = '%s-%s' % (ctx['tmpfilename'], name)
try:
- success = ctx['dl'].download(frag_filename, {'url': url_parsed.geturl()})
+ success = ctx['dl'].download(frag_filename, {
+ 'url': url_parsed.geturl(),
+ 'http_headers': info_dict.get('http_headers'),
+ })
if not success:
return False
(down, frag_sanitized) = sanitize_open(frag_filename, 'rb')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/downloader/fragment.py new/youtube-dl/youtube_dl/downloader/fragment.py
--- old/youtube-dl/youtube_dl/downloader/fragment.py 2016-11-08 16:30:30.000000000 +0100
+++ new/youtube-dl/youtube_dl/downloader/fragment.py 2016-11-13 20:27:51.000000000 +0100
@@ -9,6 +9,7 @@
error_to_compat_str,
encodeFilename,
sanitize_open,
+ sanitized_Request,
)
@@ -37,6 +38,10 @@
def report_skip_fragment(self, fragment_name):
self.to_screen('[download] Skipping fragment %s...' % fragment_name)
+ def _prepare_url(self, info_dict, url):
+ headers = info_dict.get('http_headers')
+ return sanitized_Request(url, None, headers) if headers else url
+
def _prepare_and_start_frag_download(self, ctx):
self._prepare_frag_download(ctx)
self._start_frag_download(ctx)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/downloader/hls.py new/youtube-dl/youtube_dl/downloader/hls.py
--- old/youtube-dl/youtube_dl/downloader/hls.py 2016-11-08 16:30:30.000000000 +0100
+++ new/youtube-dl/youtube_dl/downloader/hls.py 2016-11-13 20:27:51.000000000 +0100
@@ -59,7 +59,8 @@
def real_download(self, filename, info_dict):
man_url = info_dict['url']
self.to_screen('[%s] Downloading m3u8 manifest' % self.FD_NAME)
- manifest = self.ydl.urlopen(man_url).read()
+
+ manifest = self.ydl.urlopen(self._prepare_url(info_dict, man_url)).read()
s = manifest.decode('utf-8', 'ignore')
@@ -112,7 +113,10 @@
count = 0
while count <= fragment_retries:
try:
- success = ctx['dl'].download(frag_filename, {'url': frag_url})
+ success = ctx['dl'].download(frag_filename, {
+ 'url': frag_url,
+ 'http_headers': info_dict.get('http_headers'),
+ })
if not success:
return False
down, frag_sanitized = sanitize_open(frag_filename, 'rb')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/extractor/afreecatv.py new/youtube-dl/youtube_dl/extractor/afreecatv.py
--- old/youtube-dl/youtube_dl/extractor/afreecatv.py 2016-11-08 16:30:30.000000000 +0100
+++ new/youtube-dl/youtube_dl/extractor/afreecatv.py 2016-11-13 20:27:51.000000000 +0100
@@ -11,6 +11,7 @@
from ..utils import (
ExtractorError,
int_or_none,
+ update_url_query,
xpath_element,
xpath_text,
)
@@ -18,12 +19,18 @@
class AfreecaTVIE(InfoExtractor):
IE_DESC = 'afreecatv.com'
- _VALID_URL = r'''(?x)^
- https?://(?:(live|afbbs|www)\.)?afreeca(?:tv)?\.com(?::\d+)?
- (?:
- /app/(?:index|read_ucc_bbs)\.cgi|
- /player/[Pp]layer\.(?:swf|html))
- \?.*?\bnTitleNo=(?P<id>\d+)'''
+ _VALID_URL = r'''(?x)
+ https?://
+ (?:
+ (?:(?:live|afbbs|www)\.)?afreeca(?:tv)?\.com(?::\d+)?
+ (?:
+ /app/(?:index|read_ucc_bbs)\.cgi|
+ /player/[Pp]layer\.(?:swf|html)
+ )\?.*?\bnTitleNo=|
+ vod\.afreecatv\.com/PLAYER/STATION/
+ )
+ (?P<id>\d+)
+ '''
_TESTS = [{
'url': 'http://live.afreecatv.com:8079/app/index.cgi?szType=read_ucc_bbs&szBjId=dailyapril&nStationNo=16711924&nBbsNo=18605867&nTitleNo=36164052&szSkin=',
'md5': 'f72c89fe7ecc14c1b5ce506c4996046e',
@@ -66,6 +73,9 @@
}, {
'url': 'http://www.afreecatv.com/player/Player.swf?szType=szBjId=djleegoon&nStationNo=11273158&nBbsNo=13161095&nTitleNo=36327652',
'only_matching': True,
+ }, {
+ 'url': 'http://vod.afreecatv.com/PLAYER/STATION/15055030',
+ 'only_matching': True,
}]
@staticmethod
@@ -83,7 +93,9 @@
info_url = compat_urlparse.urlunparse(parsed_url._replace(
netloc='afbbs.afreecatv.com:8080',
path='/api/video/get_video_info.php'))
- video_xml = self._download_xml(info_url, video_id)
+
+ video_xml = self._download_xml(
+ update_url_query(info_url, {'nTitleNo': video_id}), video_id)
if xpath_element(video_xml, './track/video/file') is None:
raise ExtractorError('Specified AfreecaTV video does not exist',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/extractor/audioboom.py new/youtube-dl/youtube_dl/extractor/audioboom.py
--- old/youtube-dl/youtube_dl/extractor/audioboom.py 2016-11-08 16:30:30.000000000 +0100
+++ new/youtube-dl/youtube_dl/extractor/audioboom.py 2016-11-13 20:27:51.000000000 +0100
@@ -6,8 +6,8 @@
class AudioBoomIE(InfoExtractor):
- _VALID_URL = r'https?://(?:www\.)?audioboom\.com/boos/(?P<id>[0-9]+)'
- _TEST = {
+ _VALID_URL = r'https?://(?:www\.)?audioboom\.com/(?:boos|posts)/(?P<id>[0-9]+)'
+ _TESTS = [{
'url': 'https://audioboom.com/boos/4279833-3-09-2016-czaban-hour-3?t=0',
'md5': '63a8d73a055c6ed0f1e51921a10a5a76',
'info_dict': {
@@ -19,7 +19,10 @@
'uploader': 'Steve Czaban',
'uploader_url': 're:https?://(?:www\.)?audioboom\.com/channel/steveczabanyahoosportsradio',
}
- }
+ }, {
+ 'url': 'https://audioboom.com/posts/4279833-3-09-2016-czaban-hour-3?t=0',
+ 'only_matching': True,
+ }]
def _real_extract(self, url):
video_id = self._match_id(url)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/extractor/cda.py new/youtube-dl/youtube_dl/extractor/cda.py
--- old/youtube-dl/youtube_dl/extractor/cda.py 2016-11-08 16:30:30.000000000 +0100
+++ new/youtube-dl/youtube_dl/extractor/cda.py 2016-11-13 20:27:51.000000000 +0100
@@ -5,14 +5,16 @@
from .common import InfoExtractor
from ..utils import (
- decode_packed_codes,
ExtractorError,
- parse_duration
+ float_or_none,
+ int_or_none,
+ parse_duration,
)
class CDAIE(InfoExtractor):
_VALID_URL = r'https?://(?:(?:www\.)?cda\.pl/video|ebd\.cda\.pl/[0-9]+x[0-9]+)/(?P<id>[0-9a-z]+)'
+ _BASE_URL = 'http://www.cda.pl/'
_TESTS = [{
'url': 'http://www.cda.pl/video/5749950c',
'md5': '6f844bf51b15f31fae165365707ae970',
@@ -21,6 +23,9 @@
'ext': 'mp4',
'height': 720,
'title': 'Oto dlaczego przed zakrętem należy zwolnić.',
+ 'description': 'md5:269ccd135d550da90d1662651fcb9772',
+ 'thumbnail': 're:^https?://.*\.jpg$',
+ 'average_rating': float,
'duration': 39
}
}, {
@@ -30,6 +35,11 @@
'id': '57413289',
'ext': 'mp4',
'title': 'Lądowanie na lotnisku na Maderze',
+ 'description': 'md5:60d76b71186dcce4e0ba6d4bbdb13e1a',
+ 'thumbnail': 're:^https?://.*\.jpg$',
+ 'uploader': 'crash404',
+ 'view_count': int,
+ 'average_rating': float,
'duration': 137
}
}, {
@@ -39,31 +49,55 @@
def _real_extract(self, url):
video_id = self._match_id(url)
- webpage = self._download_webpage('http://ebd.cda.pl/0x0/' + video_id, video_id)
+ self._set_cookie('cda.pl', 'cda.player', 'html5')
+ webpage = self._download_webpage(
+ self._BASE_URL + '/video/' + video_id, video_id)
if 'Ten film jest dostępny dla użytkowników premium' in webpage:
raise ExtractorError('This video is only available for premium users.', expected=True)
- title = self._html_search_regex(r'<title>(.+?)</title>', webpage, 'title')
-
formats = []
+ uploader = self._search_regex(r'''(?x)
+ <(span|meta)[^>]+itemprop=(["\'])author\2[^>]*>
+ (?:<\1[^>]*>[^<]*\1>|(?!\1>)(?:.|\n))*?
+ <(span|meta)[^>]+itemprop=(["\'])name\4[^>]*>(?P<uploader>[^<]+)\3>
+ ''', webpage, 'uploader', default=None, group='uploader')
+ view_count = self._search_regex(
+ r'Odsłony:(?:\s| )*([0-9]+)', webpage,
+ 'view_count', default=None)
+ average_rating = self._search_regex(
+ r'<(?:span|meta)[^>]+itemprop=(["\'])ratingValue\1[^>]*>(?P