summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/weibo.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/weibo.py')
-rw-r--r--gallery_dl/extractor/weibo.py48
1 files changed, 35 insertions, 13 deletions
diff --git a/gallery_dl/extractor/weibo.py b/gallery_dl/extractor/weibo.py
index a7068c8..68871c8 100644
--- a/gallery_dl/extractor/weibo.py
+++ b/gallery_dl/extractor/weibo.py
@@ -52,10 +52,6 @@ class WeiboExtractor(Extractor):
for status in self.statuses():
- status["date"] = text.parse_datetime(
- status["created_at"], "%a %b %d %H:%M:%S %z %Y")
- yield Message.Directory, status
-
if self.retweets and "retweeted_status" in status:
if original_retweets:
status = status["retweeted_status"]
@@ -68,6 +64,10 @@ class WeiboExtractor(Extractor):
else:
files = self._files_from_status(status)
+ status["date"] = text.parse_datetime(
+ status["created_at"], "%a %b %d %H:%M:%S %z %Y")
+ yield Message.Directory, status
+
for num, file in enumerate(files, 1):
if file["url"].startswith("http:"):
file["url"] = "https:" + file["url"][5:]
@@ -191,7 +191,9 @@ class WeiboUserExtractor(WeiboExtractor):
subcategory = "user"
pattern = USER_PATTERN + r"(?:$|#)"
test = (
- ("https://weibo.com/1758989602"),
+ ("https://weibo.com/1758989602", {
+ "pattern": r"^https://weibo\.com/u/1758989602\?tabtype=feed$",
+ }),
("https://weibo.com/u/1758989602"),
("https://weibo.com/p/1758989602"),
("https://m.weibo.cn/profile/2314621010"),
@@ -200,12 +202,13 @@ class WeiboUserExtractor(WeiboExtractor):
)
def items(self):
- base = " {}/u/{}?tabtype=".format(self.root, self._user_id())
+ base = "{}/u/{}?tabtype=".format(self.root, self._user_id())
return self._dispatch_extractors((
- (WeiboHomeExtractor , base + "home"),
- (WeiboFeedExtractor , base + "feed"),
- (WeiboVideosExtractor, base + "newVideo"),
- (WeiboAlbumExtractor , base + "album"),
+ (WeiboHomeExtractor , base + "home"),
+ (WeiboFeedExtractor , base + "feed"),
+ (WeiboVideosExtractor , base + "video"),
+ (WeiboNewvideoExtractor, base + "newVideo"),
+ (WeiboAlbumExtractor , base + "album"),
), ("feed",))
@@ -254,8 +257,27 @@ class WeiboFeedExtractor(WeiboExtractor):
class WeiboVideosExtractor(WeiboExtractor):
- """Extractor for weibo 'newVideo' listings"""
+ """Extractor for weibo 'video' listings"""
subcategory = "videos"
+ pattern = USER_PATTERN + r"\?tabtype=video"
+ test = ("https://weibo.com/1758989602?tabtype=video", {
+ "pattern": r"https://f\.(video\.weibocdn\.com|us\.sinaimg\.cn)"
+ r"/(../)?\w+\.mp4\?label=mp",
+ "range": "1-30",
+ "count": 30,
+ })
+
+ def statuses(self):
+ endpoint = "/profile/getprofilevideolist"
+ params = {"uid": self._user_id()}
+
+ for status in self._pagination(endpoint, params):
+ yield status["video_detail_vo"]
+
+
+class WeiboNewvideoExtractor(WeiboExtractor):
+ """Extractor for weibo 'newVideo' listings"""
+ subcategory = "newvideo"
pattern = USER_PATTERN + r"\?tabtype=newVideo"
test = ("https://weibo.com/1758989602?tabtype=newVideo", {
"pattern": r"https://f\.video\.weibocdn\.com/(../)?\w+\.mp4\?label=mp",
@@ -336,8 +358,8 @@ class WeiboStatusExtractor(WeiboExtractor):
}),
# type == gif
("https://weibo.com/1758989602/LvBhm5DiP", {
- "pattern": r"http://g\.us\.sinaimg.cn/o0/qNZcaAAglx07Wuf921CM01041"
- r"20005tc0E010\.mp4\?label=gif_mp4",
+ "pattern": r"https://g\.us\.sinaimg.cn/o0/qNZcaAAglx07Wuf921CM0104"
+ r"120005tc0E010\.mp4\?label=gif_mp4",
}),
("https://m.weibo.cn/status/4339748116375525"),
("https://m.weibo.cn/5746766133/4339748116375525"),