[weibo] support 'mix_media_info' entries (#3793)

This commit is contained in:
Mike Fährmann
2023-03-18 15:19:25 +01:00
parent 00f0233b28
commit 72f1f16eb2

View File

@@ -79,6 +79,18 @@ class WeiboExtractor(Extractor):
def _extract_status(self, status, files): def _extract_status(self, status, files):
append = files.append append = files.append
if "mix_media_info" in status:
for item in status["mix_media_info"]["items"]:
type = item.get("type")
if type == "video":
if self.videos:
append(self._extract_video(item["data"]["media_info"]))
elif type == "pic":
append(item["data"]["largest"].copy())
else:
self.log.warning("Unknown media type '%s'", type)
return
pic_ids = status.get("pic_ids") pic_ids = status.get("pic_ids")
if pic_ids: if pic_ids:
pics = status["pic_infos"] pics = status["pic_infos"]
@@ -100,18 +112,20 @@ class WeiboExtractor(Extractor):
else: else:
append(pic["largest"].copy()) append(pic["largest"].copy())
if "page_info" in status and self.videos: if "page_info" in status:
try: info = status["page_info"]
media = max(status["page_info"]["media_info"]["playback_list"], if "media_info" in info and self.videos:
key=lambda m: m["meta"]["quality_index"]) append(self._extract_video(info["media_info"]))
except KeyError:
pass def _extract_video(self, info):
except ValueError: try:
info = status["page_info"]["media_info"] media = max(info["playback_list"],
append({"url": (info.get("stream_url_hd") or key=lambda m: m["meta"]["quality_index"])
info["stream_url"])}) except Exception:
else: return {"url": (info.get("stream_url_hd") or
append(media["play_info"].copy()) info["stream_url"])}
else:
return media["play_info"].copy()
def _status_by_id(self, status_id): def _status_by_id(self, status_id):
url = "{}/ajax/statuses/show?id={}".format(self.root, status_id) url = "{}/ajax/statuses/show?id={}".format(self.root, status_id)
@@ -380,7 +394,7 @@ class WeiboStatusExtractor(WeiboExtractor):
}), }),
# missing 'playback_list' (#2792) # missing 'playback_list' (#2792)
("https://weibo.com/2909128931/4409545658754086", { ("https://weibo.com/2909128931/4409545658754086", {
"count": 9, "count": 10,
}), }),
# empty 'playback_list' (#3301) # empty 'playback_list' (#3301)
("https://weibo.com/1501933722/4142890299009993", { ("https://weibo.com/1501933722/4142890299009993", {
@@ -389,6 +403,10 @@ class WeiboStatusExtractor(WeiboExtractor):
r"=0&ps=1CwnkDw1GXwCQx.+&KID=unistore,video", r"=0&ps=1CwnkDw1GXwCQx.+&KID=unistore,video",
"count": 1, "count": 1,
}), }),
# mix_media_info (#3793)
("https://weibo.com/2427303621/MxojLlLgQ", {
"count": 9,
}),
("https://m.weibo.cn/status/4339748116375525"), ("https://m.weibo.cn/status/4339748116375525"),
("https://m.weibo.cn/5746766133/4339748116375525"), ("https://m.weibo.cn/5746766133/4339748116375525"),
) )