1
1
'use strict'
2
2
3
3
const http = require ( 'http' )
4
+ const https = require ( 'https' )
5
+ const { URL } = require ( 'url' )
4
6
const cheerio = require ( 'cheerio' )
5
7
const querystring = require ( 'querystring' )
6
8
const Fuse = require ( 'fuse.js' )
@@ -18,6 +20,34 @@ const requestOptions = uri => {
18
20
}
19
21
}
20
22
23
+ const testLink = uri => {
24
+ return new Promise ( ( resolve , reject ) => {
25
+ const myURL = new URL ( uri )
26
+ const options = {
27
+ headers : { 'User-Agent' : userAgent } ,
28
+ hostname : myURL . hostname ,
29
+ port : myURL . port ,
30
+ path : myURL . pathname ,
31
+ method : 'GET'
32
+ }
33
+ let request
34
+ if ( myURL . protocol === 'https:' ) {
35
+ request = https . request
36
+ } else {
37
+ request = http . request
38
+ }
39
+ const req = request ( options , res => {
40
+ if ( res . statusCode !== 200 ) {
41
+ resolve ( null )
42
+ } else {
43
+ resolve ( uri )
44
+ }
45
+ } )
46
+ req . on ( 'error' , ( ) => resolve ( null ) )
47
+ req . end ( )
48
+ } )
49
+ }
50
+
21
51
const getOriginalLinks = uri => {
22
52
return new Promise ( ( resolve , reject ) => {
23
53
const options = requestOptions ( uri )
@@ -57,15 +87,17 @@ const getLinksByUrl = uri => {
57
87
. get ( )
58
88
. filter ( x => regex . test ( x ) )
59
89
. map ( x =>
60
- getOriginalLinks ( `/stream/jkmedia/${ regex . exec ( x ) [ 1 ] } /` )
90
+ getOriginalLinks ( `/stream/jkmedia/${ regex . exec ( x ) [ 1 ] } /` ) . then (
91
+ testLink
92
+ )
61
93
)
62
94
Promise . all ( promises )
63
95
. then ( urls => {
64
96
resolve ( {
65
97
title : title ,
66
98
codeName : codeName ,
67
99
chapter : chapter ,
68
- urls : urls
100
+ urls : urls . filter ( uri => uri !== null )
69
101
} )
70
102
} )
71
103
. catch ( reject )
0 commit comments