[weibo] support 'mix_media_info' entries (#3793)
This commit is contained in:
@@ -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"),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user