Skip to content

Commit 75cc819

Browse files
author
soul
committed
Refactor Request implementation and remove Playwright and RawHttp fetchers
- Consolidate Request class with native HTTPS request handling - Remove separate Playwright and RawHttp fetcher implementations - Simplify request logic by integrating core functionality directly into Request class - Remove unnecessary FetcherType and related type definitions - Update parsers to use simplified Request constructor - Remove playwright dependency from package.json
1 parent 4c32564 commit 75cc819

File tree

13 files changed

+273
-390
lines changed

13 files changed

+273
-390
lines changed

bun.lockb

-1.07 KB
Binary file not shown.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
"cheerio": "^1.0.0",
2424
"commander": "^13.0.0",
2525
"crypto-js": "^4.2.0",
26-
"https-proxy-agent": "^7.0.6",
27-
"playwright": "^1.50.0"
26+
"https-proxy-agent": "^7.0.6"
2827
}
2928
}

src/core/crawler/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class Crawler {
1212
this.parsers.push(
1313
new NtdmParser(options),
1414
new DdysParser(options),
15-
new TelegraphParser(options)
15+
new TelegraphParser(options),
1616
);
1717
}
1818

src/core/parsers/base.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,17 @@ import { mkdir, stat, unlink } from 'fs/promises';
33
import { join, dirname, extname } from 'path';
44
import { Request, type RequestOptions } from '../request';
55
import { runConcurrent } from '../../utils/concurrent';
6-
import type { Parser, ParseResult, FetcherType, MediaItem } from '../../types';
6+
import type { Parser, ParseResult, MediaItem } from '../../types';
77
import { DownloadFormatter } from '../../utils/format';
88
import { logger } from '../../utils/logger';
99

1010
export abstract class BaseParser implements Parser {
1111
protected request: Request;
12-
protected downloadRequest: Request; // 专门用于下载的 request
1312
abstract name: string;
14-
abstract fetcherType: FetcherType;
1513
protected formatter: DownloadFormatter;
1614

1715
constructor(options: RequestOptions = {}) {
1816
this.request = new Request(options);
19-
this.downloadRequest = new Request(options);
2017
this.formatter = new DownloadFormatter();
2118
}
2219

@@ -44,7 +41,7 @@ export abstract class BaseParser implements Parser {
4441
// 检查是否存在已下载的文件
4542
try {
4643
fileStats = await stat(destPath);
47-
const remoteHeaders = await this.downloadRequest.fetchHeaders(item.url, headers);
44+
const remoteHeaders = await this.request.fetchHeaders(item.url, headers);
4845
const remoteSize = parseInt(remoteHeaders['content-length'] || '0', 10);
4946

5047
if (fileStats.size === remoteSize && remoteSize > 0) {
@@ -72,10 +69,11 @@ export abstract class BaseParser implements Parser {
7269
const writeMode = headers['Range'] ? 'a' : 'w';
7370
writeStream = createWriteStream(destPath, { flags: writeMode });
7471

75-
await this.downloadRequest.fetchBuffer(
72+
await this.request.fetchBuffer(
7673
item.url,
7774
headers,
7875
(downloaded, total) => {
76+
7977
const now = Date.now();
8078
if (now - lastLogged >= 1000) {
8179
const dl = downloaded + (fileStats?.size || 0);
@@ -216,9 +214,6 @@ export abstract class BaseParser implements Parser {
216214
async close(): Promise<void> {
217215
await Promise.all([
218216
this.request.close(),
219-
this.downloadRequest.close()
220217
]);
221218
}
222-
223-
224219
}

src/core/parsers/ddys/index.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as cheerio from 'cheerio';
2-
import type { FetcherType, MediaItem, ParseResult } from "../../../types";
2+
import type { MediaItem, ParseResult } from "../../../types";
33
import { DownloadFormatter } from '../../../utils/format';
44
import { Request, type RequestOptions } from '../../request';
55
import { BaseParser } from "../base";
@@ -8,13 +8,11 @@ import { BaseParser } from "../base";
88
export class DdysParser extends BaseParser {
99
protected request: Request;
1010
name = "ddys";
11-
fetcherType: FetcherType = 'raw-http';
1211
protected formatter: DownloadFormatter;
1312

1413
constructor(options: RequestOptions = {}) {
1514
super(options);
16-
this.request = new Request(options, this.fetcherType);
17-
this.downloadRequest = new Request(options, this.fetcherType);
15+
this.request = new Request(options);
1816
this.formatter = new DownloadFormatter();
1917
}
2018

src/core/parsers/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export { NtdmParser } from './ntdm';
22
export { DdysParser } from './ddys';
3-
export { TelegraphParser } from './telegraph';
3+
export { TelegraphParser } from './telegraph';

src/core/parsers/ntdm/index.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
import * as cheerio from 'cheerio';
2-
import type { FetcherType, ParseResult } from '../../../types';
2+
import type { ParseResult } from '../../../types';
33
import { Request, type RequestOptions } from '../../request';
44
import { BaseParser } from '../base';
55
import { getVideoInfo } from './contexts/play';
66

7-
87
export class NtdmParser extends BaseParser {
98
protected request: Request;
109
name = 'ntdm';
11-
fetcherType: FetcherType = 'raw-http';
12-
10+
1311
constructor(options: RequestOptions = {}) {
1412
super();
15-
this.request = new Request(options, this.fetcherType);
13+
this.request = new Request(options);
1614
}
1715

1816
async fetchHtml(url: string): Promise<string> {

src/core/request/fetchers/playwright.ts

Lines changed: 0 additions & 96 deletions
This file was deleted.

0 commit comments

Comments
 (0)