projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #10594 from stepshal/https_support
[youtube-dl]
/
youtube_dl
/
extractor
/
bandcamp.py
diff --git
a/youtube_dl/extractor/bandcamp.py
b/youtube_dl/extractor/bandcamp.py
index a27f3e7488add9836ee7724b67195d1a4541de4b..249c3d9569c440b057af9f6706109545ace32862 100644
(file)
--- a/
youtube_dl/extractor/bandcamp.py
+++ b/
youtube_dl/extractor/bandcamp.py
@@
-10,6
+10,8
@@
from ..compat import (
)
from ..utils import (
ExtractorError,
)
from ..utils import (
ExtractorError,
+ float_or_none,
+ int_or_none,
)
)
@@
-27,7
+29,7
@@
class BandcampIE(InfoExtractor):
'_skip': 'There is a limit of 200 free downloads / month for the test song'
}, {
'url': 'http://benprunty.bandcamp.com/track/lanius-battle',
'_skip': 'There is a limit of 200 free downloads / month for the test song'
}, {
'url': 'http://benprunty.bandcamp.com/track/lanius-battle',
- 'md5': '
2b68e5851514c20efdff2afc5603b8b4
',
+ 'md5': '
73d0b3171568232574e45652f8720b5c
',
'info_dict': {
'id': '2650410135',
'ext': 'mp3',
'info_dict': {
'id': '2650410135',
'ext': 'mp3',
@@
-46,26
+48,30
@@
class BandcampIE(InfoExtractor):
if m_trackinfo:
json_code = m_trackinfo.group(1)
data = json.loads(json_code)[0]
if m_trackinfo:
json_code = m_trackinfo.group(1)
data = json.loads(json_code)[0]
+ track_id = compat_str(data['id'])
+
+ if not data.get('file'):
+ raise ExtractorError('Not streamable', video_id=track_id, expected=True)
formats = []
for format_id, format_url in data['file'].items():
ext, abr_str = format_id.split('-', 1)
formats.append({
'format_id': format_id,
formats = []
for format_id, format_url in data['file'].items():
ext, abr_str = format_id.split('-', 1)
formats.append({
'format_id': format_id,
- 'url':
format_url
,
+ 'url':
self._proto_relative_url(format_url, 'http:')
,
'ext': ext,
'vcodec': 'none',
'acodec': ext,
'ext': ext,
'vcodec': 'none',
'acodec': ext,
- 'abr': int(abr_str),
+ 'abr': int
_or_none
(abr_str),
})
self._sort_formats(formats)
return {
})
self._sort_formats(formats)
return {
- 'id':
compat_str(data['id'])
,
+ 'id':
track_id
,
'title': data['title'],
'formats': formats,
'title': data['title'],
'formats': formats,
- 'duration': float
(data['duration']
),
+ 'duration': float
_or_none(data.get('duration')
),
}
else:
raise ExtractorError('No free songs found')
}
else:
raise ExtractorError('No free songs found')
@@
-156,6
+162,15
@@
class BandcampAlbumIE(InfoExtractor):
'uploader_id': 'dotscale',
},
'playlist_mincount': 7,
'uploader_id': 'dotscale',
},
'playlist_mincount': 7,
+ }, {
+ # with escaped quote in title
+ 'url': 'https://jstrecords.bandcamp.com/album/entropy-ep',
+ 'info_dict': {
+ 'title': '"Entropy" EP',
+ 'uploader_id': 'jstrecords',
+ 'id': 'entropy-ep',
+ },
+ 'playlist_mincount': 3,
}]
def _real_extract(self, url):
}]
def _real_extract(self, url):
@@
-170,8
+185,11
@@
class BandcampAlbumIE(InfoExtractor):
entries = [
self.url_result(compat_urlparse.urljoin(url, t_path), ie=BandcampIE.ie_key())
for t_path in tracks_paths]
entries = [
self.url_result(compat_urlparse.urljoin(url, t_path), ie=BandcampIE.ie_key())
for t_path in tracks_paths]
- title = self._search_regex(
- r'album_title\s*:\s*"(.*?)"', webpage, 'title', fatal=False)
+ title = self._html_search_regex(
+ r'album_title\s*:\s*"((?:\\.|[^"\\])+?)"',
+ webpage, 'title', fatal=False)
+ if title:
+ title = title.replace(r'\"', '"')
return {
'_type': 'playlist',
'uploader_id': uploader_id,
return {
'_type': 'playlist',
'uploader_id': uploader_id,