[bilibili] add support for Live Photo (video) downloads (#8860)

* bilibili: add support for live photo downloads
* fix: resolve flake8 linting errors (whitespace and line length)
* fix: resolve flake8 E302 and W293 linting errors
* fix: resolve flake8 W293 and E302 linting errors

* simplify syntax
* add 'livephoto' option
* add tests
This commit is contained in:
camellia2077
2026-01-11 02:27:34 +08:00
committed by GitHub
parent 18b4c67c65
commit 084a6d73e0
4 changed files with 35 additions and 2 deletions

View File

@@ -1813,6 +1813,16 @@ Description
Extract files from quoted content. Extract files from quoted content.
extractor.bilibili.livephoto
----------------------------
Type
``bool``
Default
``true``
Description
Download ``livephoto`` files.
extractor.[blogger].api-key extractor.[blogger].api-key
--------------------------- ---------------------------
Type Type

View File

@@ -165,7 +165,9 @@
}, },
"bilibili": "bilibili":
{ {
"sleep-request": "3.0-6.0" "sleep-request": "3.0-6.0",
"livephoto": true
}, },
"bluesky": "bluesky":
{ {

View File

@@ -75,17 +75,23 @@ class BilibiliArticleExtractor(BilibiliExtractor):
article["count"] = len(pics) article["count"] = len(pics)
yield Message.Directory, "", article yield Message.Directory, "", article
livephoto = self.config("livephoto", True)
for article["num"], pic in enumerate(pics, 1): for article["num"], pic in enumerate(pics, 1):
url = pic["url"] url = pic["url"]
article.update(pic) article.update(pic)
yield Message.Url, url, text.nameext_from_url(url, article) yield Message.Url, url, text.nameext_from_url(url, article)
if livephoto and (url := pic.get("live_url")):
article["id"] += "_l"
yield Message.Url, url, text.nameext_from_url(url, article)
class BilibiliUserArticlesExtractor(BilibiliExtractor): class BilibiliUserArticlesExtractor(BilibiliExtractor):
"""Extractor for a bilibili user's articles""" """Extractor for a bilibili user's articles"""
subcategory = "user-articles" subcategory = "user-articles"
pattern = (r"(?:https?://)?space\.bilibili\.com/(\d+)" pattern = (r"(?:https?://)?space\.bilibili\.com/(\d+)"
r"/(?:article|upload/opus)") r"/(?:article|upload/opus|dynamic)")
example = "https://space.bilibili.com/12345/article" example = "https://space.bilibili.com/12345/article"
def articles(self): def articles(self):

View File

@@ -65,6 +65,16 @@ __tests__ = (
""", """,
}, },
{
"#url" : "https://www.bilibili.com/opus/1154738799821979656",
"#comment": "livephoto (#8860)",
"#class" : bilibili.BilibiliArticleExtractor,
"#results": (
"http://i0.hdslb.com/bfs/new_dyn/live_958a5cffe9177b196ada011867abd0a031968078.jpg",
"https://i0.hdslb.com/bfs/dyn_video/_000003lud8wlka5eq2kxctgfx3fwo3b-1-152111110022.mp4",
),
},
{ {
"#url" : "https://space.bilibili.com/405279279/article", "#url" : "https://space.bilibili.com/405279279/article",
"#class" : bilibili.BilibiliUserArticlesExtractor, "#class" : bilibili.BilibiliUserArticlesExtractor,
@@ -77,6 +87,11 @@ __tests__ = (
"#class" : bilibili.BilibiliUserArticlesExtractor, "#class" : bilibili.BilibiliUserArticlesExtractor,
}, },
{
"#url" : "https://space.bilibili.com/405279279/dynamic",
"#class" : bilibili.BilibiliUserArticlesExtractor,
},
{ {
"#url" : "https://space.bilibili.com/405279279/favlist?fid=opus", "#url" : "https://space.bilibili.com/405279279/favlist?fid=opus",
"#class" : bilibili.BilibiliUserArticlesFavoriteExtractor, "#class" : bilibili.BilibiliUserArticlesFavoriteExtractor,