mirror of
https://github.com/szdytom/nyanpasu.git
synced 2025-10-19 17:10:16 +00:00
add --user-agent
This commit is contained in:
parent
692756aaf7
commit
2ccdb4977d
@ -126,6 +126,7 @@ yt-dlp -a vlist.txt -o "%(autonumber)s.%(ext)s"
|
|||||||
- `--script-format`:选择脚本的格式(可选 `bash`、`cmd` 或 `powershell`,亦可指定 `none` 以抑制解析器生成弹幕下载脚本)。
|
- `--script-format`:选择脚本的格式(可选 `bash`、`cmd` 或 `powershell`,亦可指定 `none` 以抑制解析器生成弹幕下载脚本)。
|
||||||
- `--downloader-args`:为命令行下载器指定额外的参数,注意该选项的值需要以引号包裹,并以空格开头,例如 `--downloader-args " -A -B --example"`。
|
- `--downloader-args`:为命令行下载器指定额外的参数,注意该选项的值需要以引号包裹,并以空格开头,例如 `--downloader-args " -A -B --example"`。
|
||||||
- `--downloader-args-override`:覆盖命令行下载器的参数,注意该选项的值需要以引号包裹,并以空格开头,例如 `--downloader-args-override " -A -B --example"`。
|
- `--downloader-args-override`:覆盖命令行下载器的参数,注意该选项的值需要以引号包裹,并以空格开头,例如 `--downloader-args-override " -A -B --example"`。
|
||||||
|
- `--user-agent`:指定 HTTP 请求头中的 `User-Agennt` 项的值。
|
||||||
|
|
||||||
## 社区
|
## 社区
|
||||||
|
|
||||||
|
@ -7,10 +7,13 @@ import { hideBin } from 'yargs/helpers';
|
|||||||
import yargs from 'yargs';
|
import yargs from 'yargs';
|
||||||
|
|
||||||
const DESC_XMLNS = "nyanpasu:descriptor";
|
const DESC_XMLNS = "nyanpasu:descriptor";
|
||||||
|
const CLASSIC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36";
|
||||||
|
|
||||||
async function fetchDescriptor(url) {
|
async function fetchDescriptor(url, ua) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(url);
|
const response = await fetch(url, {
|
||||||
|
headers: { 'User-Agent': ua ?? CLASSIC_UA },
|
||||||
|
});
|
||||||
const html = await response.text();
|
const html = await response.text();
|
||||||
const regex = /<script id="__NEXT_DATA__" type="application\/json">(.*?)<\/script>/s;
|
const regex = /<script id="__NEXT_DATA__" type="application\/json">(.*?)<\/script>/s;
|
||||||
const match = html.match(regex);
|
const match = html.match(regex);
|
||||||
@ -134,7 +137,7 @@ class DownloadTarget {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class DownloadCommand {
|
class DownloadCommand {
|
||||||
constructor(defaultArgs, supportFlags, { customArgs, overrideArgs }) {
|
constructor(defaultArgs, supportFlags, { customArgs, overrideArgs, ua }) {
|
||||||
if (overrideArgs != null) {
|
if (overrideArgs != null) {
|
||||||
this.args = overrideArgs;
|
this.args = overrideArgs;
|
||||||
} else {
|
} else {
|
||||||
@ -143,6 +146,7 @@ class DownloadCommand {
|
|||||||
if (this.args.length && this.args[0] != ' ') {
|
if (this.args.length && this.args[0] != ' ') {
|
||||||
this.args = ' ' + this.args;
|
this.args = ' ' + this.args;
|
||||||
}
|
}
|
||||||
|
this.ua = ua ?? CLASSIC_UA;
|
||||||
|
|
||||||
this.supportFlags = supportFlags;
|
this.supportFlags = supportFlags;
|
||||||
}
|
}
|
||||||
@ -158,10 +162,8 @@ class CurlDownloadCommand extends DownloadCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
downloadFile(target, filename) {
|
downloadFile(target, filename) {
|
||||||
if (target.compressed) {
|
let cflag = target.compressed ? '--compressed' : '';
|
||||||
return `curl${this.args} --compressed -o "${filename}" "${target.uri}"`;
|
return `curl${this.args} -A "${this.ua}" ${cflag} -o "${filename}" "${target.uri}"`;
|
||||||
}
|
|
||||||
return `curl${this.args} -o "${filename}" "${target.uri}"`;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -171,7 +173,7 @@ class PowerShellDownloadCommand extends DownloadCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
downloadFile(target, filename) {
|
downloadFile(target, filename) {
|
||||||
return `Invoke-WebRequest${this.args} -Uri "${target.uri}" -OutFile "${filename}"`;
|
return `iwr${this.args} -User-Agent "${this.ua}" -Uri "${target.uri}" -OutFile "${filename}"`;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -482,6 +484,11 @@ async function main() {
|
|||||||
description: 'Suppress warning of not inside a TMUX session',
|
description: 'Suppress warning of not inside a TMUX session',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: false,
|
default: false,
|
||||||
|
}).option('user-agent', {
|
||||||
|
description: 'HTTP header User-Agent value',
|
||||||
|
alias: 'A',
|
||||||
|
type: 'string',
|
||||||
|
default: CLASSIC_UA,
|
||||||
}).usage('Uasge: <url>').version('0.1.4').help().alias('help', 'h').argv;
|
}).usage('Uasge: <url>').version('0.1.4').help().alias('help', 'h').argv;
|
||||||
|
|
||||||
const url = args._[0];
|
const url = args._[0];
|
||||||
@ -522,6 +529,7 @@ async function main() {
|
|||||||
let downloader = new downloaderMap[downloaderType]({
|
let downloader = new downloaderMap[downloaderType]({
|
||||||
customArgs: args.downloaderArgs,
|
customArgs: args.downloaderArgs,
|
||||||
overrideArgs: args.downloaderArgsOverride,
|
overrideArgs: args.downloaderArgsOverride,
|
||||||
|
ua: args.userAgent,
|
||||||
});
|
});
|
||||||
|
|
||||||
const scriptBuilderMap = {
|
const scriptBuilderMap = {
|
||||||
@ -547,7 +555,7 @@ async function main() {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
info('Downloading descriptor info');
|
info('Downloading descriptor info');
|
||||||
rawDesc = await fetchDescriptor(url);
|
rawDesc = await fetchDescriptor(url, args.userAgent);
|
||||||
await fs.writeFile('cache.json', JSON.stringify(rawDesc));
|
await fs.writeFile('cache.json', JSON.stringify(rawDesc));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user