- vformats = []
- for asset in assets.findall("asset"):
- if asset.find("downloadUrl") is None:
- continue
- vformat = {}
- vformat["url"] = asset.find("downloadUrl").text
- vformat["ext"] = asset.find("mediaType").text
- vformat["format_id"] = asset.get("type")
- vformat["width"] = int(asset.find("frameWidth").text)
- vformat["height"] = int(asset.find("frameHeight").text)
- vformat["resolution"] = "%ix%i" % (vformat["width"], vformat["height"])
- vformat["tbr"] = int(asset.find("bitrateVideo").text)
- vformat["abr"] = int(asset.find("bitrateAudio").text)
- vformat["vcodec"] = asset.find("codecVideo").text
- vformat["container"] = vformat["ext"]
- vformat["filesize"] = int(asset.find("size").text)
- vformat["preference"] = vformat["quality"] = -1
- vformat["format"] = "%s container with %i Kbps %s" % (vformat["container"], vformat["tbr"], vformat["vcodec"])
- vformats.append(vformat)
- self._sort_formats(vformats)
- return vformats
+
+ def text_or_none(asset, tag):
+ elem = asset.find(tag)
+ return None if elem is None else elem.text
+
+ formats = [{
+ 'url': text_or_none(asset, 'downloadUrl'),
+ 'ext': text_or_none(asset, 'mediaType'),
+ 'format_id': asset.get('type'),
+ 'width': int_or_none(text_or_none(asset, 'frameWidth')),
+ 'height': int_or_none(text_or_none(asset, 'frameHeight')),
+ 'tbr': int_or_none(text_or_none(asset, 'bitrateVideo')),
+ 'abr': int_or_none(text_or_none(asset, 'bitrateAudio')),
+ 'vcodec': text_or_none(asset, 'codecVideo'),
+ 'acodec': text_or_none(asset, 'codecAudio'),
+ 'container': text_or_none(asset, 'mediaType'),
+ 'filesize': int_or_none(text_or_none(asset, 'size')),
+ } for asset in assets.findall('asset')
+ if asset.find('downloadUrl') is not None]
+
+ self._sort_formats(formats)
+ return formats