- @staticmethod
- def _extract_item(item):
- title = item.find('./title').text.strip()
- source = item.find('./source').text
- extension = item.attrib['type']
- thumbnail = item.find('./backimage').text
+ def _extract_item(self, item, page_type, fatal=True):
+ error_message = item.get('msg')
+ if error_message:
+ if not fatal:
+ return
+ raise ExtractorError(
+ '%s returned error: %s' % (self.IE_NAME, error_message),
+ expected=True)
+
+ formats = []
+ for quality, source_url in zip(item.get('qualities') or item.get('quality', []), item.get('source_list') or item.get('source', [])):
+ if not source_url or source_url == 'require vip':
+ continue
+ if not re.match(r'https?://', source_url):
+ source_url = '//' + source_url
+ source_url = self._proto_relative_url(source_url, 'http:')
+ quality_num = int_or_none(quality)
+ f = {
+ 'format_id': quality,
+ 'url': source_url,
+ }
+ if page_type == 'video':
+ f.update({
+ 'height': quality_num,
+ 'ext': 'mp4',
+ })
+ else:
+ f.update({
+ 'abr': quality_num,
+ 'ext': 'mp3',
+ })
+ formats.append(f)
+
+ cover = item.get('cover')