summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/weibo.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2022-12-04 23:25:06 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2022-12-04 23:25:06 -0500
commit3338dfce719c999467ffe08fd45663be8190057a (patch)
treefd3235a1379c19508bbb47b8e8b95d5d9164b0d3 /gallery_dl/extractor/weibo.py
parent7af5cc29d1c02d20a6890b7b7ba78ab41532a763 (diff)
New upstream version 1.24.1.upstream/1.24.1
Diffstat (limited to 'gallery_dl/extractor/weibo.py')
-rw-r--r--gallery_dl/extractor/weibo.py45
1 files changed, 30 insertions, 15 deletions
diff --git a/gallery_dl/extractor/weibo.py b/gallery_dl/extractor/weibo.py
index 55cee14..ab05c48 100644
--- a/gallery_dl/extractor/weibo.py
+++ b/gallery_dl/extractor/weibo.py
@@ -11,7 +11,6 @@
from .common import Extractor, Message
from .. import text, exception
from ..cache import cache
-import itertools
import random
import json
@@ -53,20 +52,20 @@ class WeiboExtractor(Extractor):
for status in self.statuses():
+ files = []
if self.retweets and "retweeted_status" in status:
if original_retweets:
status = status["retweeted_status"]
- files = self._files_from_status(status)
+ self._extract_status(status, files)
else:
- files = itertools.chain(
- self._files_from_status(status),
- self._files_from_status(status["retweeted_status"]),
- )
+ self._extract_status(status, files)
+ self._extract_status(status["retweeted_status"], files)
else:
- files = self._files_from_status(status)
+ self._extract_status(status, files)
status["date"] = text.parse_datetime(
status["created_at"], "%a %b %d %H:%M:%S %z %Y")
+ status["count"] = len(files)
yield Message.Directory, status
for num, file in enumerate(files, 1):
@@ -78,7 +77,9 @@ class WeiboExtractor(Extractor):
file["num"] = num
yield Message.Url, file["url"], file
- def _files_from_status(self, status):
+ def _extract_status(self, status, files):
+ append = files.append
+
pic_ids = status.get("pic_ids")
if pic_ids:
pics = status["pic_infos"]
@@ -87,18 +88,18 @@ class WeiboExtractor(Extractor):
pic_type = pic.get("type")
if pic_type == "gif" and self.videos:
- yield {"url": pic["video"]}
+ append({"url": pic["video"]})
elif pic_type == "livephoto" and self.livephoto:
- yield pic["largest"].copy()
+ append(pic["largest"].copy())
file = {"url": pic["video"]}
file["filehame"], _, file["extension"] = \
pic["video"].rpartition("%2F")[2].rpartition(".")
- yield file
+ append(file)
else:
- yield pic["largest"].copy()
+ append(pic["largest"].copy())
if "page_info" in status and self.videos:
try:
@@ -106,8 +107,12 @@ class WeiboExtractor(Extractor):
key=lambda m: m["meta"]["quality_index"])
except KeyError:
pass
+ except ValueError:
+ info = status["page_info"]["media_info"]
+ append({"url": (info.get("stream_url_hd") or
+ info["stream_url"])})
else:
- yield media["play_info"].copy()
+ append(media["play_info"].copy())
def _status_by_id(self, status_id):
url = "{}/ajax/statuses/show?id={}".format(self.root, status_id)
@@ -344,7 +349,10 @@ class WeiboStatusExtractor(WeiboExtractor):
test = (
("https://m.weibo.cn/detail/4323047042991618", {
"pattern": r"https?://wx\d+.sinaimg.cn/large/\w+.jpg",
- "keyword": {"status": {"date": "dt:2018-12-30 13:56:36"}},
+ "keyword": {"status": {
+ "count": 1,
+ "date": "dt:2018-12-30 13:56:36",
+ }},
}),
("https://m.weibo.cn/detail/4339748116375525", {
"pattern": r"https?://f.us.sinaimg.cn/\w+\.mp4\?label=mp4_1080p",
@@ -375,6 +383,13 @@ class WeiboStatusExtractor(WeiboExtractor):
("https://weibo.com/2909128931/4409545658754086", {
"count": 9,
}),
+ # empty 'playback_list' (#3301)
+ ("https://weibo.com/1501933722/4142890299009993", {
+ "pattern": r"https://f\.us\.sinaimg\.cn/004zstGKlx07dAHg4ZVu010f01"
+ r"000OOl0k01\.mp4\?label=mp4_hd&template=template_7&ori"
+ r"=0&ps=1CwnkDw1GXwCQx.+&KID=unistore,video",
+ "count": 1,
+ }),
("https://m.weibo.cn/status/4339748116375525"),
("https://m.weibo.cn/5746766133/4339748116375525"),
)
@@ -387,6 +402,6 @@ class WeiboStatusExtractor(WeiboExtractor):
return (status,)
-@cache(maxage=356*86400)
+@cache(maxage=365*86400)
def _cookie_cache():
return None