@@ -133,46 +133,77 @@ async function generateSiteJSON(jsDir, configDir, requestHost, sub, subFilePath,
133133 return { sites} ;
134134}
135135
136- function generateParseJSON ( jxDir , requestHost ) {
136+ async function generateParseJSON ( jxDir , requestHost ) {
137137 const files = readdirSync ( jxDir ) ;
138- const parses = files
139- . filter ( ( file ) => file . endsWith ( '.js' ) && ! file . startsWith ( '_' ) ) // 筛选出不是 "_" 开头的 .js 文件
140- . map ( ( file ) => {
141- const baseName = path . basename ( file , '.js' ) ; // 去掉文件扩展名
142- const api = `${ requestHost } /parse/${ baseName } ?url=` ; // 使用请求的 host 地址,避免硬编码端口
143- return {
144- name : baseName ,
145- url : api ,
146- type : 1 ,
147- ext : {
148- flag : [
149- "qiyi" ,
150- "imgo" ,
151- "爱奇艺" ,
152- "奇艺" ,
153- "qq" ,
154- "qq 预告及花絮" ,
155- "腾讯" ,
156- "youku" ,
157- "优酷" ,
158- "pptv" ,
159- "PPTV" ,
160- "letv" ,
161- "乐视" ,
162- "leshi" ,
163- "mgtv" ,
164- "芒果" ,
165- "sohu" ,
166- "xigua" ,
167- "fun" ,
168- "风行"
169- ]
170- } ,
171- header : {
172- "User-Agent" : "Mozilla/5.0"
138+ const jx_files = files . filter ( ( file ) => file . endsWith ( '.js' ) && ! file . startsWith ( '_' ) ) // 筛选出不是 "_" 开头的 .js 文件
139+ let parses = [ ] ;
140+ const tasks = jx_files . map ( ( file ) => {
141+ return {
142+ func : async ( { file, jxDir, requestHost, drpy} ) => {
143+ const baseName = path . basename ( file , '.js' ) ; // 去掉文件扩展名
144+ const api = `${ requestHost } /parse/${ baseName } ?url=` ; // 使用请求的 host 地址,避免硬编码端口
145+
146+ let jxObject = {
147+ type : 1 , // 固定值
148+ ext : {
149+ flag : [
150+ "qiyi" ,
151+ "imgo" ,
152+ "爱奇艺" ,
153+ "奇艺" ,
154+ "qq" ,
155+ "qq 预告及花絮" ,
156+ "腾讯" ,
157+ "youku" ,
158+ "优酷" ,
159+ "pptv" ,
160+ "PPTV" ,
161+ "letv" ,
162+ "乐视" ,
163+ "leshi" ,
164+ "mgtv" ,
165+ "芒果" ,
166+ "sohu" ,
167+ "xigua" ,
168+ "fun" ,
169+ "风行"
170+ ]
171+ } ,
172+ header : {
173+ "User-Agent" : "Mozilla/5.0"
174+ }
175+ } ;
176+ try {
177+ let _jxObject = await drpy . getJx ( path . join ( jxDir , file ) ) ;
178+ jxObject = { ...jxObject , ..._jxObject } ;
179+ } catch ( e ) {
180+ throw new Error ( `Error parsing jx object for file: ${ file } , ${ e . message } ` ) ;
173181 }
182+
183+ parses . push ( {
184+ name : baseName ,
185+ url : jxObject . url || api ,
186+ type : jxObject . type ,
187+ ext : jxObject . ext ,
188+ header : jxObject . header
189+ } ) ;
190+ } ,
191+ param : { file, jxDir, requestHost, drpy} ,
192+ id : file ,
193+ } ;
194+ } ) ;
195+
196+ const listener = {
197+ func : ( param , id , error , result ) => {
198+ if ( error ) {
199+ console . error ( `Error processing file ${ id } :` , error . message ) ;
200+ } else {
201+ // console.log(`Successfully processed file ${id}:`, result);
174202 }
175- } ) ;
203+ } ,
204+ param : { } , // 外部参数可以在这里传入
205+ } ;
206+ await batchExecute ( tasks , listener ) ;
176207 return { parses} ;
177208}
178209
@@ -263,7 +294,7 @@ export default (fastify, options, done) => {
263294 }
264295
265296 const siteJSON = await generateSiteJSON ( options . jsDir , options . configDir , requestHost , sub , options . subFilePath , pwd ) ;
266- const parseJSON = generateParseJSON ( options . jxDir , requestHost ) ;
297+ const parseJSON = await generateParseJSON ( options . jxDir , requestHost ) ;
267298 const livesJSON = generateLivesJSON ( requestHost ) ;
268299 const playerJSON = generatePlayerJSON ( options . configDir , requestHost ) ;
269300 const configObj = { sites_count : siteJSON . sites . length , ...siteJSON , ...parseJSON , ...livesJSON , ...playerJSON } ;
0 commit comments