mirror of
https://github.com/JoeanAmier/XHS-Downloader.git
synced 2026-10-07 15:58:44 +08:00
@@ -12,6 +12,7 @@ dependencies = [
|
||||
"aiofiles>=25.1.0",
|
||||
"aiosqlite>=0.22.1",
|
||||
"click>=8.3.1",
|
||||
"curl-cffi>=0.15.0",
|
||||
"emoji>=2.15.0",
|
||||
"fastapi>=0.128.5",
|
||||
"fastmcp>=2.14.5",
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
**用户脚本更新内容:**
|
||||
|
||||
**版本号:2.3.1**
|
||||
**版本号:2.3.2**
|
||||
|
||||
1. 新增对 RedNote 的支持
|
||||
|
||||
+46
-17
@@ -2,7 +2,7 @@
|
||||
// @name XHS-Downloader
|
||||
// @namespace xhs_downloader
|
||||
// @homepage https://github.com/JoeanAmier/XHS-Downloader
|
||||
// @version 2.3.1
|
||||
// @version 2.3.2
|
||||
// @tag 小红书
|
||||
// @tag RedNote
|
||||
// @tag XiaoHongShu
|
||||
@@ -14,6 +14,11 @@
|
||||
// @match http*://www.xiaohongshu.com/user/profile/*
|
||||
// @match http*://www.xiaohongshu.com/search_result*
|
||||
// @match http*://www.xiaohongshu.com/board/*
|
||||
// @match http*://www.rednote.com/explore*
|
||||
// @match http*://www.rednote.com/discovery/item/*
|
||||
// @match http*://www.rednote.com/user/profile/*
|
||||
// @match http*://www.rednote.com/search_result*
|
||||
// @match http*://www.rednote.com/board/*
|
||||
// @icon64 data:image/png;base64,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
|
||||
// @grant GM_getValue
|
||||
// @grant GM_setValue
|
||||
@@ -161,6 +166,7 @@ KS-Downloader(快手、KuaiShou):https://github.com/JoeanAmier/KS-Download
|
||||
pushTaskError: '脚本服务器未连接,请检查网络连接或脚本服务器状态是否正常!',
|
||||
pushTaskSuccess: "已向服务器发送下载请求",
|
||||
settingsTitle: '用户脚本设置',
|
||||
scriptInternalError: '脚本内部发生错误',
|
||||
}, 'EN': {
|
||||
instructionsText: `Features:
|
||||
1. Download RedNote note files
|
||||
@@ -289,6 +295,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
pushTaskError: 'Server not connected. Please check your network or server status!',
|
||||
pushTaskSuccess: "Download request sent to server successfully",
|
||||
settingsTitle: 'Script Settings',
|
||||
scriptInternalError: 'An internal error occurred in the script',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -445,6 +452,14 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
}).then();
|
||||
}
|
||||
|
||||
const detailUrlPattern = {
|
||||
"xiaohongshu": {
|
||||
"normal": /http:\/\/sns-webpic-qc\.xhscdn\.com\/\d+\/[0-9a-z]+\/(\S+)!/, "video": undefined,
|
||||
}, "rednote": {
|
||||
"normal": /http:\/\/sns-web-i10\.rednotecdn\.com\/\d+\/[0-9a-z]+\/(\S+)!/, "video": undefined,
|
||||
}
|
||||
}
|
||||
|
||||
const generateVideoUrl = note => {
|
||||
try {
|
||||
const key = note.video?.consumer?.originVideoKey;
|
||||
@@ -459,7 +474,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
|
||||
const generateImageUrl = note => {
|
||||
let images = note.imageList;
|
||||
const regex = /http:\/\/sns-webpic-qc\.xhscdn.com\/\d+\/[0-9a-z]+\/(\S+)!/;
|
||||
const regex = detailUrlPattern[currentSite]["normal"];
|
||||
let urls = [];
|
||||
try {
|
||||
images.forEach((item) => {
|
||||
@@ -573,8 +588,8 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
};
|
||||
|
||||
const extractDownloadLinks = async (server = false) => {
|
||||
if (currentUrl.includes("https://www.xiaohongshu.com/explore/") || currentUrl.includes(
|
||||
"https://www.xiaohongshu.com/discovery/item/")) {
|
||||
if (currentUrl.includes(`https://www.${currentSite}.com/explore/`) || currentUrl.includes(
|
||||
`https://www.${currentSite}.com/discovery/item/`)) {
|
||||
let note = extractNoteInfo();
|
||||
if (note) {
|
||||
await exploreDeal(note, server,);
|
||||
@@ -612,7 +627,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
"headers": {
|
||||
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||
"accept-language": "zh-SG,zh;q=0.9",
|
||||
}, "method": "GET",
|
||||
}, "method": "GET", "referrerPolicy": "no-referrer",
|
||||
});
|
||||
|
||||
// 检查响应状态码
|
||||
@@ -689,7 +704,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
};
|
||||
|
||||
const extractName = () => {
|
||||
let name = document.title.replace(/ - 小红书$/, "")
|
||||
let name = document.title.replace(/ - 小红书$/, "").replace(/ - RedNote$/, "")
|
||||
.replace(/[^\u4e00-\u9fa5a-zA-Z0-9 ~!@#$%&()_\-+=\[\];"',.!()【】:“”,。《》?]/g, "");
|
||||
name = truncateString(name, 64,);
|
||||
let match = currentUrl.match(/\/([0-9a-z]+?)\?/);
|
||||
@@ -842,7 +857,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
([id, token,]) => `https://www.xiaohongshu.com/discovery/item/${id}?source=webshare&xhsshare=pc_web&xsec_token=${token}&xsec_source=pc_share`)
|
||||
.join(" ");
|
||||
|
||||
const generateUserUrls = data => data.map(id => `https://www.xiaohongshu.com/user/profile/${id}`).join(" ");
|
||||
const generateUserUrls = data => data.map(id => `https://www.${currentSite}.com/user/profile/${id}`).join(" ");
|
||||
|
||||
const invalidDetection = data => data.every(([first]) => Boolean(first));
|
||||
|
||||
@@ -2246,7 +2261,8 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
}, 100);
|
||||
};
|
||||
|
||||
let currentUrl;
|
||||
let currentUrl, currentSite = null;
|
||||
const currentSitePattern = /www\.(xiaohongshu|rednote)\.com/;
|
||||
|
||||
// 动态生成菜单内容
|
||||
const updateMenuContent = () => {
|
||||
@@ -2260,16 +2276,16 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
menuItems.push({
|
||||
text: 'README', icon: ' 📄 ', action: readme, description: t.readmeMenuTitle
|
||||
},);
|
||||
} else if (currentUrl === "https://www.xiaohongshu.com/explore" || currentUrl.includes(
|
||||
"https://www.xiaohongshu.com/explore?")) {
|
||||
} else if (currentUrl === `https://www.${currentSite}.com/explore` || currentUrl.includes(
|
||||
`https://www.${currentSite}.com/explore?`)) {
|
||||
menuItems.push({
|
||||
text: t.extractRecommendLinksText,
|
||||
icon: ' ⛓ ',
|
||||
action: () => extractAllLinksEvent(-1),
|
||||
description: t.extractRecommendLinksDescription
|
||||
},);
|
||||
} else if (currentUrl.includes("https://www.xiaohongshu.com/explore/") || currentUrl.includes(
|
||||
"https://www.xiaohongshu.com/discovery/item/")) {
|
||||
} else if (currentUrl.includes(`https://www.${currentSite}.com/explore/`) || currentUrl.includes(
|
||||
`https://www.${currentSite}.com/discovery/item/`)) {
|
||||
menuItems.push({
|
||||
text: t.downloadNoteFilesText,
|
||||
icon: ' 📦 ',
|
||||
@@ -2284,7 +2300,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
description: t.pushDownloadTaskDescription
|
||||
});
|
||||
}
|
||||
} else if (currentUrl.includes("https://www.xiaohongshu.com/user/profile/")) {
|
||||
} else if (currentUrl.includes(`https://www.${currentSite}.com/user/profile/`)) {
|
||||
menuItems.push({
|
||||
text: t.extractPublishedLinksText,
|
||||
icon: ' ⛓ ',
|
||||
@@ -2301,7 +2317,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
action: () => extractAllLinksEvent(1),
|
||||
description: t.extractSavedLinksDescription
|
||||
},);
|
||||
} else if (currentUrl.includes("https://www.xiaohongshu.com/search_result")) {
|
||||
} else if (currentUrl.includes(`https://www.${currentSite}.com/search_result`)) {
|
||||
menuItems.push({
|
||||
text: t.extractSearchNoteLinksText,
|
||||
icon: ' ⛓ ',
|
||||
@@ -2313,7 +2329,7 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
action: () => extractAllLinksEvent(4),
|
||||
description: t.extractSearchUsersLinksDescription
|
||||
},);
|
||||
} else if (currentUrl.includes("https://www.xiaohongshu.com/board/")) {
|
||||
} else if (currentUrl.includes(`https://www.${currentSite}.com/board/`)) {
|
||||
menuItems.push({
|
||||
text: t.extractAlbumNotesLinksText,
|
||||
icon: ' ⛓ ',
|
||||
@@ -2373,6 +2389,12 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
// URL监测相关
|
||||
let lastUrl = window.location.href;
|
||||
let isMenuVisible = false;
|
||||
let currentSiteMatch = lastUrl.match(currentSitePattern);
|
||||
if (currentSiteMatch) {
|
||||
currentSite = currentSiteMatch[1];
|
||||
} else {
|
||||
abnormal(t.scriptInternalError);
|
||||
}
|
||||
|
||||
// 显示菜单
|
||||
const showMenu = () => {
|
||||
@@ -2398,8 +2420,15 @@ Discord Community: https://discord.com/invite/ZYtmgKud9Y
|
||||
const observeUrl = () => {
|
||||
if (window.location.href !== lastUrl) {
|
||||
lastUrl = window.location.href;
|
||||
if (isMenuVisible) {
|
||||
updateMenuContent();
|
||||
currentSiteMatch = lastUrl.match(currentSitePattern);
|
||||
if (currentSiteMatch) {
|
||||
currentSite = currentSiteMatch[1];
|
||||
if (isMenuVisible) {
|
||||
updateMenuContent();
|
||||
}
|
||||
} else {
|
||||
currentSite = null;
|
||||
abnormal(t.scriptInternalError);
|
||||
}
|
||||
}
|
||||
requestAnimationFrame(observeUrl);
|
||||
|
||||
@@ -392,6 +392,39 @@ wheels = [
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/d2/f1/00ce3bde3ca542d1acd8f8cfa38e446840945aa6363f9b74746394b14127/cryptography-46.0.7-cp38-abi3-win_amd64.whl", hash = "sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3", size = 3472985, upload-time = "2026-04-08T01:57:36.714Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "curl-cffi"
|
||||
version = "0.15.0"
|
||||
source = { registry = "https://mirrors.ustc.edu.cn/pypi/simple" }
|
||||
dependencies = [
|
||||
{ name = "certifi" },
|
||||
{ name = "cffi" },
|
||||
{ name = "rich" },
|
||||
]
|
||||
sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/48/5b/89fcfebd3e5e85134147ac99e9f2b2271165fd4d71984fc65da5f17819b7/curl_cffi-0.15.0.tar.gz", hash = "sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded", size = 196437, upload-time = "2026-04-03T11:12:31.525Z" }
|
||||
wheels = [
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/5e/42/54ddd442c795f30ce5dd4e49f87ce77505958d3777cd96a91567a3975d2a/curl_cffi-0.15.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28", size = 2795267, upload-time = "2026-04-03T11:11:46.48Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/83/2d/3915e238579b3c5a92cead5c79130c3b8d20caaba7616cc4d894650e1d6b/curl_cffi-0.15.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b", size = 2573544, upload-time = "2026-04-03T11:11:47.951Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/2a/b3/9d2f1057749a1b07ba1989db3c1503ce8bed998310bae9aea2c43aa64f20/curl_cffi-0.15.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527", size = 10515369, upload-time = "2026-04-03T11:11:50.126Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/b5/1d/6d10dded5ce3fd8157e558ebd97d09e551b77a62cdc1c31e93d0a633cee5/curl_cffi-0.15.0-cp310-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3", size = 10160045, upload-time = "2026-04-03T11:11:52.664Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/5c/12/c70b835487ace3b9ba1502631912e3440082b8ae3a162f60b59cb0b6444d/curl_cffi-0.15.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc", size = 11090433, upload-time = "2026-04-03T11:11:55.049Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/ea/0d/78edcc4f71934225db99df68197a107386d59080742fc7bf6bb4d007924f/curl_cffi-0.15.0-cp310-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a", size = 10479178, upload-time = "2026-04-03T11:11:57.685Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/5b/84/1e101c1acb1ea2f0b4992f5c3024f596d8e21db0d53540b9d583f673c4e7/curl_cffi-0.15.0-cp310-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b", size = 10317051, upload-time = "2026-04-03T11:12:00.295Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/28/42/8ef236b22a6c23d096c85a1dc507efe37bfdfc7a2f8a4b34efb590197369/curl_cffi-0.15.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13", size = 11299660, upload-time = "2026-04-03T11:12:02.791Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/1d/01/56aeb055d962da87a1be0d74c6c644e251c7e88129b5471dc44ac724e678/curl_cffi-0.15.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61", size = 11945049, upload-time = "2026-04-03T11:12:05.912Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/d8/8c/2abf99a38d6340d66cf0557e0c750ef3f8883dfc5d450087e01c85861343/curl_cffi-0.15.0-cp310-abi3-win_amd64.whl", hash = "sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572", size = 1661649, upload-time = "2026-04-03T11:12:07.948Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/3d/39/dfd54f2240d3a9b96d77bacc62b97813b35e2aa8ecf5cd5013c683f1ba96/curl_cffi-0.15.0-cp310-abi3-win_arm64.whl", hash = "sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d", size = 1410741, upload-time = "2026-04-03T11:12:10.073Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/19/6a/c24df8a4fc22fa84070dcd94abeba43c15e08cc09e35869565c0bad196fd/curl_cffi-0.15.0-cp313-abi3-android_24_arm64_v8a.whl", hash = "sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92", size = 7190427, upload-time = "2026-04-03T11:12:12.142Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/11/56/132225cb3491d07cc6adcce5fe395e059bde87c68cff1ef87a31c88c7819/curl_cffi-0.15.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d", size = 2795723, upload-time = "2026-04-03T11:12:13.668Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/07/8f/f4f83cd303bef7e8f1749512e5dd157e7e5d08b0a36c8211f9640a2757bf/curl_cffi-0.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3", size = 2573739, upload-time = "2026-04-03T11:12:15.08Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/e8/5c/643d65c7fc9acd742876aa55c2d7823c438cb7665810acd2e66c9976c4d9/curl_cffi-0.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5", size = 10521046, upload-time = "2026-04-03T11:12:17.034Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/7f/0b/9b8037113c93f4c5323096163471fa7c35c7676c3f608eeaf1287cd99d58/curl_cffi-0.15.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805", size = 11096115, upload-time = "2026-04-03T11:12:19.694Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/5f/96/fff2fcbd924ef4042e0d67379f751a8a4e3186a91e75e35a4cf218b306ee/curl_cffi-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce", size = 11305346, upload-time = "2026-04-03T11:12:22.151Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/53/1b/304b253a45ab28691c8c5e8cca1e6cbb9cf8e46dfceae4648dd536f75e73/curl_cffi-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f", size = 11949834, upload-time = "2026-04-03T11:12:24.986Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/5a/ff/4723d92f08259c707a974aba27a08d0a822b9555e35ca581bf18d055a364/curl_cffi-0.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa", size = 1702771, upload-time = "2026-04-03T11:12:28.201Z" },
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/59/8c/36bbe06d66fa2b765e4a07199f643a59a9cd1a754207a96335402a9520f4/curl_cffi-0.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3", size = 1466312, upload-time = "2026-04-03T11:12:30.054Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cyclopts"
|
||||
version = "4.8.0"
|
||||
@@ -2099,6 +2132,7 @@ dependencies = [
|
||||
{ name = "aiofiles" },
|
||||
{ name = "aiosqlite" },
|
||||
{ name = "click" },
|
||||
{ name = "curl-cffi" },
|
||||
{ name = "emoji" },
|
||||
{ name = "fastapi" },
|
||||
{ name = "fastmcp" },
|
||||
@@ -2124,6 +2158,7 @@ requires-dist = [
|
||||
{ name = "aiofiles", specifier = ">=25.1.0" },
|
||||
{ name = "aiosqlite", specifier = ">=0.22.1" },
|
||||
{ name = "click", specifier = ">=8.3.1" },
|
||||
{ name = "curl-cffi", specifier = ">=0.15.0" },
|
||||
{ name = "emoji", specifier = ">=2.15.0" },
|
||||
{ name = "fastapi", specifier = ">=0.128.5" },
|
||||
{ name = "fastmcp", specifier = ">=2.14.5" },
|
||||
|
||||
Reference in New Issue
Block a user