Add files via upload
This commit is contained in:
@@ -0,0 +1,647 @@
|
||||
self 我的115网盘 1
|
||||
swz93883nhj?password=sa53 豆瓣|TOP250电影_1.67TB 1
|
||||
swz8h1h33xj?password=0000 豆瓣|TOP250电影_12.65Tb 1
|
||||
sw60fyp33eb?password=lcd6 排行|豆瓣2022影视排行榜_1.51T
|
||||
sw6tco83hbe?password=v517 排行|2021豆瓣年度影视榜单_832.64G
|
||||
sw6tcot3hbe?password=e9d7 排行|2022必看最热门影视剧十部_620.84G
|
||||
sw6e6ij3flt?password=t055 REMUX|4K_REMUX_774部_41.16T 1
|
||||
swz6gd93fwo?password=8888 REMUX|4K_REMUX电影2257部 1
|
||||
swzzmu33hi8?password=i5e0 REMUX|无损REMUX电影_101.32TB 1
|
||||
swz9yva3hi8?password=m332 REMUX|2267部2160p_remux_FGT_101.32TB
|
||||
swzn5913wzq?password=nbc5 REMUX|969部部欧美4K原盘电影_45.03T
|
||||
swz1t3b3hdc?password=p5c9 原盘|电影原盘已刮削(194T)
|
||||
sw62svu3nbg?password=z718 原盘|sGNB特效字幕原盘_19T
|
||||
sw620dv3wzn?password=e536 原盘|sGNB特效字幕原盘_313部_21.18T
|
||||
sw6u87633jp?password=u527 原盘|sGNB特效字幕原盘_315部_21.52T
|
||||
sw6e6i13flt?password=f794 原盘|4K原盘_16.94T
|
||||
sw3uax136w4?password=eea6 原盘|CMCT迷你蓝光原盘_2.81T
|
||||
sw69nao3h3b?password=a548 原盘|港片蓝光原盘669部_16.3T
|
||||
swnmisp3wxf?password=i1c6 原盘|剧集原盘_23.3T
|
||||
swznmd03nc7?password=p897 原盘|动漫原盘_40.49T
|
||||
swz6gp53fwo?password=8888 原盘|蓝光原盘_646T_合集
|
||||
sw313rp3zx1?password=w146 原盘|SGNB特效字幕蓝光原盘563部_26.52TB
|
||||
sw68b0u3hhq?password=gd41 原盘|蓝光原盘_666.3Pb
|
||||
swzg3ja33xj?password=f3h5 原盘|FRDS站396部_8.87TB
|
||||
swz18wn3zh9?password=yf61 原盘|演唱会原盘_820T
|
||||
sw6udf93wcx?password=na63 原盘|演唱会_蓝光原盘22TB
|
||||
sw6ug2k3nom?password=t7d0 原盘|香港电影_香港蓝光高清粤语电影合集1242部_(16T)
|
||||
sw62cfo3z23?password=ze90 原盘|3D电影_68.26T
|
||||
swz3ys93wzv?password=rc12 电影|电影频道3300部_16.33T
|
||||
swnrb3b3nat?password=pd76 电影|亚洲1080P_9.33T 1
|
||||
swz8hp033xj?password=0000 电影|多部曲电影系列_21TB 1
|
||||
swzj12t3znw?password=tff8 电影|未分类电影_4.65TB 1
|
||||
sw6uh9x3z2b?password=6666 电影|未分类电影_1620TB 1
|
||||
swzgep23wye?password=c106 电影|大陆电影_6TB 1
|
||||
swzg8dd3wye?password=m5b3 电影|日韩电影_6TB 1
|
||||
swzplko3wye?password=k596 欧美电影|合集_22TB
|
||||
swzj2cx3h4y?password=g180 欧美电影|漫威宇宙系列_1.87TB
|
||||
swz936a3znw?password=a0d3 欧美电影|指环王系列_300GB
|
||||
swz93n63z57?password=dda3 欧美电影|变形金刚_500GB
|
||||
sw629ie3nli?password=d5c7 NetFlix_6.17T
|
||||
sw6tco93hbe?password=ka54 剧集|TVB电视剧合集650部_74.3T
|
||||
swznm373w1p?password=pe35 剧集|欧美剧_60.9T 1
|
||||
swnsdrk3h2m?password=p783 剧集|海贼王_553.61G
|
||||
swntmxc3wp6?password=a3f5 剧集|皇家师姐系列
|
||||
swnsdrm3h2m?password=fea2 剧集|火影忍者全集_455.42G
|
||||
swzn9y13zwh?password=crow 剧集|老友记全十季_594.26G
|
||||
sw6q9w833o2?password=a956 剧集|柯南_766.64G
|
||||
sw6p2t63h2m?password=oea1 剧集|迷失1-6季_203.3G
|
||||
swz826g3nc0?password=ff47 剧集|甜蜜家园_Season_3
|
||||
swztlnh33xj?password=f3h5 剧集|行尸走肉全季杜比
|
||||
swz6fb3369v?password=9999 香港|GOTV_10.46TB
|
||||
swzsehq3ncb?password=5566 香港|合集8.23TB
|
||||
swz9lr83w8f?password=oc53 香港|杜琪峰(银河映像系列)
|
||||
swzdtjc3nb4?password=ef97 香港|成龙
|
||||
sw30v4b3zu2?password=a429 香港|林正英电影合集46部_209.13G
|
||||
swz8cd233xj?password=0000 香港|满清十大酷刑第一部
|
||||
sw6gqo43flt?password=qc62 香港|周星驰系列_854.96G
|
||||
swzdtj93nb4?password=d6c3 香港|周星驰
|
||||
swzv6533697?password=2618 日韩剧|合集18.12TB
|
||||
swzah0d3wvk?password=c142 国产剧|合集_51.41TB
|
||||
swz8t9x3h5k?password=n3f4 国产剧|【繁花_翡翠台源_100GB】
|
||||
swz93y53zp0?password=ef25 国产剧|【唐朝诡事录_全2季】
|
||||
sw6u7zc3fwo?password=8888 国产剧|【陈情令】_(2019)_50集全_4K中字【86G】
|
||||
sw6u7ep3fwo?password=8888 国产剧|【隐秘的角落】(2020)_12集全_4K中字【69G】
|
||||
sw6u78w3fwo?password=8888 国产剧|【庆余年】(2019)_46集全_4K中字【62G】
|
||||
sw6u79l3fwo?password=8888 国产剧|【沉默的真相】(2020)_12集全_4K中字【17G】
|
||||
sw6u79p3fwo?password=8888 国产剧|【斗罗大陆】(2021)_40集全_1080P中字【46G】
|
||||
sw6u72q3fwo?password=8888 国产剧|【开端】(2022)_15集全_4K中字【58G】
|
||||
sw6u72m3fwo?password=8888 国产剧|【狂飙】(2023)_39集全_4K中字【77G】
|
||||
sw6u7u33fwo?password=8888 国产剧|【漫长的季节】(2023)_12集全_4K中字【36G】
|
||||
sw6ukxa3fwo?password=8888 国产剧|【梦华录】(2022)_40集全_4K中字【148G】
|
||||
sw6uil53fwo?password=8888 国产剧|【琅琊榜】(2015)_54集全_4K中字【80G】
|
||||
sw6u42s3fwo?password=8888 国产剧|【苍兰诀】(2022)_36集全_4K中字【42G】
|
||||
sw6u42b3fwo?password=8888 国产剧|【后宫·甄嬛传】(2011)_76集全_4K中字【490G】
|
||||
sw6ugfa3fwo?password=8888 国产剧|【山河令】36集全_4K中字【87G】
|
||||
sw6ugfj3fwo?password=8888 国产剧|【沉香如屑·沉香重华】_(2022)_59集全_4K中字【125G】
|
||||
sw6ugl73fwo?password=8888 国产剧|【星汉灿烂·月升沧海】56集全_4K画质【71G】
|
||||
sw6ugoj3fwo?password=8888 国产剧|【武林外传】(2006)_81集全_4K中字【104GB】
|
||||
sw6ugkc3fwo?password=8888 国产剧|【白夜追凶】(2017)_32集全_4K中字【257G】
|
||||
sw6utz93fwo?password=8888 国产剧|【知否知否应是绿肥红瘦】(2018)_73集全_4K中字【119G】
|
||||
sw6utfi3fwo?password=8888 国产剧|【莲花楼】(2023)_40集全_4K中字【52G】
|
||||
sw6utft3fwo?password=8888 国产剧|【香蜜沉沉烬如霜】(2018)_60集全_4K中字【119G】
|
||||
sw6utts3fwo?password=8888 国产剧|【觉醒年代】(2021)_43集全_4K中字【86G】
|
||||
sw6ut8p3fwo?password=8888 国产剧|【长安十二时辰】(2019)_48集全_4K中字【46G】
|
||||
sw6ut8j3fwo?password=8888 国产剧|【你是我的荣耀】(2021)_32集全_4K中字【41G】
|
||||
sw6ujon3fwo?password=8888 国产剧|【亲爱的,热爱的】(2019)_41集全_4K中字【59G】
|
||||
sw6u0rm3fwo?password=8888 国产剧|【人民的名义】(2017)_55集全_4K中字【118G】
|
||||
sw6u0px3fwo?password=8888 国产剧|【三体】(2023)_4K中字【21G】
|
||||
sw6u0tb3fwo?password=8888 国产剧|【我的人间烟火】(2023)_40集全_1080P中字【45G】
|
||||
sw6u01o3fwo?password=8888 国产剧|【山海情】(2021)_4K中字【33G】
|
||||
sw6u01x3fwo?password=8888 国产剧|【你微笑时很美】(2021)_31集全_4K中字【54G】
|
||||
sw6uupp3fwo?password=8888 国产剧|【延禧攻略】(2018)_70集全_4K中字【123G】
|
||||
sw6uujx3fwo?password=8888 国产剧|【有翡】_(2020)_51集全_1080P中字【72G】
|
||||
sw6uu063fwo?password=8888 国产剧|【最好的我们】(2016)_24集全_4K中字【24G】
|
||||
swz36yf3fwo?password=8888 国产剧|【风吹半夏】(2022)_36集全_4K中字【77G】
|
||||
swz36ye3fwo?password=8888 国产剧|【余生,请多指教】(2022)_29集全_1080P种子【15G】
|
||||
swz36yt3fwo?password=8888 国产剧|【传闻中的陈芊芊】(2020)_24集全_4K中字【29G】
|
||||
swz36ka3fwo?password=8888 国产剧|【扫黑风暴】(2021)_28集全_1080P中字【31G】
|
||||
swz36dx3fwo?password=8888 国产剧|【狼殿下】(2020)_49集全_4K中字【88G】
|
||||
swz36m63fwo?password=8888 国产剧|【仙剑奇侠传三】(2009)_37集全_4K中字【137G】
|
||||
swz36me3fwo?password=8888 国产剧|【长相思】(2023)_39集全_4K中字【38G】
|
||||
swz36m03fwo?password=8888 国产剧|【锦衣之下】(2019)_55集全_4K中字【80G】
|
||||
swz365l3fwo?password=8888 国产剧|【琉璃】(2020)_59集全_4K中字【194G】
|
||||
swz36543fwo?password=8888 国产剧|【长月烬明】(2023)_40集全_4K中字【95G】
|
||||
swz365x3fwo?password=8888 国产剧|【都挺好】(2019)_46集全_4K中字【84G】
|
||||
swz36v63fwo?password=8888 国产剧|【龙岭迷窟】(2020)_18集全_4K中字【21G】
|
||||
swz3hop3fwo?password=8888 国产剧|【父母爱情】(2014)_44集全_4K中字【61G】
|
||||
swz3hks3fwo?password=8888 国产剧|【御赐小仵作】(2021)_20集36集双版本_1080P【101G】
|
||||
swz3hk73fwo?password=8888 国产剧|【仙剑奇侠传】34集全_1080P中字【24G】
|
||||
swz3hkj3fwo?password=8888 国产剧|【三生三世枕上书】(2020)_56集全_4K中字【82G】
|
||||
swz3h5j3fwo?password=8888 国产剧|【三生三世十里桃花】(2017)_58集全_4K中字【146G】
|
||||
swz3sf73fwo?password=8888 国产剧|【伪装者】(2015)_41集全_4K中字【43G】
|
||||
swz3sf43fwo?password=8888 国产剧|【4K修复】【西游记+续集】【218G】
|
||||
swz3sfv3fwo?password=8888 国产剧|【猎罪图鉴】(2022)全20集_4K中字
|
||||
swz3slh3fwo?password=8888 国产剧|【长歌行】(2021)_49集全_1080P中字【66G】
|
||||
swz3s4x3fwo?password=8888 国产剧|【爱情公寓】1-5季_全集+番外篇+大电影_4K中字【203G】
|
||||
swz3s403fwo?password=8888 国产剧|【小欢喜】(2019)_49集全_4K中字【75G】
|
||||
swz3skd3fwo?password=8888 国产剧|【重启之极海听雷】第一季_(2020)_4K中字【172G】
|
||||
swz3skm3fwo?password=8888 国产剧|【重启之极海听雷】第二季_(2020)_4K中字【42G】
|
||||
swz3sdn3fwo?password=8888 国产剧|【摩天大楼】(2020)_16集全_4K中字【62G】
|
||||
swz3sde3fwo?password=8888 国产剧|【无证之罪】(2017)_12集全_4K中字【17G】
|
||||
swz3smy3fwo?password=8888 国产剧|【如懿传】(2018)_87集全_1080P中字【194G】
|
||||
swz3sai3fwo?password=8888 国产剧|【步步惊心】(2011)_35集全_4K中字【101G】
|
||||
swz3sag3fwo?password=8888 国产剧|【我是余欢水】(2020)_12集全_4K中字【77G】
|
||||
swz3spn3fwo?password=8888 国产剧|【去有风的地方】(2023)_40集全_4K中字【101G】
|
||||
swz3lbp3fwo?password=8888 国产剧|【梦中的那片海】(2023)_38集全_4K中字【24G】
|
||||
swz3lob3fwo?password=8888 国产剧|【欢乐颂】1-4季_1080P中字【156G】
|
||||
swz3lok3fwo?password=8888 国产剧|【棋魂】(2020)_36集全_4K中字【210G】
|
||||
swz3qos3fwo?password=8888 国产剧|【叛逆者】(2021)_43集全_4K中字【49G】
|
||||
swz3qas3fwo?password=8888 国产剧|【以家人之名】(2020)_40集全_1080P中字【47G】
|
||||
swz3bge3fwo?password=8888 国产剧|【唐人街探案】(2020)_12集全_4K中字【18G】
|
||||
swz6syq3fwo?password=8888 国产剧|【警察荣誉】38集全_4K中字【57G】
|
||||
swz6sk93fwo?password=8888 国产剧|【三十而已】(2020)_43集全_1080P中字【41G】
|
||||
swz6sdq3fwo?password=8888 国产剧|【玉骨遥】40集全_4K中字【60G】
|
||||
swz6sd73fwo?password=8888 国产剧|【爱很美味】(2021)_20集全_4K中字【8.6G】
|
||||
swz6smb3fwo?password=8888 国产剧|【司藤】30集全_4K中字【74G】
|
||||
swz6smv3fwo?password=8888 国产剧|【赘婿】36集全_4K中字【54G】
|
||||
swz6s5n3fwo?password=8888 国产剧|【终极笔记】(2020)_36集全_4K中字【178G】
|
||||
swz6s5l3fwo?password=8888 国产剧|【人世间】(2022)_58集全_4K中字【63G】
|
||||
swz6s5e3fwo?password=8888 国产剧|【周生如故】(2021)_24集全_1080P中字【15G】
|
||||
swz6s2r3fwo?password=8888 国产剧|【战长沙】(2014)_32集全_1080P中字【111G】
|
||||
swz6lz23fwo?password=8888 国产剧|【你好,旧时光】(2017)_30集全_4K中字【80G】
|
||||
swz6lhb3fwo?password=8888 国产剧|【风起洛阳】(2021)_39集全_4K中字【43G】
|
||||
swz6lfp3fwo?password=8888 国产剧|【潜伏】(2008)_30集全_4K中字【41G】
|
||||
swz6ls73fwo?password=8888 国产剧|【东宫】(2019)_52集全_4K中字【119G】
|
||||
swz6lsc3fwo?password=8888 国产剧|【幸福到万家】(2022)_40集全_4K中字【64G】
|
||||
swz6lql3fwo?password=8888 国产剧|【红楼梦】(1987)_36集全_4K中字【42G】
|
||||
swz6lqe3fwo?password=8888 国产剧|【还珠格格】1-3季全_1080P中字【141G】
|
||||
swz6l753fwo?password=8888 国产剧|【鬼吹灯之精绝古城】(2016)_21集全_1080P中字【16G】
|
||||
swz6liq3fwo?password=8888 国产剧|【亮剑】(2005)_30集全_4K中字【35G】
|
||||
swz6lic3fwo?password=8888 国产剧|【大宋少年志】1-2季全_4K中字【139G】
|
||||
swz6l453fwo?password=8888 国产剧|【唐朝诡事录】(2022)_36集全_4K中字【51G】
|
||||
swz6l483fwo?password=8888 国产剧|【卿卿日常】(2022)_40集全_4K中字【79G】
|
||||
swz6lkf3fwo?password=8888 国产剧|【微微一笑很倾城】(2016)_30集全_1080P中字【22G】
|
||||
swz6lmu3fwo?password=8888 国产剧|【爱情公寓】1-5季+番外1-3季_4K中字【200G】
|
||||
swz6l5a3fwo?password=8888 国产剧|【宸汐缘】(2019)_60集全_4K中字【96G】
|
||||
swz6lve3fwo?password=8888 国产剧|【大明王朝1566】(2007)_46集全_1080P中字【30G】
|
||||
swz6lew3fwo?password=8888 国产剧|【河神】1-2季全_4K中字【51G】
|
||||
swz6lar3fwo?password=8888 国产剧|【大江大河】(2018)_47集全_4K中字【52G】
|
||||
swz6lpo3fwo?password=8888 国产剧|【女心理师】(2021)_40集全_4K中字【68G】
|
||||
swz6lus3fwo?password=8888 国产剧|【大明王朝1566】(2007)_46集全_4K中字【250G】
|
||||
swz6b2y3fwo?password=8888 国产剧|【我在他乡挺好的】(2021)_12集全_1080P中字【30G】
|
||||
swz6o6q3fwo?password=8888 国产剧|【余罪】1-2季全_1080P中字【19.5G】
|
||||
swz6ooq3fwo?password=8888 国产剧|【士兵突击】(2006)_30集全_4K中字【45G】
|
||||
swz6oyp3fwo?password=8888 国产剧|【天盛长歌】(2018)_70集全_4K中字【132G】
|
||||
swz6k9q3fwo?password=8888 国产剧|【与君初相识·恰似故人归】(2022)_42集全_4K中字【101G】
|
||||
swz6doo3fwo?password=8888 国产剧|【谁是凶手】(2021)_16集全_4K中字【18G】
|
||||
swz3qvq3fwo?password=8888 美剧|_冰与火之歌:权力的游戏【1-8季全1.31TB】
|
||||
sw6uoem3fwo?password=8888 美剧|【冰与火之歌:权力的游戏】1-8季全_4K中字杜比视界【1.85T】
|
||||
sw6u7iy3fwo?password=8888 美剧|【神探夏洛克】1-4季全_1080P中字【78G】
|
||||
sw6uotq3fwo?password=8888 美剧|【绝命毒师】1-5季全_4K中字【209G】
|
||||
sw6u7n93fwo?password=8888 美剧|【怪奇物语】1-4季_4K中字【255G】
|
||||
sw6u7y83fwo?password=8888 美剧|【老友记】1-10季全_1080P中字【209G】
|
||||
sw6u75u3fwo?password=8888 美剧|【生活大爆炸】1-12季全_1080P中字【258G】
|
||||
sw6u7es3fwo?password=8888 美剧|【行尸走肉】1-11季全_1080P中字【585G】
|
||||
swztlnh33xj?password=f3h5 美剧|【行尸走肉】1-11季全_REMUX【1.27TB】
|
||||
sw6u7tp3fwo?password=8888 美剧|【切尔诺贝利】5集全_1080P中字【13G】
|
||||
sw6u78c3fwo?password=8888 美剧|【黑镜】1-6季全_4K中字【144G】
|
||||
sw6u79h3fwo?password=8888 美剧|【后翼弃兵】(2020)_7集全_4K中字【57G】
|
||||
sw6uify3fwo?password=8888 美剧|【越狱】1-5季全+特别篇_1080P中字【182G】
|
||||
sw6u4vy3fwo?password=8888 美剧|【真探】1-3季全_1080P中字【29G】
|
||||
sw6u4j73fwo?password=8888 美剧|【嗜血法医】1-9季全_1080P中字【246G】
|
||||
sw6u4963fwo?password=8888 美剧|【黑袍纠察队】1-3季_4K中字【182G】
|
||||
sw6u41k3fwo?password=8888 美剧|【风骚律师】1-6季全_4K中字【275G】
|
||||
sw6u4c93fwo?password=8888 美剧|【纸牌屋】1-6季全_4K中字【284G】
|
||||
sw6u42n3fwo?password=8888 美剧|【浴血黑帮】1-6季全_4K中字【162G】
|
||||
sw6u42v3fwo?password=8888 美剧|【曼达洛人】1-3集全_4K中字【136G】
|
||||
swzjpfq3wrb?password=s8f0 美剧|【迷失】1-6季全_1080P中字【108G】
|
||||
sw6uakw3fwo?password=8888 美剧|【猎魔人】1-3季_4K中字【139G】
|
||||
sw6uakm3fwo?password=8888 美剧|【性爱自修室】1-4季_4K中字【193G】
|
||||
sw6uadf3fwo?password=8888 美剧|【最后生还者】第一季_4K中字【67G】
|
||||
sw6uadk3fwo?password=8888 美剧|_【致命女人】1-2季_1080P中字【29G】
|
||||
sw6uaji3fwo?password=8888 美剧|【西部世界】1-4季_4K中字【445G】
|
||||
sw6ua2t3fwo?password=8888 美剧|【办公室】1-9季全_1080P中字【200G】
|
||||
sw6ug3k3fwo?password=8888 美剧|【老爸老妈的浪漫史】1-9季全_1080P中字【273G】
|
||||
swzj8g33wrb?password=z6d8 美剧|【兄弟连】10集全_1080P中字【177.6G】
|
||||
swzj8au3wrb?password=i050 美剧|【太平洋战争】10集全_1080P中字【122G】
|
||||
sw6ugsb3fwo?password=8888 美剧|【维京传奇】1-6季全_1080P中字【137G】
|
||||
sw6ugln3fwo?password=8888 美剧|【旺达幻视】9集全_4K中字【46G】
|
||||
sw6ug5r3fwo?password=8888 美剧|【摩登家庭】1-11季_1080P中字【298G】
|
||||
sw6up8u3fwo?password=8888 美剧|【纸钞屋】1-5季全_1080P中字【46G】
|
||||
sw6upun3fwo?password=8888 美剧|【毒枭】1-3季全_4K中字【180G】
|
||||
sw6utzo3fwo?password=8888 美剧|【去他的世界】1-2季_4K中字【35G】
|
||||
sw6uty43fwo?password=8888 美剧|【暗黑】1-3季全_4K中字【69G】
|
||||
sw6uttz3fwo?password=8888 美剧|【夜魔侠】1-3季全_4K中字【204G】
|
||||
sw6ujls3fwo?password=8888 美剧|【洛基】第一季_4K中字【22G】
|
||||
sw6ujoa3fwo?password=8888 美剧|【星期三】第一季_4K中字【33G】
|
||||
sw6uxg53fwo?password=8888 美剧|【豪斯医生】1-8季全_1080P中字【222G】
|
||||
sw6u0df3fwo?password=8888 美剧|【迷离时空(原版)】1-5季全_1080P中字【308G】
|
||||
sw6u0m73fwo?password=8888 美剧|【邪恶力量】1-15季全_1080P中字【1006G】
|
||||
sw6u0mu3fwo?password=8888 美剧|【冰血暴】1-4季全_1080P中字【65G】
|
||||
sw6u0v73fwo?password=8888 美剧|【龙之家族】第一季_4K中字【25G】
|
||||
sw6u0gx3fwo?password=8888 美剧|【美国恐怖故事】1-11季_1080P中字【306G】
|
||||
sw6u0tv3fwo?password=8888 美剧|【黑客军团】1-4季全_1080P中字【32G】
|
||||
sw6u0xb3fwo?password=8888 美剧|【国土安全】1-8季全_1080P中字【132G】
|
||||
sw6uup63fwo?password=8888 美剧|【唐顿庄园】1-6季全_1080P中字【82G】
|
||||
sw6uup03fwo?password=8888 美剧|【指环王:力量之戒】第一季[全8集]4K中字【74G】
|
||||
sw6uu1g3fwo?password=8888 美剧|【心灵猎人】1-2季_4K中字【119G】
|
||||
sw6uuc23fwo?password=8888 美剧|【伦敦生活】1-2季全_4K中字【28G】
|
||||
swz36ki3fwo?password=8888 美剧|【破产姐妹】1-6季全_1080P中字【87G】
|
||||
swz36mo3fwo?password=8888 美剧|【月光骑士】6集全_4K中字【32G】
|
||||
swz36vd3fwo?password=8888 美剧|【路西法】1-6季全_1080P中字【112G】
|
||||
swz36e73fwo?password=8888 美剧|【使女的故事】1-5季全_1080P中字【62G】
|
||||
swz36ah3fwo?password=8888 美剧|【黑钱胜地】1-4季_4K中字【200G】
|
||||
swz3h4i3fwo?password=8888 美剧|【十三个原因】1-4季全_4K中字【523G】
|
||||
swz3hyk3fwo?password=8888 美剧|【大小谎言】1-2季全_1080P中字【21G】
|
||||
swz3hmf3fwo?password=8888 美剧|【汉尼拔】1-3季全_1080P中字【59G】
|
||||
swz3h543fwo?password=8888 美剧|【宋飞正传】1-9季全_4K中字【488G】
|
||||
swz3hed3fwo?password=8888 美剧|【亢奋】1-2季_4K中字【205G】
|
||||
swz3hak3fwo?password=8888 美剧|【无耻之徒】1-11季全_1080P中字【201G】
|
||||
swz3hg43fwo?password=8888 美剧|【东城梦魇】(2021)_7集全_1080P中字【11G】
|
||||
swz3swd3fwo?password=8888 美剧|【鬼庄园】(2020)_9集全_4K中字【23G】
|
||||
swz3sw73fwo?password=8888 美剧|【鬼入侵】(2018)_10集全_4K中字【20G】
|
||||
swz3sfn3fwo?password=8888 美剧|【足球教练】1-3季_1080P中字【34G】
|
||||
swz3sbi3fwo?password=8888 美剧|【你】1-4季_1080P中字【118G】
|
||||
swz3s4m3fwo?password=8888 美剧|【我们这一天】1-6季_1080P中字【101G】
|
||||
swz3sv73fwo?password=8888 美剧|【混乱之子】1-7季_1080P中字【172G】
|
||||
swz3svt3fwo?password=8888 美剧|【猎鹰与冬兵】(2021)_6集全_4K中字【21G】
|
||||
swz3se13fwo?password=8888 美剧|【废柴联盟】1-6季_4K中字【260G】
|
||||
swz3lbz3fwo?password=8888 美剧|【绯闻女孩】1-6季_1080P中字【109G】
|
||||
swz3lo83fwo?password=8888 美剧|【疑犯追踪】1-5季_1080P中字【145G】
|
||||
swz3lia3fwo?password=8888 美剧|【超能英雄】1-4季_1080P中字【115G】
|
||||
swz3qb83fwo?password=8888 美剧|【犯罪心理】1-16季全_1080P中字【395G】
|
||||
swz3q5s3fwo?password=8888 美剧|【广告狂人】1-7季全_1080P中字【373G】
|
||||
swz3qek3fwo?password=8888 美剧|【伞学院】1-3季_4K中字【201G】
|
||||
swz3qe03fwo?password=8888 美剧|【人生切割术】第一季_(2022)_4K中字【75G】
|
||||
swz3qgz3fwo?password=8888 美剧|【危机边缘】1-5季_1080P中字【90G】
|
||||
swz3qgq3fwo?password=8888 美剧|【萤火虫】(2002)_14集全_1080P中字【37G】
|
||||
swz3ba63fwo?password=8888 美剧|【斯巴达克斯】1-4季_1080P中字【491G】
|
||||
swz3bxo3fwo?password=8888 美剧|【哥谭】1-5季_1080P蓝光原盘中字【720G】
|
||||
swz6zsv3fwo?password=8888 美剧|【黑道家族】1-6季全_1080P中字【169G】
|
||||
swz6zlm3fwo?password=8888 美剧|【闪电侠】1-9季全_1080P中字【180G】
|
||||
swz6wjj3fwo?password=8888 美剧|【实习医生格蕾】1-19季全_1080P中字【1.03T】
|
||||
swz6fff3fwo?password=8888 美剧|【女子监狱】1-7季全_1080P中字【188G】
|
||||
swz6ff83fwo?password=8888 美剧|【杀死伊芙】1-4季_1080P中字【23G】
|
||||
swz6fs73fwo?password=8888 美剧|【神盾局特工】1-7季_1080P中字【124G】
|
||||
swz6fld3fwo?password=8888 美剧|【火线】1-5季全_1080P中字【61G】
|
||||
swz6s4a3fwo?password=8888 美剧|【继承之战】1-4季_4K外挂中字【368G】
|
||||
swz6sy63fwo?password=8888 美剧|【公园与游憩】1-7季全_1080P中字【255G】
|
||||
swz6skk3fwo?password=8888 美剧|【真爱如血】1-7季全_1080P中字【142G】
|
||||
swz6sd63fwo?password=8888 美剧|【超感猎杀】1-2季_4K中字【126G】
|
||||
swz6sdr3fwo?password=8888 美剧|【白莲花度假村】1-2季_1080P中字【48G】
|
||||
swz6s553fwo?password=8888 美剧|【千谎百计】1-3季全_1080P中字【125G】
|
||||
swz6lny3fwo?password=8888 美剧|【神秘博士】1-13季全_1080P中字【324G】
|
||||
swz6lww3fwo?password=8888 美剧|【X档案】1-11季+电影版两部_1080P中字【143G】
|
||||
swz6lff3fwo?password=8888 美剧|【鹰眼】(2021)_6集全_4K中字【43G】
|
||||
swz6lbk3fwo?password=8888 美剧|【IT狂人】1-4季全_标清中字【20G】
|
||||
swz6lb03fwo?password=8888 美剧|【无人生还】(2015)_3集全_1080P中字【14G】
|
||||
swz6l7f3fwo?password=8888 美剧|【童话镇】1-7季_720P中字【72G】
|
||||
swz6lyi3fwo?password=8888 美剧|【欧比旺】(2022)_6集全_4K中字【36G】
|
||||
swz6lmm3fwo?password=8888 美剧|【黄石】1-5季_4K中字【更新中】
|
||||
swz6lee3fwo?password=8888 美剧|【双峰】1-3季_1080P中字【106G】
|
||||
swz6lgx3fwo?password=8888 美剧|【杰西卡·琼斯】1-3季_1080P中字【139G】
|
||||
swz6lpz3fwo?password=8888 美剧|【怒呛人生】(2023)_10集全_4K中字【30G】
|
||||
swz6lp23fwo?password=8888 美剧|【绝望主妇】1-8季_720P中字【71G】
|
||||
swz6ltu3fwo?password=8888 美剧|【绝望主妇】1-8季_1080P中字【300G】
|
||||
swz6l033fwo?password=8888 美剧|【地球百子】1-7季全_1080P中字【206G】
|
||||
swz6b1z3fwo?password=8888 美剧|【杰茜驾到】1-7季全_1080P中字【194G】
|
||||
swz6b1r3fwo?password=8888 美剧|【正常人】(2020)_12集全_1080P中字【9.23G】
|
||||
swz6bcn3fwo?password=8888 美剧|【大西洋帝国】1-5季_1080P中字【122G】
|
||||
swz6onx3fwo?password=8888 美剧|【小谢尔顿】1-6季_1080P中字【85G】
|
||||
swz6o643fwo?password=8888 美剧|【女浩克】(2022)_9集全_4K中字【40G】
|
||||
swz6oo83fwo?password=8888 美剧|【傲慢与偏见】(1995)_6集全_1080P外挂字幕【78G】
|
||||
swz6o7w3fwo?password=8888 美剧|【贴身保镖】第一季_1080P中字【7G】
|
||||
swz6o453fwo?password=8888 美剧|【反恐24小时】1-9季全_1080P中字【399G】
|
||||
swz6oyi3fwo?password=8888 美剧|【良医】1-6季_1080P中字【64G】
|
||||
swz6k1k3fwo?password=8888 美剧|【硅谷】1-6季_1080P中字【39G】
|
||||
swz6kcq3fwo?password=8888 美剧|【副本】1-2季_4K中字【127G】
|
||||
swz6k0s3fwo?password=8888 美剧|【罪夜之奔】(2016)_8集全_1080P中字【5G】
|
||||
swz6kuu3fwo?password=8888 美剧|【艾米丽在巴黎】1-3季_1080P中字【105G】
|
||||
swz6dl23fwo?password=8888 美剧|【罗马】1-2季_1080P中字【60G】
|
||||
swz6d773fwo?password=8888 美剧|【好兆头】1-2季_4K中字【67G】
|
||||
swz6ew93fwo?password=8888 美剧|【黑色孤儿】1-5季_1080P中字【95G】
|
||||
swz6ebs3fwo?password=8888 美剧|【叶卡捷琳娜大帝】1-3季_1080P中字
|
||||
sw6u7mw3fwo?password=8888 韩剧|【阿拉姆恩之剑:阿斯达年代记】(2023)_1080P韩语中字_李准基_/_张东健_/_申世景
|
||||
sw62qsa3fwo?password=8888 韩剧|【鱿鱼游戏】第一季(2021)_4K韩语中字_李政宰_/_朴海秀_/_魏嘏隽
|
||||
sw62qq83fwo?password=8888 韩剧|【请回答1988】(2015)_20集全_4K韩语中字_成东日_/_李一花_/_罗美兰
|
||||
sw62qbl3fwo?password=8888 韩剧|【黑暗荣耀】第一季_(2022)_4K韩语中字_宋慧乔_/_李到晛_/_林智妍
|
||||
sw62q7z3fwo?password=8888 韩剧|【黑暗荣耀】第二季_(2023)_1080P韩语中字_宋慧乔_/_李到晛_/_林智妍
|
||||
sw62q773fwo?password=8888 韩剧|【孤单又灿烂的神:鬼怪】(2016)_16集全_4K韩语中字_孔刘_/_金高银_/_李栋旭
|
||||
sw62q723fwo?password=8888 韩剧|【来自星星的你】(2013)_21集全_1080P韩语中字_金秀贤_/_全智贤_/_朴海镇
|
||||
sw62qiy3fwo?password=8888 韩剧|【信号】(2016)_16集全_1080P韩语中字_李帝勋_/_赵震雄_/_金惠秀
|
||||
sw62qie3fwo?password=8888 韩剧|【太阳的后裔】(2016)_16集全_1080P韩语中字_宋慧乔_/_宋仲基_/_金智媛
|
||||
sw62qi23fwo?password=8888 韩剧|【爱的迫降】(2019)_16集全_4K韩语中字_玄彬_/_孙艺珍_/_徐智慧
|
||||
sw62q4j3fwo?password=8888 韩剧|【机智医生生活】第一季_(2020)_1080P韩语中字_曹政奭_/_柳演锡_/_郑敬淏
|
||||
sw62q4c3fwo?password=8888 韩剧|【机智医生生活】第二季_(2021)_1080P韩语中字_曹政奭_/_柳演锡_/_郑敬淏
|
||||
sw62qyq3fwo?password=8888 韩剧|【W-两个世界】(2016)_16集全_1080P韩语中字_李钟硕_/_韩孝周_/_郑幼贞
|
||||
sw62qyg3fwo?password=8888 韩剧|【机智牢房生活】(2017)_16集全_1080P韩剧|中字_朴海秀_/_郑敬淏_/_郑秀晶
|
||||
sw62qkz3fwo?password=8888 韩剧|【继承者们】(2013)_20集全_1080P韩语中字_李敏镐_/_朴信惠_/_金宇彬
|
||||
sw62qkg3fwo?password=8888 韩剧|【当你沉睡时】(2017)_32集全_1080P韩语中字_李钟硕_/_裴秀智_/_李相烨
|
||||
sw62qk93fwo?password=8888 韩剧|【窥探】(2021)_20集全_1080P韩语中字_李昇基_/_李熙俊_/_朴柱炫
|
||||
sw62qk13fwo?password=8888 韩剧|【举重妖精金福珠】(2016)_16集全_1080P韩语中字_李圣经_/_南柱赫_/_景收真
|
||||
sw62qdh3fwo?password=8888 韩剧|【甜蜜家园】(2020)_10集全_4K韩语中字_宋江_/_李施吟_/_李到晛
|
||||
sw62qdv3fwo?password=8888 韩剧|【非常律师禹英禑】(2022)_16集全_1080P韩语中字_朴恩斌_/_姜泰伍_/_姜其永
|
||||
sw62qmf3fwo?password=8888 韩剧|【那年,我们的夏天】(2021)_16集全_1080P韩语中字_崔宇植_/_金多美_/_金圣喆
|
||||
sw62qma3fwo?password=8888 韩剧|【欢迎来到王之国】(2023)_16集全_1080P韩语中字_李俊昊_/_林允儿_/_高媛熙
|
||||
sw62q5z3fwo?password=8888 韩剧|【治愈者】(2014)_20集全_1080P韩语中字_池昌旭_/_朴敏英_/_刘智泰
|
||||
sw62q5g3fwo?password=8888 韩剧|【今生是第一次】(2017)_16集全_1080P韩语中字_李民基_/_郑素敏_/_朴炳垠
|
||||
sw62qvl3fwo?password=8888 韩剧|【没关系,是爱情啊】(2014)_16集全_1080P韩语中字_赵寅成_/_孔晓振_/_成东日
|
||||
sw62qvg3fwo?password=8888 韩剧|【请回答1997】(2012)_16集全_1080P韩语中字_郑恩地_/_徐仁国_/_申素率
|
||||
sw62qan3fwo?password=8888 韩剧|【蓝色大海的传说】(2016)_20集全_720P韩语中字_全智贤_/_李敏镐_/_文素丽
|
||||
sw62qa43fwo?password=8888 韩剧|【僵尸校园】(2022)_12集全_4K韩语中字_尹灿荣_/_朴持厚_/_曹怡贤
|
||||
sw62qax3fwo?password=8888 韩剧|【社内相亲】(2022)_12集全_1080P韩语中字_安孝燮_/_金世正_/_金旻奎
|
||||
sw62qg93fwo?password=8888 韩剧|【我的解放日志】(2022)_16集全_4K韩语中字_李民基_/_金智媛_/_孙锡久
|
||||
sw62qpn3fwo?password=8888 韩剧|【365:逆转命运的1年】(2020)_24集全_1080P韩语中字_李浚赫_/_南志铉_/_金智秀
|
||||
sw62qpd3fwo?password=8888 韩剧|【财阀家的小儿子】(2022)_16集全_1080P韩语中字_宋仲基_/_李星民_/_申铉彬
|
||||
sw62q8x3fwo?password=8888 韩剧|【大力女子都奉顺】(2017)_16集全_1080P韩语中字_朴宝英_/_朴炯植_/_金志洙
|
||||
sw62bog3fwo?password=8888 韩剧|【城市猎人】(2011)_20集全_720P韩语中字_李敏镐_/_朴敏英_/_李浚赫
|
||||
sw62big3fwo?password=8888 韩剧|【哦我的鬼神大人】(2015)_16集全_1080P韩语中字_朴宝英_/_曹政奭_/_金瑟祺
|
||||
sw62bi23fwo?password=8888 韩剧|【二十五,二十一】(2022)_16集全_1080P韩语中字_金泰梨_/_南柱赫_/_金知妍
|
||||
sw62b4d3fwo?password=8888 韩剧|【超异能族】(2023)_20集全_4K韩语中字_柳承龙_/_韩孝周_/_赵寅成
|
||||
sw62b4j3fwo?password=8888 韩剧|【海岸村恰恰恰】(2021)_16集全_1080P韩语中字_申敏儿_/_金宣虎_/_李相二
|
||||
sw62byh3fwo?password=8888 韩剧|【D.P:逃兵追缉令】_第一季_(2021)_4K韩语中字_丁海寅_/_具教焕_/_金成畇_
|
||||
sw62bmt3fwo?password=8888 韩剧|【D.P:逃兵追缉令】_第二季_(2023)_4K韩语中字_丁海寅_/_具教焕_/_金成畇
|
||||
sw62b533fwo?password=8888 韩剧|【仁显王后的男人】(2012)_16集全_1080P韩语中字_刘寅娜_/_池贤宇_/_金镇宇
|
||||
sw62b5h3fwo?password=8888 韩剧|【少年法庭】(2022)_10集全_4K韩语中字_金惠秀_/_金武烈_/_李星民
|
||||
sw62bvt3fwo?password=8888 韩剧|【杀了我治愈我】(2015)_20集全_1080P韩语中字_池晟_/_黄正音_/_朴叙俊
|
||||
sw62beq3fwo?password=8888 韩剧|【未生】(2014)_20集全_1080P韩语中字_任时完_/_李星民_/_姜素拉
|
||||
sw62bep3fwo?password=8888 韩剧|【内在美】(2018)_16集全_1080P韩语中字_徐玄振_/_李民基_/_李多熙
|
||||
sw62bai3fwo?password=8888 韩剧|【语义错误】(2022)_8集全_1080P韩语中字_朴栖含_/_朴宰灿_/_宋智午
|
||||
sw62bgh3fwo?password=8888 韩剧|【我的ID是江南美人】(2018)_16集全_1080P韩语中字_林秀香_/_车银优_/_赵宇丽
|
||||
sw62bgf3fwo?password=8888 韩剧|【偶然发现的一天】(2019)_32集全_1080P韩语中字_金惠奫_/_金路云_/_李宰旭
|
||||
sw62bga3fwo?password=8888 韩剧|【国王:永远的君主】(2020)_16集全_1080P韩语中字_李敏镐_/_金高银_/_禹棹焕
|
||||
sw62bg03fwo?password=8888 韩剧|【请回答1994】(2013)_21集全_1080P韩语中字_高雅拉_/_柳演锡_/_正宇
|
||||
sw62bpy3fwo?password=8888 韩剧|【Move_to_Heaven:我是遗物整理师】(2021)_10集全_4K韩语中字_李帝勋_/_汤峻相_/_洪承熙
|
||||
sw62owv3fwo?password=8888 韩剧|【夫妻的世界】(2020)_16集全_1080P韩语中字_金喜爱_/_朴解浚_/_韩韶禧
|
||||
sw62ofn3fwo?password=8888 韩剧|【安娜】(2022)_6集全_1080P韩语中字_裴秀智_/_郑恩彩_/_金俊翰
|
||||
sw62ofi3fwo?password=8888 韩剧|【火星生活】(2018)_16集全_1080P韩语中字_郑敬淏_/_朴成雄_/_高我星
|
||||
sw62ofe3fwo?password=8888 韩剧|【春夜】(2019)_16集全_4K韩语中字_韩志旼_/_丁海寅_/_金俊翰
|
||||
sw62osq3fwo?password=8888 韩剧|【酒鬼都市女人们】(2021)_12集全_1080P韩语中字_李先彬_/_韩善花_/_郑恩地
|
||||
sw62osg3fwo?password=8888 韩剧|【棒球大联盟】(2019)_16集全_1080P韩语中字_南宫珉_/_朴恩斌_/_吴正世
|
||||
sw62oq13fwo?password=8888 韩剧|【囚犯医生】(2019)_16集全_1080P韩语中字_南宫珉_/_权娜拉_/_金炳哲
|
||||
sw62ob33fwo?password=8888 韩剧|【迷雾】(2018)_16集全_1080P韩语中字_金南珠_/_池珍熙_/_高俊
|
||||
sw62obv3fwo?password=8888 韩剧|【我的名字】(2021)_8集全_4K韩语中字_韩韶禧_/_朴熹洵_/_安普贤
|
||||
sw62oo33fwo?password=8888 韩剧|【咖啡王子1号店】(2007)_17集全_1080P韩语中字_尹恩惠_/_孔刘_/_李善均
|
||||
sw62ook3fwo?password=8888 韩剧|【黑话律师】(2022)_16集全_1080P韩语中字_李钟硕_/_林允儿_/_金周宪
|
||||
sw62oor3fwo?password=8888 韩剧|【耀眼】(2019)_12集全_1080P韩语中字_金惠子_/_韩志旼_/_南柱赫
|
||||
sw62o7s3fwo?password=8888 韩剧|【地狱公使】(2021)_6集全_4K韩语中字_刘亚仁_/_金贤珠_/_朴正民
|
||||
sw62o7r3fwo?password=8888 韩剧|【请输入搜索词:WWW】(2019)_16集全_1080P韩语中字_林秀晶_/_张基龙_/_李多熙
|
||||
sw62oid3fwo?password=8888 韩剧|【阿尔罕布拉宫的回忆】(2018)_16集全_1080P韩语中字_玄彬_/_朴信惠_/_朴勋_
|
||||
sw62oyx3fwo?password=8888 韩剧|【她很漂亮】(2015)_16集全_1080P韩语中字_黄正音_/_朴叙俊_/_高俊熙
|
||||
sw62oks3fwo?password=8888 韩剧|【我亲爱的朋友们】(2016)_16集全_1080P韩语中字_高贤贞_/_赵寅成_/_金惠子
|
||||
sw62okn3fwo?password=8888 韩剧|【Live】(2018)_18集全_720P韩语中字_郑有美_/_李光洙_/_裴晟祐
|
||||
sw62ok43fwo?password=8888 韩剧|【制作人】(2015)_12集全_1080P韩语中字_金秀贤_/_车太贤_/_孔晓振
|
||||
sw62odw3fwo?password=8888 韩剧|【她的私生活】(2019)_16集全_1080P韩语中字_朴敏英_/_金材昱_/_安普贤
|
||||
sw62odl3fwo?password=8888 韩剧|【大长今】(2003)_54集全_1080P国语韩语多音轨中字_李英爱_/_池珍熙_/_任豪
|
||||
sw62odr3fwo?password=8888 韩剧|【无法抗拒的他】(2021)_10集全_1080P韩语中字_宋江_/_韩韶禧_/_蔡钟协
|
||||
sw62omq3fwo?password=8888 韩剧|【加油吧威基基】(2018)_20集全_1080P韩语中字_金正贤_/_李伊庚_/_孙承源
|
||||
sw62omv3fwo?password=8888 韩剧|【绅士的品格】(2012)_20集全_1080P韩语中字_张东健_/_金荷娜_/_金民钟
|
||||
sw62om93fwo?password=8888 韩剧|【九回时间旅行】(2013)_20集全_1080P韩语中字_李阵郁_/_赵胤熙_/_全卢民
|
||||
sw6uayo3fwo?password=8888 日剧|【非自然死亡】全10集_1080P中字【13G】
|
||||
swz3hvx3fwo?password=8888 日剧|【胜者即是正义】(2012)_11集全_1080P中字【13G】
|
||||
swz3hv03fwo?password=8888 日剧|【胜者即是正义2】(2013)_10集全_1080P中字【13G】
|
||||
swz3l4f3fwo?password=8888 日剧|【弥留之国的爱丽丝】1-2季_4K中字【100G】
|
||||
swz6syr3fwo?password=8888 日剧|【半泽直树】1-2季全_1080P中字【38G】
|
||||
swz6sdf3fwo?password=8888 日剧|【我是大哥大】10集全_1080P中字【38G】
|
||||
swz6s5p3fwo?password=8888 日剧|【重启人生】10集全_1080P中字【11G】
|
||||
swz6s513fwo?password=8888 日剧|【轮到你了】20集全_1080P中字【20G】
|
||||
swz6o4e3fwo?password=8888 日剧|【四重奏】(2017)_10集全_1080P中字【16G】
|
||||
swz6kjm3fwo?password=8888 日剧|【我的恐怖妻子】(2016)_9集全_1080P中字【13G】
|
||||
swz6dk13fwo?password=8888 日剧|【凪的新生活】(2019)_10集全_1080P中字【9G】
|
||||
sw6uis63fwo?password=8888 台剧|【想见你】(2019)_13集全_4K中字【36G】
|
||||
sw6uj4h3fwo?password=8888 台剧|【我们与恶的距离】(2019)_10集全_4K中字【88G】
|
||||
swz6lk43fwo?password=8888 台剧|【我可能不会爱你】(2011)_23集全_1080P中字【17G】
|
||||
swz6kcg3fwo?password=8888 台剧|【俗女养成记】1-2季_4K中字【74G】
|
||||
swnvgvv3z29?password=h6b2 纪录片|中国通史全100集_64.07G
|
||||
sw682pw3nyo?password=s8c8 纪录片|国外纪录片_1.86T
|
||||
sw6xm3j3w7v?password=1111 纪录片|百家讲坛全集_2.21T
|
||||
swz6smc3fwo?password=8888 纪录片|【地球脉动】1-3季_1080P中字【436G】
|
||||
sw68md23w8m?password=q353 纪录片|盗火纪录片_9.32T
|
||||
swz6fb03fwo?password=8888 纪录片|一级方程式:疾速争胜_(2019)
|
||||
swz6fbu3fwo?password=8888 纪录片|七个世界,一个星球_(2019)
|
||||
swz6fo33fwo?password=8888 纪录片|72种危险动物:拉丁美洲_(2017)
|
||||
swz6fo43fwo?password=8888 纪录片|72种危险动物:亚洲篇_(2018)
|
||||
swz6foy3fwo?password=8888 纪录片|2022_(2022)
|
||||
swz6fok3fwo?password=8888 纪录片|阿波罗11号_(2019)
|
||||
swz6fod3fwo?password=8888 纪录片|阿莱克斯·施瓦泽:为真相而跑_(2023)
|
||||
swz6fov3fwo?password=8888 纪录片|埃及艳后_(2023)
|
||||
swz6foe3fwo?password=8888 纪录片|艾德·希兰:成名之路_(2023)
|
||||
swz6foa3fwo?password=8888 纪录片|爱犬情深_(2018)
|
||||
swz6fog3fwo?password=8888 纪录片|摆脱贫困_(2021)
|
||||
swz6fo83fwo?password=8888 纪录片|北回归线_(2010)
|
||||
swz6foj3fwo?password=8888 纪录片|北极奇观_(2014)
|
||||
swz6fo93fwo?password=8888 纪录片|北极熊_(2022)
|
||||
swz6fo13fwo?password=8888 纪录片|贝尔蒂·格雷戈里:与动物零距离_(2023)
|
||||
swz6fo03fwo?password=8888 纪录片|奔向月球_(2015)
|
||||
swz6f733fwo?password=8888 纪录片|变态者意识形态指南_(2012)
|
||||
swz6f7n3fwo?password=8888 纪录片|冰冻星球2_(2022)
|
||||
swz6f7z3fwo?password=8888 纪录片|冰河时代的巨人_(2013)
|
||||
swz6f7w3fwo?password=8888 纪录片|冰雪之巅_(2018)
|
||||
swz6f7s3fwo?password=8888 纪录片|博茨瓦纳惊人的野生动物_(2020)
|
||||
swz6f7q3fwo?password=8888 纪录片|不破不立_(2021)
|
||||
swz6f7o3fwo?password=8888 纪录片|不止考古·我与三星堆_(2022)
|
||||
swz6f7i3fwo?password=8888 纪录片|坂本龙一:终曲_(2017)
|
||||
swz6f743fwo?password=8888 纪录片|BBC_野性都市_(2018)
|
||||
swz6f7k3fwo?password=8888 纪录片|彩排_(2022)
|
||||
swz6f7d3fwo?password=8888 纪录片|茶,一片树叶的故事_(2013)
|
||||
swz6f753fwo?password=8888 纪录片|超凡动物奇观_(2022)
|
||||
swz6f7v3fwo?password=8888 纪录片|超级工程_(2012)
|
||||
swz6f7r3fwo?password=8888 纪录片|沉船搜索者澳大利亚_(2022)
|
||||
swz6f7t3fwo?password=8888 纪录片|穿越落基山脉_(2011)
|
||||
swz6f783fwo?password=8888 纪录片|从太空看地球_(2019)
|
||||
swz6f7j3fwo?password=8888 纪录片|大白鲨_(2013)
|
||||
swz6f7x3fwo?password=8888 纪录片|大堡礁探险_(2018)
|
||||
swz6f7c3fwo?password=8888 纪录片|大陆的崛起_(2013)
|
||||
swz6f703fwo?password=8888 纪录片|大秦岭_(2010)
|
||||
swz6f7u3fwo?password=8888 纪录片|大太平洋_(2017)
|
||||
swz6fi33fwo?password=8888 纪录片|大峡谷探险之河流告急_(2008)
|
||||
swz6fi63fwo?password=8888 纪录片|大象的秘密_(2023)
|
||||
swz6fih3fwo?password=8888 纪录片|大象女王_(2019)
|
||||
swz6fiw3fwo?password=8888 纪录片|大熊猫_(2018)
|
||||
swz6fif3fwo?password=8888 纪录片|登陆日:诺曼底1944_(2014)
|
||||
swz6fis3fwo?password=8888 纪录片|地球的夜晚_(2020)
|
||||
swz6fil3fwo?password=8888 纪录片|地球风暴_(2022)
|
||||
swz6fiq3fwo?password=8888 纪录片|地球脉动_(2006)
|
||||
swz6fib3fwo?password=8888 纪录片|地球脉动2_(2016)
|
||||
swz6fi73fwo?password=8888 纪录片|地球:神奇的一天_(2017)
|
||||
swz6fii3fwo?password=8888 纪录片|第四阶段_(2016)
|
||||
swz6fiy3fwo?password=8888 纪录片|帝国的崛起:奥斯曼_(2020)
|
||||
swz6fik3fwo?password=8888 纪录片|帝企鹅日记2:召唤_(2017)
|
||||
swz6fim3fwo?password=8888 纪录片|帝王蝶的迁徙_(2012)
|
||||
swz6fiv3fwo?password=8888 纪录片|东瀛大宝荐
|
||||
swz6fie3fwo?password=8888 纪录片|动物本色_(2021)
|
||||
swz6fig3fwo?password=8888 纪录片|敦煌:生而传奇_(2021)
|
||||
swz6fi83fwo?password=8888 纪录片|恶海捕蟹记:血脉篇_(2020)
|
||||
swz6fij3fwo?password=8888 纪录片|非洲_(2013)
|
||||
swz6fic3fwo?password=8888 纪录片|非洲:动物乐园_(2017)
|
||||
swz6fi23fwo?password=8888 纪录片|风味原产地_(2019)
|
||||
swz6f433fwo?password=8888 纪录片|佛罗伦萨和乌菲兹美术馆_(2015)
|
||||
swz6f4n3fwo?password=8888 纪录片|功勋_(2021)
|
||||
swz6f4s3fwo?password=8888 纪录片|孤注一掷:阿森纳_(2022)
|
||||
swz6f4q3fwo?password=8888 纪录片|孤注一掷:巴西国家队_(2020)
|
||||
swz6f4o3fwo?password=8888 纪录片|孤注一掷:曼彻斯特城_(2018)
|
||||
swz6f473fwo?password=8888 纪录片|孤注一掷:托特纳姆热刺_(2020)
|
||||
swz6f4i3fwo?password=8888 纪录片|龟女士的奥德赛_(2018)
|
||||
swz6f4y3fwo?password=8888 纪录片|国际空间站_(2002)
|
||||
swz6f4k3fwo?password=8888 纪录片|国家地理:大迁徙_(2010)
|
||||
swz6f4m3fwo?password=8888 纪录片|国家地理:远征南极_(2009)
|
||||
swz6f4r3fwo?password=8888 纪录片|海狼之岛_(2022)
|
||||
swz6f4a3fwo?password=8888 纪录片|海洋_(2010)
|
||||
swz6f4p3fwo?password=8888 纪录片|海洋:我们的蓝色星球_(2018)
|
||||
swz6f4t3fwo?password=8888 纪录片|航空母舰:七海卫士_(2016)
|
||||
swz6fyz3fwo?password=8888 纪录片|航拍中国_(2017)
|
||||
swz6fyw3fwo?password=8888 纪录片|河西走廊_(2015)
|
||||
swz6fyf3fwo?password=8888 纪录片|黑猩猩帝国_(2023)
|
||||
swz6fyb3fwo?password=8888 纪录片|黑夜跟踪狂:追捕连环杀手_(2021)
|
||||
swz6fy73fwo?password=8888 纪录片|欢迎来地球_(2021)
|
||||
swz6fyi3fwo?password=8888 纪录片|环法自行车赛:逆风飞驰_(2023)
|
||||
swz6fyy3fwo?password=8888 纪录片|回到太空_(2022)
|
||||
swz6fyk3fwo?password=8888 纪录片|急诊先锋:纽约_(2023)
|
||||
swz6fym3fwo?password=8888 纪录片|记忆的力量·抗美援朝_(2020)
|
||||
swz6fyv3fwo?password=8888 纪录片|家园_(2020)
|
||||
swz6fye3fwo?password=8888 纪录片|揭秘海军陆战队_(2017)
|
||||
swz6fyg3fwo?password=8888 纪录片|巨兽_(2023)
|
||||
swz6fyt3fwo?password=8888 纪录片|觉醒_(2018)
|
||||
swz6fyj3fwo?password=8888 纪录片|康纳·麦格雷戈:拳王万岁_(2023)
|
||||
swz6fy13fwo?password=8888 纪录片|克里斯·海姆斯沃斯:挑战极限_(2022)
|
||||
swz6fy23fwo?password=8888 纪录片|狂野日本_(2015)
|
||||
swz6fk33fwo?password=8888 纪录片|狂野之美:国家公园探险_(2016)
|
||||
swz6fkn3fwo?password=8888 纪录片|蓝色星球_(2001)
|
||||
swz6fks3fwo?password=8888 纪录片|蓝色星球2_(2017)
|
||||
swz6fkb3fwo?password=8888 纪录片|雷吉_(2023)
|
||||
swz6fki3fwo?password=8888 纪录片|李小龙传奇_(2008)
|
||||
swz6fky3fwo?password=8888 纪录片|了解宇宙如何运行_(2010)
|
||||
swz6fkk3fwo?password=8888 纪录片|绿色星球_(2022)
|
||||
swz6fkm3fwo?password=8888 纪录片|罗马四大圣殿_(2016)
|
||||
swz6fk53fwo?password=8888 纪录片|麦道夫:华尔街吸金恶霸_(2023)
|
||||
swz6fkr3fwo?password=8888 纪录片|没有极限_(2015)
|
||||
swz6fka3fwo?password=8888 纪录片|美国内战_(1990)
|
||||
swz6fkp3fwo?password=8888 纪录片|美国西海岸之旅_(2014)
|
||||
swz6fk83fwo?password=8888 纪录片|美丽星球_(2016)
|
||||
swz6fk93fwo?password=8888 纪录片|美丽中国_(2008)
|
||||
swz6fk13fwo?password=8888 纪录片|梦想之大:构建我们的世界_(2017)
|
||||
swz6fkc3fwo?password=8888 纪录片|木偶奇遇记_(2022)
|
||||
swz6fdn3fwo?password=8888 纪录片|喵星人的奇思妙想_(2022)
|
||||
swz6fdz3fwo?password=8888 纪录片|MH370:消失的马航客机_(2023)
|
||||
swz6fdh3fwo?password=8888 纪录片|纳米比亚-旷野的精神_(2016)
|
||||
swz6fdw3fwo?password=8888 纪录片|南极3D:在边缘_(2014)
|
||||
swz6fdq3fwo?password=8888 纪录片|南太平洋之旅_(2013)
|
||||
swz6fd73fwo?password=8888 纪录片|欧洲_(2016)
|
||||
swz6fdy3fwo?password=8888 纪录片|披头士乐队:回归_(2021)
|
||||
swz6fdm3fwo?password=8888 纪录片|僻壤凶案_(2022)
|
||||
swz6fd53fwo?password=8888 纪录片|婆罗洲:亚洲的魅力_(2017)
|
||||
swz6fdv3fwo?password=8888 纪录片|破发点:大满贯之路_(2023)
|
||||
swz6fda3fwo?password=8888 纪录片|破浪_(2016)
|
||||
swz6fdg3fwo?password=8888 纪录片|奇妙酒店:大堂之外的生活_(2017)
|
||||
swz6fdp3fwo?password=8888 纪录片|企鹅群里有特务_(2013)
|
||||
swz6fd83fwo?password=8888 纪录片|企鹅小镇_(2021)
|
||||
swz6fdj3fwo?password=8888 纪录片|切尔诺贝利_(2019)
|
||||
swz6fdx3fwo?password=8888 纪录片|情系斯波克_(2016)
|
||||
swz6fm33fwo?password=8888 纪录片|求偶游戏_(2021)
|
||||
swz6fmh3fwo?password=8888 纪录片|全力挥杆:高尔夫大满贯之路_(2023)
|
||||
swz6fmf3fwo?password=8888 纪录片|全美缉凶:波士顿马拉松爆炸案_(2023)
|
||||
swz6fml3fwo?password=8888 纪录片|全球绝美国家公园_(2022)
|
||||
swz6fmb3fwo?password=8888 纪录片|人间游乐场_(2022)
|
||||
swz6fmi3fwo?password=8888 纪录片|人生七年1_(1964)
|
||||
swz6fmy3fwo?password=8888 纪录片|人生七年2_(1970)
|
||||
swz6fmd3fwo?password=8888 纪录片|人生七年3_(1977)
|
||||
swz6fm53fwo?password=8888 纪录片|人生七年4_(1984)
|
||||
swz6fme3fwo?password=8888 纪录片|人生七年5_(1991)
|
||||
swz6fma3fwo?password=8888 纪录片|人生七年6_(1999)
|
||||
swz6fmp3fwo?password=8888 纪录片|人生七年7_(2006)
|
||||
swz6fmt3fwo?password=8888 纪录片|人生七年8_(2012)
|
||||
swz6fm93fwo?password=8888 纪录片|人生七年9_(2019)
|
||||
swz6fm13fwo?password=8888 纪录片|人生第一次_(2020)
|
||||
swz6fmc3fwo?password=8888 纪录片|塞伦盖蒂_(2019)
|
||||
swz6fm23fwo?password=8888 纪录片|塞伦盖蒂国家公园_(2011)
|
||||
swz6fmu3fwo?password=8888 纪录片|舌尖上的中国_(2012)
|
||||
swz6f5n3fwo?password=8888 纪录片|生门_(2017)
|
||||
swz6f563fwo?password=8888 纪录片|生命_(2009)
|
||||
swz6f5h3fwo?password=8888 纪录片|盛会_(2022)
|
||||
swz6f5w3fwo?password=8888 纪录片|时间的风景_(2012)
|
||||
swz6f5f3fwo?password=8888 纪录片|史前星球_(2022)
|
||||
swz6f5s3fwo?password=8888 纪录片|水下中国_(2019)
|
||||
swz6f5q3fwo?password=8888 纪录片|他乡的童年_(2019)
|
||||
swz6f5b3fwo?password=8888 纪录片|泰勒·斯威夫特:美利坚女士_(2020)
|
||||
swz6f5i3fwo?password=8888 纪录片|太空之旅_(2015)
|
||||
swz6f543fwo?password=8888 纪录片|徒手攀岩_(2018)
|
||||
swz6f5k3fwo?password=8888 纪录片|外星世界_(2020)
|
||||
swz6f5v3fwo?password=8888 纪录片|完美星球_(2021)
|
||||
swz6f5e3fwo?password=8888 纪录片|万物之生_(2022)
|
||||
swz6f5g3fwo?password=8888 纪录片|王朝_(2018)
|
||||
swz6f5p3fwo?password=8888 纪录片|王阳明_(2021)
|
||||
swz6f5t3fwo?password=8888 纪录片|韦科惨案:末日烈火_(2023)
|
||||
swz6f5j3fwo?password=8888 纪录片|为了全人类_(1989)
|
||||
swz6f593fwo?password=8888 纪录片|维多利亚的秘密:天使与恶魔_(2022)
|
||||
swz6f5u3fwo?password=8888 纪录片|未来漫游指南_(2022)
|
||||
swz6fvs3fwo?password=8888 纪录片|我工作故我在_(2023)
|
||||
swz6fvi3fwo?password=8888 纪录片|我们的父亲_(2022)
|
||||
swz6fvm3fwo?password=8888 纪录片|我们的浩瀚宇宙_(2022)
|
||||
swz6fv53fwo?password=8888 纪录片|我们的星球_(2019)
|
||||
swz6fvr3fwo?password=8888 纪录片|我们的自然_(2018)
|
||||
swz6fve3fwo?password=8888 纪录片|我们星球上的生命_(2023)
|
||||
swz6fva3fwo?password=8888 纪录片|我是一名杀手_(2018)
|
||||
swz6fvp3fwo?password=8888 纪录片|无穷之路_(2021)
|
||||
swz6fvj3fwo?password=8888 纪录片|武林外传_(2018)
|
||||
swz6fvx3fwo?password=8888 纪录片|小小世界_(2020)
|
||||
swz6fv03fwo?password=8888 纪录片|行星_(2019)
|
||||
swz6fvu3fwo?password=8888 纪录片|血与性:400年王室风云_(2022)
|
||||
swz6fr63fwo?password=8888 纪录片|药剂师_(2020)
|
||||
swz6frh3fwo?password=8888 纪录片|野性太平洋_(2016)
|
||||
swz6frf3fwo?password=8888 纪录片|野性英伦_(2023)
|
||||
swz6frq3fwo?password=8888 纪录片|夜色中的地球_(2020)
|
||||
swz6fr73fwo?password=8888 纪录片|移民国度_(2020)
|
||||
swz6frm3fwo?password=8888 纪录片|影响世界的中国植物_(2019)
|
||||
swz6frp3fwo?password=8888 纪录片|与浪争锋_(2022)
|
||||
swz6frx3fwo?password=8888 纪录片|宇宙时空之旅_(2014)
|
||||
swz6fe33fwo?password=8888 纪录片|遇见最极致的中国_(2022)
|
||||
swz6few3fwo?password=8888 纪录片|原味澳洲_(2013)
|
||||
swz6fel3fwo?password=8888 纪录片|约翰·威尔逊的十万个怎么做_(2020)
|
||||
swz6feb3fwo?password=8888 纪录片|找寻_(2021)
|
||||
swz6fe73fwo?password=8888 纪录片|这货哪来的_(2023)
|
||||
swz6fek3fwo?password=8888 纪录片|致富攻略_(2023)
|
||||
swz6fem3fwo?password=8888 纪录片|中国_(2020)
|
||||
swz6fev3fwo?password=8888 纪录片|中国救护_(2023)
|
||||
swz6fee3fwo?password=8888 纪录片|中国通史_(2013)
|
||||
swz6feg3fwo?password=8888 纪录片|中国之谜_(2016)
|
||||
swz6fep3fwo?password=8888 纪录片|中国最美公路_(2022)
|
||||
swz6fet3fwo?password=8888 纪录片|众神之地_(2022)
|
||||
swz6fej3fwo?password=8888 纪录片|追缉汽车大亨:卡洛斯·戈恩_(2023)
|
||||
swz6fe93fwo?password=8888 纪录片|追逐珊瑚_(2017)
|
||||
swz6fec3fwo?password=8888 纪录片|最后的珊瑚礁:海底世界_(2012)
|
||||
swz6fe23fwo?password=8888 纪录片|最后的舞动_(2020)
|
||||
swz6feu3fwo?password=8888 纪录片|最美公路_(2018)
|
||||
swz6fan3fwo?password=8888 纪录片|座头鲸_(2015)
|
||||
sw6vuxp366e?password=kd83 音乐MV|港台MV_1.14T
|
||||
sw658uq36x2?password=md98 音乐MV|音乐22万首_8.76T
|
||||
swzg9pt3wye?password=c899 音乐MV|演唱会_重编码6TB
|
||||
swzmqcr3fs6?password=xd67 音乐MV|音乐22万首_3.83TB
|
||||
swzmqca3fs6?password=j9d3 音乐MV|音乐22万首_8.76TB
|
||||
swzva8w3fs6?password=l381 音乐MV|音乐22万首_1.80TB
|
||||
swz6ft53fwo?password=8888 精选|各类无损音乐合集9万首(8.8T)
|
||||
swz6sow3fwo?password=8888 精选|1080P港台演唱会【2.55T】
|
||||
swz6soa3fwo?password=8888 精选|成龙电影合集【447G】
|
||||
swz6sot3fwo?password=8888 精选|《_成龙65部作品合集@Ourdisc_蓝光原盘_》【1.48T】
|
||||
swz6so13fwo?password=8888 精选|林正英电影合集46部【209G】
|
||||
swz6so23fwo?password=8888 精选|李连杰电影合集【210G】
|
||||
swz6s763fwo?password=8888 精选|邵氏4K【777G】
|
||||
swz6s7w3fwo?password=8888 精选|周星馳电影合集【183G】
|
||||
swz6s743fwo?password=8888 精选|动漫_已经刮削整理_394部【13.97T】
|
||||
swz6s7y3fwo?password=8888 精选|freembook全站15.72万书(kindle格式为主)_1.6t
|
||||
swz6s7d3fwo?password=8888 精选|港片蓝光原盘1--669部【16T】
|
||||
swz6s783fwo?password=8888 精选|纪录片合集_蓝光原盘
|
||||
swz6sin3fwo?password=8888 精选|泰剧【3.15T】
|
||||
swz6si63fwo?password=8888 精选|演唱会【13T】
|
||||
swz6sih3fwo?password=8888 精选|音乐22万首14.39T音乐包2
|
||||
swz6siw3fwo?password=8888 精选|印度電子圖書館部分書籍(29萬12T左右)
|
||||
swz6sil3fwo?password=8888 精选|中美百万66万书籍的超大zip压缩版.ca66萬zip【8.7T】
|
||||
swz6sib3fwo?password=8888 精选|最强爽文短剧合集373部
|
||||
swz6gd93fwo?password=8888 精选|2267部2160p_remux_FGT【120T】
|
||||
swz6gml3fwo?password=8888 精选|动画电影1000部【9.7T】
|
||||
swz6gmc3fwo?password=8888 精选|综艺【4.75T】
|
||||
swz6ges3fwo?password=8888 精选|动漫原盘【40T】
|
||||
swz6gp53fwo?password=8888 精选|蓝光原盘_646T_合集
|
||||
swz692e3fwo?password=8888 精选|高清翡翠台_合集_(18.7tb)
|
||||
swz692x3fwo?password=8888 精选|TVB【7T】
|
||||
swz69un3fwo?password=8888 精选|TVB_ATV最强电视剧合集【650部73T】
|
||||
swzfv793fwo?password=8888 精选|【_BD-ISO_】】【2224TB】
|
||||
swzt3w43hc6?password=s922 精选|希腊神话改编影视
|
||||
swzt3w23hc6?password=z631 精选|尼古拉斯凯奇
|
||||
swzt3wi3hc6?password=gf96 精选|恐怖片
|
||||
swzt3fh3hc6?password=ia38 精选|全球丧尸电影百佳合集
|
||||
swnnsis3zx1?password=g0d1 精选|600t合集
|
||||
swzlcya3wsp?password=bab4 精选|1600t合集
|
||||
swz82uz33a3?password=x1e1 精选|踢馆秘籍
|
||||
swzkpip3ncb?password=5566 精选|【电影系列合集】4K
|
||||
swzkpij3ncb?password=5566 精选|【电影系列合集】AE制作全特效字幕
|
||||
swzkpix3ncb?password=5566 精选|【电影系列合集】最佳影片合集
|
||||
swzkpi23ncb?password=5566 精选|漫威电影合集
|
||||
swzkpiu3ncb?password=5566 精选|电影系列合集2
|
||||
swzm4z63697?password=6688 大包|FRDS电视剧大包
|
||||
swzew4m3nc6?password=i0d7 大包|2.24pb大包
|
||||
swzawra3zx1?password=scf1 大包|1.6pb大合集
|
||||
swz939j3hz7?password=bcd5 日本动漫|奥特曼系列
|
||||
swzjuqj33dn?password=7777 日本动漫|火影忍者
|
||||
sw62c3o3z9p?password=s137 动漫|动画片_3.99T
|
||||
sw6upku3hqj?password=hc61 动漫|动漫394部_13.97T
|
||||
swznmd03nc7?password=p897 动漫|动漫原盘_40.49T
|
||||
sw6x8sj3zzo?password=v321 动漫|皮克斯动画合集4K_REMUX_975.83G
|
||||
sw3x2pd33zy?password=xzpq 动漫|小猪佩奇_21.95G
|
||||
swnd82q3zx1?password=ua89 动漫|奥特曼_1.1T
|
||||
sw3c8o83hgl?password=b5e6 魔戒六部曲_1.18T
|
||||
swzdt0w3nb4?password=f0a7 诺兰系列原盘访问码:d843
|
||||
swzdt933nb4?password=la51 姜文
|
||||
swny8y43z12?password=o932 NBA总决赛1991-2020_698.21G
|
||||
swzg31833xj?password=f3h5 2024欧洲杯
|
||||
sw6rt783hgh?password=ifd6 PPT素材模板_84.82G
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
cda0aee24a4c743529629adf7241f9c9
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
506bb770242856a288488acb4c659298
|
||||
@@ -0,0 +1,77 @@
|
||||
zAajGfX1cxE 中信出版图书 1
|
||||
kgCYrLpLgiZ 机械工业出版社6000册 1
|
||||
EmhjMiwBrNj 清华大学出版社2237册 1
|
||||
3XEmnpcKYwd 新知文库 1
|
||||
XpsFL9BcCbN 北京国家图书馆 1
|
||||
BPkNEszAXjr 一万本图书馆PDF 1
|
||||
STfm58hKPBu 湖湘文库 1
|
||||
LZvTLPW8fbF 亲子教育
|
||||
gfsRY67BRcb 历史传记
|
||||
vbULbViB6jg 婚恋两性
|
||||
nk24tt7C2nt 婚恋家庭
|
||||
nk24tt7C2nt 婚恋家庭
|
||||
LYHR2C7oGrN 官场商战
|
||||
h3qDZvSNJaH 影视时尚
|
||||
1Wq86hBek8P 心理励志
|
||||
erF8fL1E9SR 思想文化
|
||||
qzBiRPyuKCU 恐怖悬疑
|
||||
5b6xedKYxDB 推理侦探
|
||||
5Do3YzWGsdT 文学名著
|
||||
h8nj4ZxEhTV 旅游休闲
|
||||
W8uEmn2UEm4 武侠仙侠
|
||||
C6FdSeriQAg 武侠小说
|
||||
Q2Uyg5yXCTp 漫画绘本
|
||||
4CP6kP21RE1 玄幻奇幻
|
||||
AbmTF4S9R2u 玄幻小说
|
||||
S2r9Q7dofdw 社科经典
|
||||
Tkz17pPJ54n 科幻小说
|
||||
ZCma3m8tkqu 综合书籍
|
||||
PJc6BcfuRwn 美容养生
|
||||
1vp4gtVqHVV 职场理财
|
||||
TMXRKiUGzMe 青春校园
|
||||
vEdkxEJocnb 科教类
|
||||
AM8mtK1botT 平台类
|
||||
NkKQg1a7qM9 小说类
|
||||
1th3c74q1cu 漫画类
|
||||
auNq9mXGJ8N 新书类
|
||||
xPX311pWQP8 杂志类
|
||||
43sAoXEduDZ 我的小书屋01
|
||||
Rj2xnX7GLUW 我的小书屋02
|
||||
XMbjpWzN4Jj 我的小书屋03
|
||||
V69EqCbMHST 我的小书屋04
|
||||
zpRyQG5Sykg 我的小书屋05
|
||||
6TZTQve3haL 我的小书屋06
|
||||
FsWBsXLDyMn 全球推理小说大集合 1
|
||||
D9fe45j1eHa ePUBee整站电子书库01
|
||||
ct8cPiYpscj ePUBee整站电子书库02
|
||||
a9rZPQKHfDu ePUBee整站电子书库03
|
||||
h45mCPUZc3E ePUBee整站电子书库04
|
||||
bhDAK42pnSU ePUBee整站电子书库05
|
||||
jdPrqXLaXBU ePUBee整站电子书库06
|
||||
3exRgUFUPrv ePUBee整站电子书库07
|
||||
AMY3umXHQrH ePUBee整站电子书库08
|
||||
16ryTfdGrAP ePUBee整站电子书库09
|
||||
5W8EsnTsCRN ePUBee整站电子书库10
|
||||
D72AZeTnTVL ePUBee整站电子书库11
|
||||
Z4SyuRZZj8Z ePUBee整站电子书库12
|
||||
xMCNaJvx7tk ePUBee整站电子书库13
|
||||
MK7LwGqokKF ePUBee整站电子书库14
|
||||
p9Lnskk2e2L ePUBee整站电子书库15
|
||||
pKEdszFRn2v ePUBee整站电子书库16
|
||||
7fKJ3VC7yWg ePUBee整站电子书库17
|
||||
QXMJVQzPJzG ePUBee整站电子书库18
|
||||
eTbXLxV5HZ3 ePUBee整站电子书库19
|
||||
wvdQyRer63P ePUBee整站电子书库20
|
||||
LrLMDHopskR ePUBee整站电子书库21
|
||||
jr4xL8NvHW9 ePUBee整站电子书库22
|
||||
5tPVRsXdBk4 ePUBee整站电子书库23
|
||||
iMBCRc32UNM ePUBee整站电子书库24
|
||||
S8NodisNHcU ePUBee整站电子书库25
|
||||
4TRTbyZrKki ePUBee整站电子书库26
|
||||
iYZMj7CFPks 广东省立中山图书馆「A-G」
|
||||
unEV8t3QfTc 广东省立中山图书馆「H-K」
|
||||
uT7hzi7CnvP 广东省立中山图书馆「L-N」
|
||||
U2fcieUVKuY 广东省立中山图书馆「O-Q」
|
||||
h3s9tXNJxQK 广东省立中山图书馆「R-T」
|
||||
SXZ17uS7oju 广东省立中山图书馆「U-X」
|
||||
GwnQxogFss3 广东省立中山图书馆「Y-Z」
|
||||
@@ -0,0 +1,16 @@
|
||||
self 我的阿里云盘
|
||||
cdqCsAWD9wC?pwd=6666 Tacit0924-总合集 1 updated_at DESC
|
||||
mxAfB6eRgY4 阿里1T 1
|
||||
4ydLxf7VgH7 平凡中的 1
|
||||
dieULBdYP3D YYDSVIP 1
|
||||
uWa9gbM3RJ7 优源阁-资源总合集 1
|
||||
UuHi9PeYSVz YYDSVip-综艺
|
||||
v9To3HC6vhs YYDSVip-综合
|
||||
fSNHaYST47s 纪录片合集2
|
||||
ftMhRaKUfYp 掌灯者-港剧
|
||||
MLWPRHRt9W3 掌灯者-台剧
|
||||
8Fg4TNsd2A2 掌灯者-大陆剧1
|
||||
ar8Kg9azw1S 掌灯者-大陆剧2
|
||||
GMYSz3AHFaA 掌灯者-大陆剧3
|
||||
cmy3KCTRpFA 李连杰电影合集
|
||||
hMsDJ6dsGxQ 成龙电影合集
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{distance}from"./mod.js";import{sortListByCN}from"./sortName.js";String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};var showMode="single";var searchDriver="";var limit_search_show=200;var search_type="";var detail_order="name";var playRaw=1;const request_timeout=5e3;const VERSION="alist v2/v3 20221223";const UA="Mozilla/5.0";function print(any){any=any||"";if(typeof any=="object"&&Object.keys(any).length>0){try{any=JSON.stringify(any);console.log(any)}catch(e){console.log(typeof any+":"+any.length)}}else if(typeof any=="object"&&Object.keys(any).length<1){console.log("null object")}else{console.log(any)}}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}const http=function(url,options={}){if(options.method==="POST"&&options.data){options.body=JSON.stringify(options.data);options.headers=Object.assign({"content-type":"application/json"},options.headers)}options.timeout=request_timeout;if(!options.headers){options.headers={}}let keys=Object.keys(options.headers).map(it=>it.toLowerCase());if(!keys.includes("referer")){options.headers["Referer"]=getHome(url)}if(!keys.includes("user-agent")){options.headers["User-Agent"]=UA}try{const res=req(url,options);res.json=()=>res&&res.content?JSON.parse(res.content):null;res.text=()=>res&&res.content?res.content:"";return res}catch(e){return{json(){return null},text(){return""}}}};["get","post"].forEach(method=>{http[method]=function(url,options={}){return http(url,Object.assign(options,{method:method.toUpperCase()}))}});const __drives={};function isMedia(file){return/\.(dff|dsf|mp3|aac|wav|wma|cda|flac|m4a|mid|mka|mp2|mpa|mpc|ape|ofr|ogg|ra|wv|tta|ac3|dts|tak|webm|wmv|mpeg|mov|ram|swf|mp4|avi|rm|rmvb|flv|mpg|mkv|m3u8|ts|3gp|asf)$/.test(file.toLowerCase())}function get_drives_path(tid){const index=tid.indexOf("$");const name=tid.substring(0,index);const path=tid.substring(index+1);return{drives:get_drives(name),path:path}}function get_drives(name){const{settings,api,server}=__drives[name];if(settings.v3==null){settings.v3=false;const data=http.get(server+"/api/public/settings").json().data;if(Array.isArray(data)){settings.title=data.find(x=>x.key==="title")?.value;settings.v3=false;settings.version=data.find(x=>x.key==="version")?.value;settings.enableSearch=data.find(x=>x.key==="enable search")?.value==="true"}else{settings.title=data.title;settings.v3=true;settings.version=data.version;settings.enableSearch=false}api.path=settings.v3?"/api/fs/list":"/api/public/path";api.file=settings.v3?"/api/fs/get":"/api/public/path";api.search=settings.v3?"/api/public/search":"/api/public/search"}return __drives[name]}function init(ext){console.log("当前版本号:"+VERSION);let data;if(typeof ext=="object"){data=ext;print("alist ext:object")}else if(typeof ext=="string"){if(ext.startsWith("http")){let alist_data=ext.split(";");let alist_data_url=alist_data[0];limit_search_show=alist_data.length>1?Number(alist_data[1])||limit_search_show:limit_search_show;search_type=alist_data.length>2?alist_data[2]:search_type;print(alist_data_url);data=http.get(alist_data_url).json()}else{print("alist ext:json string");data=JSON.parse(ext)}}let drives=[];if(Array.isArray(data)&&data.length>0&&data[0].hasOwnProperty("server")&&data[0].hasOwnProperty("name")){drives=data}else if(!Array.isArray(data)&&data.hasOwnProperty("drives")&&Array.isArray(data.drives)){drives=data.drives.filter(it=>it.type&&it.type==="alist"||!it.type)}print(drives);searchDriver=(drives.find(x=>x.search)||{}).name||"";if(!searchDriver&&drives.length>0){searchDriver=drives[0].name}print(searchDriver);drives.forEach(item=>{let _path_param=[];if(item.params){_path_param=Object.keys(item.params);_path_param.sort((a,b)=>a.length-b.length)}if(item.password){let pwdObj={password:item.password};if(!item.params){item.params={"/":pwdObj}}else{item.params["/"]=pwdObj}_path_param.unshift("/")}__drives[item.name]={name:item.name,server:item.server.endsWith("/")?item.server.rstrip("/"):item.server,startPage:item.startPage||"/",showAll:item.showAll===true,search:!!item.search,params:item.params||{},_path_param:_path_param,settings:{},api:{},getParams(path){const key=this._path_param.find(x=>path.startsWith(x));return Object.assign({},this.params[key],{path:path})},getPath(path){const res=http.post(this.server+this.api.path,{data:this.getParams(path)}).json();return this.settings.v3?res.data.content:res.data.files},getFile(path){let raw_url=this.server+"/d"+path;raw_url=encodeURI(raw_url);let data={raw_url:raw_url,raw_url1:raw_url};if(playRaw===1){try{const res=http.post(this.server+this.api.file,{data:this.getParams(path)}).json();data=this.settings.v3?res.data:res.data.files[0];if(!this.settings.v3){data.raw_url=data.url}data.raw_url1=raw_url;return data}catch(e){return data}}else{return data}},isFolder(data){return data.type===1},isVideo(data){return this.settings.v3?data.type===2||data.type===0||data.type===3:data.type===3||data.type===0||data.type===4},is_subt(data){if(data.type===1){return false}const ext=/\.(srt|ass|scc|stl|ttml)$/;return ext.test(data.name)},getPic(data){let pic=this.settings.v3?data.thumb:data.thumbnail;return pic||(this.isFolder(data)?"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png":"")},getTime(data,isStandard){isStandard=isStandard||false;try{let tTime=data.updated_at||data.time_str||data.modified||"";let date="";if(tTime){tTime=tTime.split("T");date=tTime[0];if(isStandard){date=date.replace(/-/g,"/")}tTime=tTime[1].split(/Z|\./);date+=" "+tTime[0]}return date}catch(e){return""}}}});print("init执行完毕")}function home(filter){let classes=Object.keys(__drives).map(key=>({type_id:`${key}$${__drives[key].startPage}`,type_name:key,type_flag:"1"}));let filter_dict={};let filters=[{key:"order",name:"排序",value:[{n:"名称⬆️",v:"vod_name_asc"},{n:"名称⬇️",v:"vod_name_desc"},{n:"中英⬆️",v:"vod_cn_asc"},{n:"中英⬇️",v:"vod_cn_desc"},{n:"时间⬆️",v:"vod_time_asc"},{n:"时间⬇️",v:"vod_time_desc"},{n:"大小⬆️",v:"vod_size_asc"},{n:"大小⬇️",v:"vod_size_desc"},{n:"无",v:"none"}]},{key:"show",name:"播放展示",value:[{n:"单集",v:"single"},{n:"全集",v:"all"}]}];classes.forEach(it=>{filter_dict[it.type_id]=filters});print("----home----");print(classes);return JSON.stringify({class:classes,filters:filter_dict})}function homeVod(params){let _post_data={pageNum:0,pageSize:100};let _post_url="https://pbaccess.video.qq.com/trpc.videosearch.hot_rank.HotRankServantHttp/HotRankHttp";let data=http.post(_post_url,{data:_post_data}).json();let _list=[];try{data=data["data"]["navItemList"][0]["hotRankResult"]["rankItemList"];data.forEach(it=>{_list.push({vod_name:it.title,vod_id:"msearch:"+it.title,vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_remarks:it.changeOrder})})}catch(e){print("Alist获取首页推荐发送错误:"+e.message)}return JSON.stringify({list:_list})}function category(tid,pg,filter,extend){let orid=tid.replace(/#all#|#search#/g,"");let{drives,path}=get_drives_path(orid);const id=orid.endsWith("/")?orid:orid+"/";const list=drives.getPath(path);let subList=[];let vodFiles=[];let allList=[];let fl=filter?extend:{};if(fl.show){showMode=fl.show}list.forEach(item=>{if(drives.is_subt(item)){subList.push(item.name)}if(!drives.showAll&&!drives.isFolder(item)&&!drives.isVideo(item)){return}let vod_time=drives.getTime(item);let vod_size=get_size(item.size);let remark=vod_time.split(" ")[0].substr(3)+"\t"+vod_size;let vod_id=id+item.name+(drives.isFolder(item)?"/":"");if(showMode==="all"){vod_id+="#all#"}print(vod_id);const vod={vod_id:vod_id,vod_name:item.name.replaceAll("$","").replaceAll("#",""),vod_pic:drives.getPic(item),vod_time:vod_time,vod_size:item.size,vod_tag:drives.isFolder(item)?"folder":"file",vod_remarks:drives.isFolder(item)?remark+" 文件夹":remark};if(drives.isVideo(item)){vodFiles.push(vod)}allList.push(vod)});if(vodFiles.length===1&&subList.length>0){let sub;if(subList.length===1){sub=subList[0]}else{let subs=JSON.parse(JSON.stringify(subList));subs.sort((a,b)=>{let a_similar=(a.includes("chs")?100:0)+levenshteinDistance(a,vodFiles[0].vod_name);let b_similar=(b.includes("chs")?100:0)+levenshteinDistance(b,vodFiles[0].vod_name);if(a_similar>b_similar){return 1}else{return-1}});sub=subs.slice(-1)[0]}vodFiles[0].vod_id+="@@@"+sub;vodFiles[0].vod_remarks+="🏷️"}else{vodFiles.forEach(item=>{const lh=0;let sub;subList.forEach(s=>{const l=levenshteinDistance(s,item.vod_name);if(l>60&&l>lh){sub=s}});if(sub){item.vod_id+="@@@"+sub;item.vod_remarks+="🏷️"}})}if(fl.order){let key=fl.order.split("_").slice(0,-1).join("_");let order=fl.order.split("_").slice(-1)[0];print(`排序key:${key},排序order:${order}`);if(key.includes("name")){detail_order="name";allList=sortListByName(allList,key,order)}else if(key.includes("cn")){detail_order="cn";allList=sortListByCN(allList,"vod_name",order)}else if(key.includes("time")){detail_order="time";allList=sortListByTime(allList,key,order)}else if(key.includes("size")){detail_order="size";allList=sortListBySize(allList,key,order)}else if(fl.order.includes("none")){detail_order="none";print("不排序")}}else{if(detail_order!=="none"){allList=sortListByName(allList,"vod_name","asc")}}print("----category----"+`tid:${tid},detail_order:${detail_order},showMode:${showMode}`);return JSON.stringify({page:1,pagecount:1,limit:allList.length,total:allList.length,list:allList})}function getAll(otid,tid,drives,path){try{const content=category(tid,null,false,null);const isFile=isMedia(otid.replace(/#all#|#search#/g,"").split("@@@")[0]);const{list}=JSON.parse(content);let vod_play_url=[];list.forEach(x=>{if(x.vod_tag==="file"){let vid=x.vod_id.replace(/#all#|#search#/g,"");vod_play_url.push(`${x.vod_name}$${vid.substring(vid.indexOf("$")+1)}`)}});const pl=path.split("/").filter(it=>it);let vod_name=pl[pl.length-1]||drives.name;if(vod_name===drives.name){print(pl)}if(otid.includes("#search#")){vod_name+="[搜]"}let vod={vod_id:otid,vod_name:vod_name,type_name:"文件夹",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_tag:"folder",vod_play_from:drives.name,vod_play_url:vod_play_url.join("#"),vod_remarks:drives.settings.title};print("----detail1----");print(vod);return JSON.stringify({list:[vod]})}catch(e){print(e.message);let list=[{vod_name:"无数据,防无限请求",type_name:"文件夹",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg",vod_actor:e.message,vod_director:tid,vod_content:otid}];return JSON.stringify({list:list})}}function detail(tid){let isSearch=tid.includes("#search#");let isAll=tid.includes("#all#");let otid=tid;tid=tid.replace(/#all#|#search#/g,"");let isFile=isMedia(tid.split("@@@")[0]);print(`isFile:${tid}?${isFile}`);let{drives,path}=get_drives_path(tid);print(`drives:${drives},path:${path},`);if(path.endsWith("/")){return getAll(otid,tid,drives,path)}else{if(isSearch&&!isFile){return getAll(otid,tid,drives,path)}else if(isAll){let new_tid;if(isFile){new_tid=tid.split("/").slice(0,-1).join("/")+"/"}else{new_tid=tid}print(`全集模式 tid:${tid}=>tid:${new_tid}`);let{drives,path}=get_drives_path(new_tid);return getAll(otid,new_tid,drives,path)}else if(isFile){let paths=path.split("@@@");let vod_name=paths[0].substring(paths[0].lastIndexOf("/")+1);let vod_title=vod_name;if(otid.includes("#search#")){vod_title+="[搜]"}let vod={vod_id:otid,vod_name:vod_title,type_name:"文件",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_play_from:drives.name,vod_play_url:vod_name+"$"+path,vod_remarks:drives.settings.title};print("----detail2----");print(vod);return JSON.stringify({list:[vod]})}else{return JSON.stringify({list:[]})}}}function play(flag,id,flags){const drives=get_drives(flag);const urls=id.split("@@@");let vod={parse:0,playUrl:"",url:drives.getFile(urls[0]).raw_url};if(urls.length>=2){const path=urls[0].substring(0,urls[0].lastIndexOf("/")+1);vod.subt=drives.getFile(path+urls[1]).raw_url1}print("----play----");print(vod);return JSON.stringify(vod)}function search(wd,quick){print(__drives);print("可搜索的alist驱动:"+searchDriver);if(!searchDriver||!wd){return JSON.stringify({list:[]})}else{let driver=__drives[searchDriver];wd=wd.split(" ").filter(it=>it.trim()).join("+");print(driver);let surl=driver.server+"/search?box="+wd+"&url=";if(search_type){surl+="&type="+search_type}print("搜索链接:"+surl);let html=http.get(surl).text();let lists=[];try{lists=pdfa(html,"div&&ul&&a")}catch(e){}print(`搜索结果数:${lists.length},搜索结果显示数量限制:${limit_search_show}`);let vods=[];let excludeReg=/\.(pdf|epub|mobi|txt|doc|lrc)$/;let cnt=0;lists.forEach(it=>{let vhref=pdfh(it,"a&&href");if(vhref){vhref=unescape(vhref)}if(excludeReg.test(vhref)){return}if(cnt<limit_search_show){print(vhref)}cnt++;let vid=searchDriver+"$"+vhref+"#search#";if(showMode==="all"){vid+="#all#"}vods.push({vod_name:pdfh(it,"a&&Text"),vod_id:vid,vod_tag:isMedia(vhref)?"file":"folder",vod_pic:"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png",vod_remarks:searchDriver})});vods=vods.slice(0,limit_search_show);print(vods);return JSON.stringify({list:vods})}}function get_size(sz){if(sz<=0){return""}let filesize="";if(sz>1024*1024*1024*1024){sz/=1024*1024*1024*1024;filesize="TB"}else if(sz>1024*1024*1024){sz/=1024*1024*1024;filesize="GB"}else if(sz>1024*1024){sz/=1024*1024;filesize="MB"}else if(sz>1024){sz/=1024;filesize="KB"}else{filesize="B"}let sizeStr=sz.toFixed(2)+filesize,index=sizeStr.indexOf("."),dou=sizeStr.substr(index+1,2);if(dou==="00"){return sizeStr.substring(0,index)+sizeStr.substr(index+3,2)}else{return sizeStr}}function levenshteinDistance(str1,str2){return 100-100*distance(str1,str2)/Math.max(str1.length,str2.length)}function naturalSort(options){if(!options){options={}}return function(a,b){if(options.key){a=a[options.key];b=b[options.key]}var EQUAL=0;var GREATER=options.order==="desc"?-1:1;var SMALLER=-GREATER;var re=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi;var sre=/(^[ ]*|[ ]*$)/g;var dre=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/;var hre=/^0x[0-9a-f]+$/i;var ore=/^0/;var normalize=function normalize(value){var string=""+value;return options.caseSensitive?string:string.toLowerCase()};var x=normalize(a).replace(sre,"")||"";var y=normalize(b).replace(sre,"")||"";var xN=x.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");var yN=y.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");if(!x&&!y)return EQUAL;if(!x&&y)return GREATER;if(x&&!y)return SMALLER;var xD=parseInt(x.match(hre))||xN.length!=1&&x.match(dre)&&Date.parse(x);var yD=parseInt(y.match(hre))||xD&&y.match(dre)&&Date.parse(y)||null;var oFxNcL,oFyNcL;if(yD){if(xD<yD)return SMALLER;else if(xD>yD)return GREATER}for(var cLoc=0,numS=Math.max(xN.length,yN.length);cLoc<numS;cLoc++){oFxNcL=!(xN[cLoc]||"").match(ore)&&parseFloat(xN[cLoc])||xN[cLoc]||0;oFyNcL=!(yN[cLoc]||"").match(ore)&&parseFloat(yN[cLoc])||yN[cLoc]||0;if(isNaN(oFxNcL)!==isNaN(oFyNcL))return isNaN(oFxNcL)?GREATER:SMALLER;else if(typeof oFxNcL!==typeof oFyNcL){oFxNcL+="";oFyNcL+=""}if(oFxNcL<oFyNcL)return SMALLER;if(oFxNcL>oFyNcL)return GREATER}return EQUAL}}const sortListByName=(vodList,key,order)=>{if(!key){return vodList}order=order||"asc";return vodList.sort(naturalSort({key:key,order:order,caseSensitive:true}))};const getTimeInt=timeStr=>{return new Date(timeStr).getTime()};const sortListByTime=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return getTimeInt(a)-getTimeInt(b)});if(order==="desc"){ASCarr.reverse()}return ASCarr};const sortListBySize=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return(Number(a)||0)-(Number(b)||0)});if(order==="desc"){ASCarr.reverse()}return ASCarr};export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search};
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"规则名": "BT天堂",
|
||||
"规则作者": "",
|
||||
"请求头参数": "PC_UA",
|
||||
"网页编码格式": "UTF-8",
|
||||
"图片是否需要代理": "0",
|
||||
"是否开启获取首页数据": "1",
|
||||
"首页推荐链接": "https://www.bttt11.com",
|
||||
"首页列表数组规则": "body&&.ul-imgtxt1",
|
||||
"首页片单列表数组规则": "li",
|
||||
"首页片单是否Jsoup写法": "1",
|
||||
"首页片单标题": "h3&&Text",
|
||||
"首页片单链接": "a&&href",
|
||||
"首页片单图片": "img&&src",
|
||||
"首页片单副标题": "span,-1&&Text",
|
||||
"首页片单链接加前缀": "https://www.bt-tt.com",
|
||||
"首页片单链接加后缀": "",
|
||||
"分类起始页码": "0",
|
||||
"分类链接": "https://www.bttt11.com/www.bt-tt.com/html/page-{cateId}-{catePg}.html",
|
||||
//"分类链接": "https://www.clgod.xyz/list/{catePg}-{cateId}-0-0.html",
|
||||
"分类名称": "畅影大陆电影&畅影港台电影&畅影欧美电影&畅影欧美剧&畅影日韩剧&畅影日韩电影&畅影动漫&畅影亚太剧&畅影亚太电影&畅影综艺&畅影纪录片",
|
||||
"分类名称替换词": "4&3&1&6&7&2&11&10&5&12&13",
|
||||
//"分类名称": "电影&动作&灵异&奇幻&宗教&励志&犯罪&功夫&喜剧&黑色&幽默&爱情&香港&纪录片&灾难&亲情&暴力&僵尸&丧尸&悬疑&人性&惊悚&血腥&武侠&剧情&历史&战争&经典&漫画&改编&恐怖&穿越&青春&黑帮&文艺&浪漫&同志&冒险&动画&演唱会",
|
||||
//"分类名称替换词": "0&1&2&3&4&5&6&7&8&10&11&12&1315&16&17&18&19&20&21&22&23&24&25&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42",
|
||||
"筛选数据": {},
|
||||
"分类截取模式": "1",
|
||||
"分类列表数组规则": ".ul-imgtxt2&&li",
|
||||
"分类片单是否Jsoup写法": "1",
|
||||
"分类片单标题": "h3&&Text",
|
||||
"分类片单链接": "a&&href",
|
||||
"分类片单图片": "img&&src",
|
||||
"分类片单副标题": "span,-1--a&&Text!更新时间:",
|
||||
"分类片单链接加前缀": "https://www.bt-tt.com",
|
||||
"分类片单链接加后缀": "",
|
||||
"搜索请求头参数": "User-Agent$PC_UA",
|
||||
"搜索链接": "https://www.bt-tt.com/e/search/;post",
|
||||
"POST请求数据": "show=title,newstext&keyboard={wd}&searchtype=影视搜索",
|
||||
"搜索截取模式": "1",
|
||||
"搜索列表数组规则": ".ul-imgtxt2&&li",
|
||||
"搜索片单是否Jsoup写法": "1",
|
||||
"搜索片单图片": "img&&src",
|
||||
"搜索片单标题": "h3&&Text",
|
||||
"搜索片单链接": "a&&href",
|
||||
"搜索片单副标题": "span,-1--a&&Text!更新时间:",
|
||||
"搜索片单链接加前缀": "https://www.bt-tt.com",
|
||||
"搜索片单链接加后缀": "",
|
||||
"链接是否直接播放": "0",
|
||||
"直接播放链接加前缀": "",
|
||||
"直接播放链接加后缀": "",
|
||||
"直接播放直链视频请求头": "",
|
||||
"详情是否Jsoup写法": "0",
|
||||
"类型详情": "<p>◎类 别&&</p>",
|
||||
"年代详情": "<p>◎年 代&&</p>",
|
||||
"地区详情": "<p>◎产 地&&</p>",
|
||||
"演员详情": "",
|
||||
"简介详情": "",
|
||||
"线路列表数组规则": "",
|
||||
"线路标题": "",
|
||||
"播放列表数组规则": "body&&.container",
|
||||
"选集列表数组规则": "a[href^=magnet]||a[href^=ed2K]",
|
||||
"选集标题链接是否Jsoup写法": "1",
|
||||
"选集标题": "Text",
|
||||
"选集链接": "a&&href",
|
||||
"是否反转选集序列": "0",
|
||||
"选集链接加前缀": "",
|
||||
"选集链接加后缀": "",
|
||||
"分析MacPlayer": "0",
|
||||
"是否开启手动嗅探": "0",
|
||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv",
|
||||
"手动嗅探视频链接过滤词": ".html"
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
37d3cc41a50b82ea371733aeba5afa7f
|
||||
+1168
@@ -0,0 +1,1168 @@
|
||||
{
|
||||
"hot_gaia": [
|
||||
{
|
||||
"key": "sort",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "热度",
|
||||
"v": "recommend"
|
||||
},
|
||||
{
|
||||
"n": "最新",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "rank"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "全部"
|
||||
},
|
||||
{
|
||||
"n": "华语",
|
||||
"v": "华语"
|
||||
},
|
||||
{
|
||||
"n": "欧美",
|
||||
"v": "欧美"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tv_hot": [
|
||||
{
|
||||
"key": "type",
|
||||
"name": "分类",
|
||||
"value": [
|
||||
{
|
||||
"n": "综合",
|
||||
"v": "tv_hot"
|
||||
},
|
||||
{
|
||||
"n": "国产剧",
|
||||
"v": "tv_domestic"
|
||||
},
|
||||
{
|
||||
"n": "欧美剧",
|
||||
"v": "tv_american"
|
||||
},
|
||||
{
|
||||
"n": "日剧",
|
||||
"v": "tv_japanese"
|
||||
},
|
||||
{
|
||||
"n": "韩剧",
|
||||
"v": "tv_korean"
|
||||
},
|
||||
{
|
||||
"n": "动画",
|
||||
"v": "tv_animation"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"show_hot": [
|
||||
{
|
||||
"key": "type",
|
||||
"name": "分类",
|
||||
"value": [
|
||||
{
|
||||
"n": "综合",
|
||||
"v": "show_hot"
|
||||
},
|
||||
{
|
||||
"n": "国内",
|
||||
"v": "show_domestic"
|
||||
},
|
||||
{
|
||||
"n": "国外",
|
||||
"v": "show_foreign"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"movie": [
|
||||
{
|
||||
"key": "类型",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部类型",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "喜剧"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "爱情"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "动作"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "动画",
|
||||
"v": "动画"
|
||||
},
|
||||
{
|
||||
"n": "悬疑",
|
||||
"v": "悬疑"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "犯罪"
|
||||
},
|
||||
{
|
||||
"n": "惊悚",
|
||||
"v": "惊悚"
|
||||
},
|
||||
{
|
||||
"n": "冒险",
|
||||
"v": "冒险"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "战争"
|
||||
},
|
||||
{
|
||||
"n": "传记",
|
||||
"v": "传记"
|
||||
},
|
||||
{
|
||||
"n": "歌舞",
|
||||
"v": "歌舞"
|
||||
},
|
||||
{
|
||||
"n": "武侠",
|
||||
"v": "武侠"
|
||||
},
|
||||
{
|
||||
"n": "情色",
|
||||
"v": "情色"
|
||||
},
|
||||
{
|
||||
"n": "灾难",
|
||||
"v": "灾难"
|
||||
},
|
||||
{
|
||||
"n": "西部",
|
||||
"v": "西部"
|
||||
},
|
||||
{
|
||||
"n": "纪录片",
|
||||
"v": "纪录片"
|
||||
},
|
||||
{
|
||||
"n": "短片",
|
||||
"v": "短片"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "地区",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部地区",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "华语",
|
||||
"v": "华语"
|
||||
},
|
||||
{
|
||||
"n": "欧美",
|
||||
"v": "欧美"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "中国大陆",
|
||||
"v": "中国大陆"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "中国香港"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "中国台湾"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "意大利",
|
||||
"v": "意大利"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "印度",
|
||||
"v": "印度"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "俄罗斯",
|
||||
"v": "俄罗斯"
|
||||
},
|
||||
{
|
||||
"n": "加拿大",
|
||||
"v": "加拿大"
|
||||
},
|
||||
{
|
||||
"n": "澳大利亚",
|
||||
"v": "澳大利亚"
|
||||
},
|
||||
{
|
||||
"n": "爱尔兰",
|
||||
"v": "爱尔兰"
|
||||
},
|
||||
{
|
||||
"n": "瑞典",
|
||||
"v": "瑞典"
|
||||
},
|
||||
{
|
||||
"n": "巴西",
|
||||
"v": "巴西"
|
||||
},
|
||||
{
|
||||
"n": "丹麦",
|
||||
"v": "丹麦"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "sort",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "近期热度",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "首映时间",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "高分优先",
|
||||
"v": "S"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "年代",
|
||||
"name": "年代",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部年代",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2010年代",
|
||||
"v": "2010年代"
|
||||
},
|
||||
{
|
||||
"n": "2000年代",
|
||||
"v": "2000年代"
|
||||
},
|
||||
{
|
||||
"n": "90年代",
|
||||
"v": "90年代"
|
||||
},
|
||||
{
|
||||
"n": "80年代",
|
||||
"v": "80年代"
|
||||
},
|
||||
{
|
||||
"n": "70年代",
|
||||
"v": "70年代"
|
||||
},
|
||||
{
|
||||
"n": "60年代",
|
||||
"v": "60年代"
|
||||
},
|
||||
{
|
||||
"n": "更早",
|
||||
"v": "更早"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tv": [
|
||||
{
|
||||
"key": "类型",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "不限",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "电视剧",
|
||||
"v": "电视剧"
|
||||
},
|
||||
{
|
||||
"n": "综艺",
|
||||
"v": "综艺"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "电视剧形式",
|
||||
"name": "电视剧形式",
|
||||
"value": [
|
||||
{
|
||||
"n": "不限",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "喜剧"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "爱情"
|
||||
},
|
||||
{
|
||||
"n": "悬疑",
|
||||
"v": "悬疑"
|
||||
},
|
||||
{
|
||||
"n": "动画",
|
||||
"v": "动画"
|
||||
},
|
||||
{
|
||||
"n": "武侠",
|
||||
"v": "武侠"
|
||||
},
|
||||
{
|
||||
"n": "古装",
|
||||
"v": "古装"
|
||||
},
|
||||
{
|
||||
"n": "家庭",
|
||||
"v": "家庭"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "犯罪"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "战争"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "动作"
|
||||
},
|
||||
{
|
||||
"n": "冒险",
|
||||
"v": "冒险"
|
||||
},
|
||||
{
|
||||
"n": "传记",
|
||||
"v": "传记"
|
||||
},
|
||||
{
|
||||
"n": "剧情",
|
||||
"v": "剧情"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "惊悚",
|
||||
"v": "惊悚"
|
||||
},
|
||||
{
|
||||
"n": "灾难",
|
||||
"v": "灾难"
|
||||
},
|
||||
{
|
||||
"n": "歌舞",
|
||||
"v": "歌舞"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "综艺形式",
|
||||
"name": "综艺形式",
|
||||
"value": [
|
||||
{
|
||||
"n": "不限",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "真人秀",
|
||||
"v": "真人秀"
|
||||
},
|
||||
{
|
||||
"n": "脱口秀",
|
||||
"v": "脱口秀"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
},
|
||||
{
|
||||
"n": "歌舞",
|
||||
"v": "歌舞"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "地区",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部地区",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "华语",
|
||||
"v": "华语"
|
||||
},
|
||||
{
|
||||
"n": "欧美",
|
||||
"v": "欧美"
|
||||
},
|
||||
{
|
||||
"n": "国外",
|
||||
"v": "国外"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "中国大陆",
|
||||
"v": "中国大陆"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "中国香港"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "中国台湾"
|
||||
},
|
||||
{
|
||||
"n": "意大利",
|
||||
"v": "意大利"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "俄罗斯",
|
||||
"v": "俄罗斯"
|
||||
},
|
||||
{
|
||||
"n": "瑞典",
|
||||
"v": "瑞典"
|
||||
},
|
||||
{
|
||||
"n": "巴西",
|
||||
"v": "巴西"
|
||||
},
|
||||
{
|
||||
"n": "丹麦",
|
||||
"v": "丹麦"
|
||||
},
|
||||
{
|
||||
"n": "印度",
|
||||
"v": "印度"
|
||||
},
|
||||
{
|
||||
"n": "加拿大",
|
||||
"v": "加拿大"
|
||||
},
|
||||
{
|
||||
"n": "爱尔兰",
|
||||
"v": "爱尔兰"
|
||||
},
|
||||
{
|
||||
"n": "澳大利亚",
|
||||
"v": "澳大利亚"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "sort",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "近期热度",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "首播时间",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "高分优先",
|
||||
"v": "S"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "年代",
|
||||
"name": "年代",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2010年代",
|
||||
"v": "2010年代"
|
||||
},
|
||||
{
|
||||
"n": "2000年代",
|
||||
"v": "2000年代"
|
||||
},
|
||||
{
|
||||
"n": "90年代",
|
||||
"v": "90年代"
|
||||
},
|
||||
{
|
||||
"n": "80年代",
|
||||
"v": "80年代"
|
||||
},
|
||||
{
|
||||
"n": "70年代",
|
||||
"v": "70年代"
|
||||
},
|
||||
{
|
||||
"n": "60年代",
|
||||
"v": "60年代"
|
||||
},
|
||||
{
|
||||
"n": "更早",
|
||||
"v": "更早"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "平台",
|
||||
"name": "平台",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "腾讯视频",
|
||||
"v": "腾讯视频"
|
||||
},
|
||||
{
|
||||
"n": "爱奇艺",
|
||||
"v": "爱奇艺"
|
||||
},
|
||||
{
|
||||
"n": "优酷",
|
||||
"v": "优酷"
|
||||
},
|
||||
{
|
||||
"n": "湖南卫视",
|
||||
"v": "湖南卫视"
|
||||
},
|
||||
{
|
||||
"n": "Netflix",
|
||||
"v": "Netflix"
|
||||
},
|
||||
{
|
||||
"n": "HBO",
|
||||
"v": "HBO"
|
||||
},
|
||||
{
|
||||
"n": "BBC",
|
||||
"v": "BBC"
|
||||
},
|
||||
{
|
||||
"n": "NHK",
|
||||
"v": "NHK"
|
||||
},
|
||||
{
|
||||
"n": "CBS",
|
||||
"v": "CBS"
|
||||
},
|
||||
{
|
||||
"n": "NBC",
|
||||
"v": "NBC"
|
||||
},
|
||||
{
|
||||
"n": "tvN",
|
||||
"v": "tvN"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rank_list_movie": [
|
||||
{
|
||||
"key": "榜单",
|
||||
"name": "榜单",
|
||||
"value": [
|
||||
{
|
||||
"n": "实时热门电影",
|
||||
"v": "movie_real_time_hotest"
|
||||
},
|
||||
{
|
||||
"n": "一周口碑电影榜",
|
||||
"v": "movie_weekly_best"
|
||||
},
|
||||
{
|
||||
"n": "豆瓣电影Top250",
|
||||
"v": "movie_top250"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rank_list_tv": [
|
||||
{
|
||||
"key": "榜单",
|
||||
"name": "榜单",
|
||||
"value": [
|
||||
{
|
||||
"n": "实时热门电视",
|
||||
"v": "tv_real_time_hotest"
|
||||
},
|
||||
{
|
||||
"n": "华语口碑剧集榜",
|
||||
"v": "tv_chinese_best_weekly"
|
||||
},
|
||||
{
|
||||
"n": "全球口碑剧集榜",
|
||||
"v": "tv_global_best_weekly"
|
||||
},
|
||||
{
|
||||
"n": "国内口碑综艺榜",
|
||||
"v": "show_chinese_best_weekly"
|
||||
},
|
||||
{
|
||||
"n": "国外口碑综艺榜",
|
||||
"v": "show_global_best_weekly"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"book_hot": [
|
||||
{
|
||||
"key": "type",
|
||||
"name": "分类",
|
||||
"value": [
|
||||
{
|
||||
"n": "综合",
|
||||
"v": "book_hot"
|
||||
},
|
||||
{
|
||||
"n": "豆瓣阅读TOP250",
|
||||
"v": "book_top250"
|
||||
},
|
||||
{
|
||||
"n": "一周热门图书榜",
|
||||
"v": "EC645NBAI"
|
||||
},
|
||||
{
|
||||
"n": "悬疑推理小说一周热门榜",
|
||||
"v": "ECHU5PTUY"
|
||||
},
|
||||
{
|
||||
"n": "科幻奇幻小说一周热门榜",
|
||||
"v": "ECEA5SP5A"
|
||||
},
|
||||
{
|
||||
"n": "绘本绘画一周热门榜",
|
||||
"v": "EC5U5NVYQ"
|
||||
},
|
||||
{
|
||||
"n": "商业经管图书一周热门榜",
|
||||
"v": "ECE45ORCA"
|
||||
},
|
||||
{
|
||||
"n": "影视戏剧图书一周热门榜",
|
||||
"v": "ECWU5QFUI"
|
||||
},
|
||||
{
|
||||
"n": "艺术设计图书一周热门榜",
|
||||
"v": "ECI45ZBNY"
|
||||
},
|
||||
{
|
||||
"n": "科学新知图书一周热门榜",
|
||||
"v": "ECIM5L2YI"
|
||||
},
|
||||
{
|
||||
"n": "社会纪实图书一周热门榜",
|
||||
"v": "ECQU5U7HQ"
|
||||
},
|
||||
{
|
||||
"n": "历史文化图书一周热门榜",
|
||||
"v": "ECIE5S2IQ"
|
||||
},
|
||||
{
|
||||
"n": "文学图书一周热门榜",
|
||||
"v": "ECRM5OCGI"
|
||||
},
|
||||
{
|
||||
"n": "小说一周热门榜",
|
||||
"v": "ECF45REBQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"book": [
|
||||
{
|
||||
"key": "类型",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "类型",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "文学",
|
||||
"v": "文学"
|
||||
},
|
||||
{
|
||||
"n": "流行",
|
||||
"v": "流行"
|
||||
},
|
||||
{
|
||||
"n": "文化",
|
||||
"v": "文化"
|
||||
},
|
||||
{
|
||||
"n": "生活",
|
||||
"v": "生活"
|
||||
},
|
||||
{
|
||||
"n": "经营",
|
||||
"v": "经营"
|
||||
},
|
||||
{
|
||||
"n": "科技",
|
||||
"v": "科技"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "文学",
|
||||
"name": "文学",
|
||||
"value": [
|
||||
{
|
||||
"n": "文学",
|
||||
"v": "文学"
|
||||
},
|
||||
{
|
||||
"n": "小说",
|
||||
"v": "小说"
|
||||
},
|
||||
{
|
||||
"n": "随笔",
|
||||
"v": "随笔"
|
||||
},
|
||||
{
|
||||
"n": "日本文学",
|
||||
"v": "日本文学"
|
||||
},
|
||||
{
|
||||
"n": "散文",
|
||||
"v": "散文"
|
||||
},
|
||||
{
|
||||
"n": "诗歌",
|
||||
"v": "诗歌"
|
||||
},
|
||||
{
|
||||
"n": "童话",
|
||||
"v": "童话"
|
||||
},
|
||||
{
|
||||
"n": "名著",
|
||||
"v": "名著"
|
||||
},
|
||||
{
|
||||
"n": "港台",
|
||||
"v": "港台"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "流行",
|
||||
"name": "流行",
|
||||
"value": [
|
||||
{
|
||||
"n": "流行",
|
||||
"v": "流行"
|
||||
},
|
||||
{
|
||||
"n": "漫画",
|
||||
"v": "漫画"
|
||||
},
|
||||
{
|
||||
"n": "推理",
|
||||
"v": "推理"
|
||||
},
|
||||
{
|
||||
"n": "绘本",
|
||||
"v": "绘本"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "青春",
|
||||
"v": "青春"
|
||||
},
|
||||
{
|
||||
"n": "言情",
|
||||
"v": "言情"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "武侠",
|
||||
"v": "武侠"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "文化",
|
||||
"name": "文化",
|
||||
"value": [
|
||||
{
|
||||
"n": "文化",
|
||||
"v": "文化"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "哲学",
|
||||
"v": "哲学"
|
||||
},
|
||||
{
|
||||
"n": "传记",
|
||||
"v": "传记"
|
||||
},
|
||||
{
|
||||
"n": "设计",
|
||||
"v": "设计"
|
||||
},
|
||||
{
|
||||
"n": "电影",
|
||||
"v": "电影"
|
||||
},
|
||||
{
|
||||
"n": "建筑",
|
||||
"v": "建筑"
|
||||
},
|
||||
{
|
||||
"n": "回忆录",
|
||||
"v": "回忆录"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "生活",
|
||||
"name": "生活",
|
||||
"value": [
|
||||
{
|
||||
"n": "生活",
|
||||
"v": "生活"
|
||||
},
|
||||
{
|
||||
"n": "旅行",
|
||||
"v": "旅行"
|
||||
},
|
||||
{
|
||||
"n": "励志",
|
||||
"v": "励志"
|
||||
},
|
||||
{
|
||||
"n": "教育",
|
||||
"v": "教育"
|
||||
},
|
||||
{
|
||||
"n": "职场",
|
||||
"v": "职场"
|
||||
},
|
||||
{
|
||||
"n": "美食",
|
||||
"v": "美食"
|
||||
},
|
||||
{
|
||||
"n": "灵修",
|
||||
"v": "灵修"
|
||||
},
|
||||
{
|
||||
"n": "健康",
|
||||
"v": "健康"
|
||||
},
|
||||
{
|
||||
"n": "家居",
|
||||
"v": "家居"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "经营",
|
||||
"name": "经营",
|
||||
"value": [
|
||||
{
|
||||
"n": "经营",
|
||||
"v": "经营"
|
||||
},
|
||||
{
|
||||
"n": "经济学",
|
||||
"v": "经济学"
|
||||
},
|
||||
{
|
||||
"n": "管理",
|
||||
"v": "管理"
|
||||
},
|
||||
{
|
||||
"n": "商业",
|
||||
"v": "商业"
|
||||
},
|
||||
{
|
||||
"n": "金融",
|
||||
"v": "金融"
|
||||
},
|
||||
{
|
||||
"n": "营销",
|
||||
"v": "营销"
|
||||
},
|
||||
{
|
||||
"n": "理财",
|
||||
"v": "理财"
|
||||
},
|
||||
{
|
||||
"n": "股票",
|
||||
"v": "股票"
|
||||
},
|
||||
{
|
||||
"n": "企业史",
|
||||
"v": "企业史"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "科技",
|
||||
"name": "科技",
|
||||
"value": [
|
||||
{
|
||||
"n": "科技",
|
||||
"v": "科技"
|
||||
},
|
||||
{
|
||||
"n": "科普",
|
||||
"v": "科普"
|
||||
},
|
||||
{
|
||||
"n": "互联网",
|
||||
"v": "互联网"
|
||||
},
|
||||
{
|
||||
"n": "编程",
|
||||
"v": "编程"
|
||||
},
|
||||
{
|
||||
"n": "交互设计",
|
||||
"v": "交互设计"
|
||||
},
|
||||
{
|
||||
"n": "算法",
|
||||
"v": "算法"
|
||||
},
|
||||
{
|
||||
"n": "通信",
|
||||
"v": "通信"
|
||||
},
|
||||
{
|
||||
"n": "神经网络",
|
||||
"v": "神经网络"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "sort",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "近期热度",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "首播时间",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "高分优先",
|
||||
"v": "S"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+2676
@@ -0,0 +1,2676 @@
|
||||
// import 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/es6py.js';
|
||||
// import {是否正版,urlDeal,setResult,setResult2,setHomeResult,maoss,urlencode} from 'http://192.168.10.103:5705/libs/es6py.js';
|
||||
// import 'http://192.168.1.124:5705/libs/es6py.js';
|
||||
import cheerio from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js';
|
||||
// import cheerio from 'http://192.168.10.103:5705/libs/cheerio.min.js';
|
||||
import 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js';
|
||||
import 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/drT.js';
|
||||
import 模板 from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js';
|
||||
import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js'
|
||||
// import 'http://192.168.10.103:5705/libs/drT.js';
|
||||
// import muban from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js';
|
||||
// import muban from 'http://192.168.10.103:5705/admin/view/模板.js';
|
||||
|
||||
// const key = 'drpy_zbk';
|
||||
// eval(req('http://192.168.1.124:5705/libs/es6py.js').content);
|
||||
function init_test(){
|
||||
// console.log(typeof(CryptoJS));
|
||||
console.log("init_test_start");
|
||||
console.log("当前版本号:"+VERSION);
|
||||
console.log(RKEY);
|
||||
console.log(JSON.stringify(rule));
|
||||
// console.log('123456的md5值是:'+md5('123456'));
|
||||
// let aa = base64Encode('编码测试一下')
|
||||
// log(aa);
|
||||
// let bb = base64Decode(aa);
|
||||
// log('bb:'+bb);
|
||||
// clearItem(RULE_CK);
|
||||
// console.log(JSON.stringify(rule));
|
||||
// console.log(request('https://www.baidu.com',{withHeaders:true}));
|
||||
// console.log(request('https://www.baidu.com/favicon.ico',{toBase64:true}));
|
||||
// require('http://192.168.10.99:5705/txt/pluto/drT.js');
|
||||
// console.log(typeof(drT));
|
||||
// console.log(drT.renderText('{{fl.cate}},hi, {{fl}}哈哈.{{fl}}',{sort: 1,cate:'movie'},'fl'));
|
||||
console.log("init_test_end");
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行预处理代码
|
||||
*/
|
||||
function pre(){
|
||||
if(typeof(rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()){
|
||||
let code = rule.预处理.trim();
|
||||
console.log("执行预处理代码:"+code);
|
||||
if(code.startsWith('js:')){
|
||||
code = code.replace('js:','');
|
||||
}
|
||||
try {
|
||||
// code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie
|
||||
// 直接操作 rule_fetch_params 这个变量 .headers.Cookie
|
||||
eval(code);
|
||||
}catch (e) {
|
||||
console.log('预处理执行失败:'+e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let rule = {};
|
||||
const VERSION = 'drpy1 3.9.49beta36 202400414';
|
||||
/** 已知问题记录
|
||||
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
|
||||
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
|
||||
* 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend(合并文件了可以不管了)
|
||||
* 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?)
|
||||
* 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印(貌似不影响使用)
|
||||
* 5.需要实现 stringify 函数,比起JSON.stringify函数,它会原封不动保留中文不会编码unicode
|
||||
* 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了)
|
||||
* 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略)
|
||||
* done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd}
|
||||
* * 电脑看日志调试
|
||||
adb tcpip 5555
|
||||
adb connect 192.168.10.192
|
||||
adb devices -l
|
||||
adb logcat -c
|
||||
adb logcat | grep -i QuickJS
|
||||
adb logcat -c -b events
|
||||
adb logcat -c -b main -b events -b radio -b system
|
||||
adb logcat > 2.log DRPY:E | grep -i QuickJS
|
||||
* **/
|
||||
|
||||
|
||||
/*** 以下是内置变量和解析方法 **/
|
||||
const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
|
||||
const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
|
||||
const UA = 'Mozilla/5.0';
|
||||
const UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36';
|
||||
const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
const RULE_CK = 'cookie'; // 源cookie的key值
|
||||
// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识
|
||||
const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态';
|
||||
const TAB_EXCLUDE = '猜你|喜欢|下载|剧情|热播';
|
||||
const OCR_RETRY = 3;//ocr验证重试次数
|
||||
// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口
|
||||
// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口
|
||||
// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口
|
||||
// const OCR_API = 'http://cms.nokia.press:5707/parse/ocr';//ocr在线识别接口
|
||||
const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口
|
||||
if(typeof(MY_URL)==='undefined'){
|
||||
var MY_URL; // 全局注入变量,pd函数需要
|
||||
}
|
||||
var HOST;
|
||||
var RKEY; // 源的唯一标识
|
||||
var fetch;
|
||||
var print;
|
||||
var log;
|
||||
var rule_fetch_params;
|
||||
var fetch_params; // 每个位置单独的
|
||||
var oheaders;
|
||||
// var play_url; // 二级详情页注入变量,为了适配js模式0 (不在这里定义了,直接二级里定义了个空字符串)
|
||||
var _pdfh;
|
||||
var _pdfa;
|
||||
var _pd;
|
||||
// const DOM_CHECK_ATTR = ['url', 'src', 'href', 'data-original', 'data-src'];
|
||||
const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/;
|
||||
// 过滤特殊链接,不走urlJoin
|
||||
const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/;
|
||||
const SELECT_REGEX = /:eq|:lt|:gt|#/g;
|
||||
const SELECT_REGEX_A = /:eq|:lt|:gt/g;
|
||||
|
||||
/**
|
||||
es6py扩展
|
||||
*/
|
||||
if (typeof Object.assign != 'function') {
|
||||
Object.assign = function () {
|
||||
var target = arguments[0];
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
}
|
||||
if (!String.prototype.includes) {
|
||||
String.prototype.includes = function (search, start) {
|
||||
if (typeof start !== 'number') {
|
||||
start = 0;
|
||||
}
|
||||
|
||||
if (start + search.length > this.length) {
|
||||
return false;
|
||||
} else {
|
||||
return this.indexOf(search, start) !== -1;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (!Array.prototype.includes) {
|
||||
Object.defineProperty(Array.prototype, 'includes', {
|
||||
value: function (searchElement, fromIndex) {
|
||||
|
||||
if (this == null) {//this是空或者未定义,抛出错误
|
||||
throw new TypeError('"this" is null or not defined');
|
||||
}
|
||||
|
||||
var o = Object(this);//将this转变成对象
|
||||
var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0
|
||||
|
||||
if (len === 0) {//length为0直接返回false未找到目标值
|
||||
return false;
|
||||
}
|
||||
|
||||
var n = fromIndex | 0;//查找起始索引
|
||||
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引,因为有可能是负值
|
||||
|
||||
while (k < len) {//从起始索引处开始循环
|
||||
if (o[k] === searchElement) {//如果某一位置与寻找目标相等,返回true,找到了
|
||||
return true;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
return false;//未找到,返回false
|
||||
}
|
||||
});
|
||||
}
|
||||
if (typeof String.prototype.startsWith != 'function') {
|
||||
String.prototype.startsWith = function (prefix){
|
||||
return this.slice(0, prefix.length) === prefix;
|
||||
};
|
||||
}
|
||||
if (typeof String.prototype.endsWith != 'function') {
|
||||
String.prototype.endsWith = function(suffix) {
|
||||
return this.indexOf(suffix, this.length - suffix.length) !== -1;
|
||||
};
|
||||
}
|
||||
Object.prototype.myValues=function(obj){
|
||||
if(obj ==null) {
|
||||
throw new TypeError("Cannot convert undefined or null to object");
|
||||
}
|
||||
var res=[]
|
||||
for(var k in obj){
|
||||
if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
|
||||
res.push(obj[k]);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
if (typeof Object.prototype.values != 'function') {
|
||||
Object.prototype.values=function(obj){
|
||||
if(obj ==null) {
|
||||
throw new TypeError("Cannot convert undefined or null to object");
|
||||
}
|
||||
var res=[]
|
||||
for(var k in obj){
|
||||
if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
|
||||
res.push(obj[k]);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
if (typeof Array.prototype.join != 'function') {
|
||||
Array.prototype.join = function (emoji) {
|
||||
// emoji = emoji||',';
|
||||
emoji = emoji||'';
|
||||
let self = this;
|
||||
let str = "";
|
||||
let i = 0;
|
||||
if (!Array.isArray(self)) {throw String(self)+'is not Array'}
|
||||
if(self.length===0){return ''}
|
||||
if (self.length === 1){return String(self[0])}
|
||||
i = 1;
|
||||
str = this[0];
|
||||
for (; i < self.length; i++) {
|
||||
str += String(emoji)+String(self[i]);
|
||||
}
|
||||
return str;
|
||||
};
|
||||
}
|
||||
|
||||
String.prototype.rstrip = function (chars) {
|
||||
let regex = new RegExp(chars + "$");
|
||||
return this.replace(regex, "");
|
||||
};
|
||||
|
||||
Array.prototype.append = Array.prototype.push;
|
||||
String.prototype.strip = String.prototype.trim;
|
||||
function 是否正版(vipUrl){
|
||||
let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv');
|
||||
return flag.test(vipUrl);
|
||||
}
|
||||
function urlDeal(vipUrl){
|
||||
if(!vipUrl){
|
||||
return ''
|
||||
}
|
||||
if(!是否正版(vipUrl)){
|
||||
return vipUrl
|
||||
}
|
||||
if(!/miguvideo/.test(vipUrl)){
|
||||
vipUrl=vipUrl.split('#')[0].split('?')[0];
|
||||
}
|
||||
return vipUrl
|
||||
}
|
||||
function setResult(d){
|
||||
if(!Array.isArray(d)){
|
||||
return []
|
||||
}
|
||||
VODS = [];
|
||||
// print(d);
|
||||
d.forEach(function (it){
|
||||
let obj = {
|
||||
vod_id:it.url||'',
|
||||
vod_name: it.title||'',
|
||||
vod_remarks: it.desc||'',
|
||||
vod_content: it.content||'',
|
||||
vod_pic: it.pic_url||it.img||'',
|
||||
};
|
||||
let keys = Object.keys(it);
|
||||
if(keys.includes('tname')){
|
||||
obj.type_name = it.tname||'';
|
||||
}
|
||||
if(keys.includes('tid')){
|
||||
obj.type_id = it.tid||'';
|
||||
}
|
||||
if(keys.includes('year')){
|
||||
obj.vod_year = it.year||'';
|
||||
}
|
||||
if(keys.includes('actor')){
|
||||
obj.vod_actor = it.actor||'';
|
||||
}
|
||||
if(keys.includes('director')){
|
||||
obj.vod_director = it.director||'';
|
||||
}
|
||||
if(keys.includes('area')){
|
||||
obj.vod_area = it.area||'';
|
||||
}
|
||||
VODS.push(obj);
|
||||
});
|
||||
return VODS
|
||||
}
|
||||
function setResult2(res){
|
||||
VODS = res.list||[];
|
||||
return VODS
|
||||
}
|
||||
function setHomeResult(res){
|
||||
if(!res||typeof(res)!=='object'){
|
||||
return []
|
||||
}
|
||||
return setResult(res.list);
|
||||
}
|
||||
// 猫了个咪
|
||||
function rc(js) {
|
||||
if (js === 'maomi_aes.js') {
|
||||
var a = CryptoJS.enc.Utf8.parse("625222f9149e961d");
|
||||
var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");
|
||||
return {
|
||||
De: function (word) {
|
||||
word = CryptoJS.enc.Hex.parse(word)
|
||||
return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, {
|
||||
iv: t,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}).toString(CryptoJS.enc.Utf8)
|
||||
},
|
||||
En: function (word) {
|
||||
// print(a);
|
||||
// print(word);
|
||||
var Encrypted = CryptoJS.AES.encrypt(word, a, {
|
||||
iv: t,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
});
|
||||
return Encrypted.ciphertext.toString();
|
||||
}
|
||||
};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// 千万不要用for in 推荐 forEach (for in 会打乱顺序)
|
||||
//猫函数
|
||||
function maoss(jxurl, ref, key) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
eval(getCryptoJS());
|
||||
try {
|
||||
var getVideoInfo = function (text) {
|
||||
return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
|
||||
};
|
||||
var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key;
|
||||
if (ref) {
|
||||
var html = request(jxurl, {
|
||||
headers: {
|
||||
'Referer': ref
|
||||
}
|
||||
});
|
||||
} else {
|
||||
var html = request(jxurl);
|
||||
}
|
||||
// print(html);
|
||||
if (html.indexOf('&btwaf=') != -1) {
|
||||
html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], {
|
||||
headers: {
|
||||
'Referer': ref
|
||||
}
|
||||
})
|
||||
}
|
||||
var token_iv = html.split('_token = "')[1].split('"')[0];
|
||||
var key = CryptoJS.enc.Utf8.parse(token_key);
|
||||
var iv = CryptoJS.enc.Utf8.parse(token_iv);
|
||||
// log("iv:"+iv);
|
||||
// log(html);
|
||||
// print(key);
|
||||
// print(iv);
|
||||
eval(html.match(/var config = {[\s\S]*?}/)[0] + '');
|
||||
// config.url = config.url.replace(/,/g,'');
|
||||
// print(config.url);
|
||||
if (!config.url.startsWith('http')) {
|
||||
//config.url = decodeURIComponent(AES(config.url, key, iv));
|
||||
config.url = CryptoJS.AES.decrypt(config.url, key, {
|
||||
iv: iv,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}).toString(CryptoJS.enc.Utf8)
|
||||
}
|
||||
return config.url;
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function urlencode (str) {
|
||||
str = (str + '').toString();
|
||||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
|
||||
replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||||
}
|
||||
|
||||
function base64Encode(text){
|
||||
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
|
||||
// return text
|
||||
}
|
||||
|
||||
function base64Decode(text){
|
||||
return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text));
|
||||
// return text
|
||||
}
|
||||
|
||||
function md5(text) {
|
||||
return CryptoJS.MD5(text).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串按指定编码
|
||||
* @param input
|
||||
* @param encoding
|
||||
* @returns {*}
|
||||
*/
|
||||
function encodeStr(input,encoding){
|
||||
encoding = encoding||'gbk';
|
||||
if(encoding.startsWith('gb')){
|
||||
const strTool = gbkTool();
|
||||
input = strTool.encode(input);
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串指定解码
|
||||
* @param input
|
||||
* @param encoding
|
||||
* @returns {*}
|
||||
*/
|
||||
function decodeStr(input,encoding){
|
||||
encoding = encoding||'gbk';
|
||||
if(encoding.startsWith('gb')){
|
||||
const strTool = gbkTool();
|
||||
input = strTool.decode(input);
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
function getCryptoJS(){
|
||||
// return request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-hiker.js');
|
||||
return 'console.log("CryptoJS已装载");'
|
||||
}
|
||||
|
||||
// 封装的RSA加解密类
|
||||
const RSA = {
|
||||
encode:function (data,key,option){
|
||||
// log('encode');
|
||||
if(typeof(rsaEncrypt)==='function'){
|
||||
if(!option||typeof(option)!=='object'){
|
||||
return rsaEncrypt(data,key);
|
||||
}else{
|
||||
return rsaEncrypt(data,key,option);
|
||||
}
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
},
|
||||
decode:function (data,key,option){
|
||||
// log('decode');
|
||||
if(typeof(rsaDecrypt)==='function'){
|
||||
if(!option||typeof(option)!=='object'){
|
||||
return rsaDecrypt(data,key);
|
||||
}else{
|
||||
return rsaDecrypt(data,key,option);
|
||||
}
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取壳子返回的代理地址
|
||||
* @returns {string|*}
|
||||
*/
|
||||
function getProxyUrl(){
|
||||
if(typeof(getProxy)==='function'){//判断壳子里有getProxy函数就执行取返回结果。否则取默认的本地
|
||||
return getProxy(true)
|
||||
}else{
|
||||
return 'http://127.0.0.1:9978/proxy?do=js'
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制正序算法
|
||||
* @param lists 待正序列表
|
||||
* @param key 正序键
|
||||
* @param option 单个元素处理函数
|
||||
* @returns {*}
|
||||
*/
|
||||
function forceOrder(lists,key,option){
|
||||
let start = Math.floor(lists.length/2);
|
||||
let end = Math.min(lists.length-1,start+1);
|
||||
if(start >= end){
|
||||
return lists;
|
||||
}
|
||||
let first = lists[start];
|
||||
let second = lists[end];
|
||||
if(key){
|
||||
try {
|
||||
first = first[key];
|
||||
second = second[key];
|
||||
}catch (e) {}
|
||||
}
|
||||
if(option && typeof(option)==='function'){
|
||||
try {
|
||||
first = option(first);
|
||||
second = option(second);
|
||||
}catch (e) {}
|
||||
}
|
||||
first+='';
|
||||
second+='';
|
||||
// console.log(first,second);
|
||||
if(first.match(/(\d+)/)&&second.match(/(\d+)/)){
|
||||
let num1 = Number(first.match(/(\d+)/)[1]);
|
||||
let num2 = Number(second.match(/(\d+)/)[1]);
|
||||
if (num1 > num2){
|
||||
lists.reverse();
|
||||
}
|
||||
}
|
||||
return lists
|
||||
}
|
||||
|
||||
|
||||
let VODS = [];// 一级或者搜索需要的数据列表
|
||||
let VOD = {};// 二级的单个数据
|
||||
let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
|
||||
let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']]
|
||||
globalThis.encodeUrl = urlencode;
|
||||
globalThis.urlencode = urlencode;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* url拼接
|
||||
* @param fromPath 初始当前页面url
|
||||
* @param nowPath 相对当前页面url
|
||||
* @returns {*}
|
||||
*/
|
||||
function urljoin(fromPath, nowPath) {
|
||||
fromPath = fromPath||'';
|
||||
nowPath = nowPath||'';
|
||||
return joinUrl(fromPath, nowPath);
|
||||
// try {
|
||||
// // import Uri from './uri.min.js';
|
||||
// // var Uri = require('./uri.min.js');
|
||||
// // eval(request('https://cdn.bootcdn.net/ajax/libs/URI.js/1.19.11/URI.min.js'));
|
||||
// // let new_uri = URI(nowPath, fromPath);
|
||||
|
||||
// let new_uri = Uri(nowPath, fromPath);
|
||||
// new_uri = new_uri.toString();
|
||||
// // console.log(new_uri);
|
||||
// // return fromPath + nowPath
|
||||
// return new_uri
|
||||
// }
|
||||
// catch (e) {
|
||||
// console.log('urljoin发生错误:'+e.message);
|
||||
// if(nowPath.startsWith('http')){
|
||||
// return nowPath
|
||||
// }if(nowPath.startsWith('/')){
|
||||
// return getHome(fromPath)+nowPath
|
||||
// }
|
||||
// return fromPath+nowPath
|
||||
// }
|
||||
}
|
||||
var urljoin2 = urljoin;
|
||||
|
||||
// 内置 pdfh,pdfa,pd
|
||||
const defaultParser = {
|
||||
pdfh:pdfh,
|
||||
pdfa:pdfa,
|
||||
pd(html,parse,uri){
|
||||
let ret = this.pdfh(html,parse);
|
||||
if(typeof(uri)==='undefined'||!uri){
|
||||
uri = '';
|
||||
}
|
||||
if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){
|
||||
if(/http/.test(ret)){
|
||||
ret = ret.substr(ret.indexOf('http'));
|
||||
}else{
|
||||
ret = urljoin(MY_URL,ret)
|
||||
}
|
||||
}
|
||||
return ret
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* pdfh原版优化,能取style属性里的图片链接
|
||||
* @param html 源码
|
||||
* @param parse 解析表达式
|
||||
* @returns {string|*}
|
||||
*/
|
||||
function pdfh2(html,parse){
|
||||
let html2 = html;
|
||||
try {
|
||||
if(typeof(html)!=='string'){
|
||||
html2 = html.rr(html.ele).toString();
|
||||
}
|
||||
}catch (e) {
|
||||
print('html对象转文本发生了错误:'+e.message);
|
||||
}
|
||||
let result = defaultParser.pdfh(html2,parse);
|
||||
let option = parse.includes('&&')?parse.split('&&').slice(-1)[0]:parse.split(' ').slice(-1)[0];
|
||||
if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){
|
||||
try {
|
||||
result = result.match(/url\((.*?)\)/)[1];
|
||||
// 2023/07/28新增 style取内部链接自动去除首尾单双引号
|
||||
result = result.replace(/^['|"](.*)['|"]$/, "$1");
|
||||
}catch (e) {}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* pdfa原版优化,可以转换jq的html对象
|
||||
* @param html
|
||||
* @param parse
|
||||
* @returns {*}
|
||||
*/
|
||||
function pdfa2(html,parse){
|
||||
let html2 = html;
|
||||
try {
|
||||
if(typeof(html)!=='string'){
|
||||
html2 = html.rr(html.ele).toString();
|
||||
}
|
||||
}catch (e) {
|
||||
print('html对象转文本发生了错误:'+e.message);
|
||||
}
|
||||
return defaultParser.pdfa(html2,parse);
|
||||
}
|
||||
|
||||
/**
|
||||
* pd原版方法重写-增加自动urljoin
|
||||
* @param html
|
||||
* @param parse
|
||||
* @param uri
|
||||
* @returns {*}
|
||||
*/
|
||||
function pd2(html,parse,uri){
|
||||
let ret = pdfh2(html,parse);
|
||||
if(typeof(uri)==='undefined'||!uri){
|
||||
uri = '';
|
||||
}
|
||||
if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){
|
||||
if(/http/.test(ret)){
|
||||
ret = ret.substr(ret.indexOf('http'));
|
||||
}else{
|
||||
ret = urljoin(MY_URL,ret)
|
||||
}
|
||||
}
|
||||
// MY_URL = getItem('MY_URL',MY_URL);
|
||||
// console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`);
|
||||
return ret
|
||||
}
|
||||
|
||||
const parseTags = {
|
||||
jsp:{
|
||||
pdfh:pdfh2,
|
||||
pdfa:pdfa2,
|
||||
pd:pd2,
|
||||
},
|
||||
json:{
|
||||
pdfh(html, parse) {
|
||||
if (!parse || !parse.trim()){
|
||||
return '';
|
||||
}
|
||||
if (typeof(html) === 'string'){
|
||||
// print('jsonpath:pdfh字符串转dict');
|
||||
html = JSON.parse(html);
|
||||
}
|
||||
parse = parse.trim();
|
||||
if (!parse.startsWith('$.')){
|
||||
parse = '$.' + parse;
|
||||
}
|
||||
parse = parse.split('||');
|
||||
for (let ps of parse) {
|
||||
let ret = cheerio.jp(ps, html);
|
||||
if (Array.isArray(ret)){
|
||||
ret = ret[0] || '';
|
||||
} else{
|
||||
ret = ret || ''
|
||||
}
|
||||
if (ret && typeof (ret) !== 'string'){
|
||||
ret = ret.toString();
|
||||
}
|
||||
if(ret){
|
||||
return ret
|
||||
}
|
||||
}
|
||||
return '';
|
||||
},
|
||||
pdfa(html, parse) {
|
||||
if (!parse || !parse.trim()){
|
||||
return '';
|
||||
}
|
||||
if (typeof(html) === 'string'){
|
||||
// print('jsonpath:pdfa字符串转dict');
|
||||
html = JSON.parse(html);
|
||||
}
|
||||
parse = parse.trim()
|
||||
if (!parse.startsWith('$.')){
|
||||
parse = '$.' + parse;
|
||||
}
|
||||
let ret = cheerio.jp(parse, html);
|
||||
if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1){
|
||||
return ret[0] || []
|
||||
}
|
||||
return ret || []
|
||||
},
|
||||
pd(html,parse){
|
||||
let ret = parseTags.json.pdfh(html,parse);
|
||||
if(ret){
|
||||
return urljoin(MY_URL,ret);
|
||||
}
|
||||
return ret
|
||||
},
|
||||
},
|
||||
jq:{
|
||||
pdfh(html, parse, base_url) {
|
||||
if (!parse || !parse.trim()) {
|
||||
return ''
|
||||
}
|
||||
let eleFind = typeof html === 'object';
|
||||
let option = undefined;
|
||||
if (eleFind && parse.startsWith('body&&')) {
|
||||
parse = parse.substr(6);
|
||||
if (parse.indexOf('&&') < 0) {
|
||||
option = parse.trim();
|
||||
parse = '*=*';
|
||||
}
|
||||
}
|
||||
if (parse.indexOf('&&') > -1) {
|
||||
let sp = parse.split('&&');
|
||||
option = sp[sp.length - 1];
|
||||
sp.splice(sp.length - 1);
|
||||
if (sp.length > 1) {
|
||||
for (let i in sp) {
|
||||
//Javascript自定义Array.prototype干扰for-in循环
|
||||
if(sp.hasOwnProperty(i)){
|
||||
if (!SELECT_REGEX.test(sp[i])) {
|
||||
sp[i] = sp[i] + ':eq(0)';
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!SELECT_REGEX.test(sp[0])) {
|
||||
sp[0] = sp[0] + ':eq(0)';
|
||||
}
|
||||
}
|
||||
parse = sp.join(' ');
|
||||
}
|
||||
let result = '';
|
||||
const $ = eleFind ? html.rr : cheerio.load(html);
|
||||
let ret = eleFind ? ((parse === '*=*' || $(html.ele).is(parse)) ? html.ele : $(html.ele).find(parse)) : $(parse);
|
||||
if (option) {
|
||||
if (option === 'Text') {
|
||||
result = $(ret).text();
|
||||
}
|
||||
else if (option === 'Html') {
|
||||
result = $(ret).html();
|
||||
}
|
||||
else {
|
||||
result = $(ret).attr(option);
|
||||
if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){
|
||||
try {
|
||||
result = result.match(/url\((.*?)\)/)[1];
|
||||
// 2023/07/28新增 style取内部链接自动去除首尾单双引号
|
||||
result = result.replace(/^['|"](.*)['|"]$/, "$1");
|
||||
}catch (e) {}
|
||||
}
|
||||
}
|
||||
if (result && base_url && DOM_CHECK_ATTR.test(option) && !SPECIAL_URL.test(result)) {
|
||||
if (/http/.test(result)) {
|
||||
result = result.substr(result.indexOf('http'));
|
||||
} else {
|
||||
result = urljoin(base_url, result)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
result = $(ret).toString();
|
||||
}
|
||||
return result;
|
||||
},
|
||||
pdfa(html, parse) {
|
||||
if (!parse || !parse.trim()) {
|
||||
print('!parse');
|
||||
return [];
|
||||
}
|
||||
let eleFind = typeof html === 'object';
|
||||
// print('parse前:'+parse);
|
||||
if (parse.indexOf('&&') > -1) {
|
||||
let sp = parse.split('&&');
|
||||
for (let i in sp) {
|
||||
if(sp.hasOwnProperty(i)){
|
||||
if (!SELECT_REGEX_A.test(sp[i]) && i < sp.length - 1) {
|
||||
if(sp[i]!=='body'){
|
||||
// sp[i] = sp[i] + ':eq(0)';
|
||||
sp[i] = sp[i] + ':first';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
parse = sp.join(' ');
|
||||
}
|
||||
// print('parse后:'+parse);
|
||||
const $ = eleFind ? html.rr : cheerio.load(html);
|
||||
let ret = eleFind ? ($(html.ele).is(parse) ? html.ele : $(html.ele).find(parse)) : $(parse);
|
||||
let result = [];
|
||||
// print('outerHTML:');
|
||||
// print($(ret[0]).prop("outerHTML"));
|
||||
if (ret) {
|
||||
ret.each(function (idx, ele) {
|
||||
result.push({ rr: $, ele: ele });
|
||||
// result.push({ rr: $, ele: $(ele).prop("outerHTML")}); // 性能贼差
|
||||
});
|
||||
}
|
||||
return result;
|
||||
},
|
||||
pd(html,parse,uri){
|
||||
return parseTags.jq.pdfh(html, parse, MY_URL);
|
||||
},
|
||||
},
|
||||
getParse(p0){//非js开头的情况自动获取解析标签
|
||||
if(p0.startsWith('jsp:')){
|
||||
return this.jsp
|
||||
}else if(p0.startsWith('json:')){
|
||||
return this.json
|
||||
}else if(p0.startsWith('jq:')){
|
||||
return this.jq
|
||||
}else {
|
||||
return this.jq
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const stringify = JSON.stringify;
|
||||
const jsp = parseTags.jsp;
|
||||
const jq = parseTags.jq;
|
||||
|
||||
/*** 后台需要实现的java方法并注入到js中 ***/
|
||||
|
||||
/**
|
||||
* 读取本地文件->应用程序目录
|
||||
* @param filePath
|
||||
* @returns {string}
|
||||
*/
|
||||
function readFile(filePath){
|
||||
filePath = filePath||'./uri.min.js';
|
||||
var fd = os.open(filePath);
|
||||
var buffer = new ArrayBuffer(1024);
|
||||
var len = os.read(fd, buffer, 0, 1024);
|
||||
console.log(len);
|
||||
let text = String.fromCharCode.apply(null, new Uint8Array(buffer));
|
||||
console.log(text);
|
||||
return text
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理返回的json数据
|
||||
* @param html
|
||||
* @returns {*}
|
||||
*/
|
||||
function dealJson(html) {
|
||||
try {
|
||||
// html = html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1];
|
||||
html = html.trim();
|
||||
if(!((html.startsWith('{') && html.endsWith('}'))||(html.startsWith('[') && html.endsWith(']')))){
|
||||
html = '{'+html.match(/.*?\{(.*)\}/m)[1]+'}';
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
try {
|
||||
html = JSON.parse(html);
|
||||
}catch (e) {}
|
||||
// console.log(typeof(html));
|
||||
return html;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口)
|
||||
* @type {{api: string, classification: (function(*=): string)}}
|
||||
*/
|
||||
var OcrApi={
|
||||
api:OCR_API,
|
||||
classification:function (img){ // img是byte类型,这里不方便搞啊
|
||||
let code = '';
|
||||
try {
|
||||
// let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
|
||||
// html = JSON.parse(html);
|
||||
// code = html.url||'';
|
||||
log('通过drpy_ocr验证码接口过验证...');
|
||||
let html = request(OCR_API,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
|
||||
code = html||'';
|
||||
}catch (e) {}
|
||||
return code
|
||||
}
|
||||
};
|
||||
/**
|
||||
* 验证码识别,暂未实现
|
||||
* @param url 验证码图片链接
|
||||
* @returns {string} 验证成功后的cookie
|
||||
*/
|
||||
function verifyCode(url){
|
||||
let cnt = 0;
|
||||
let host = getHome(url);
|
||||
let cookie = '';
|
||||
while (cnt < OCR_RETRY){
|
||||
try{
|
||||
// let obj = {headers:headers,timeout:timeout};
|
||||
let yzm_url = `${host}/index.php/verify/index.html`;
|
||||
console.log(`验证码链接:${yzm_url}`);
|
||||
let hhtml = request(yzm_url,{withHeaders:true,toBase64:true},true);
|
||||
let json = JSON.parse(hhtml);
|
||||
if(!cookie){
|
||||
// print(json);
|
||||
let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie');
|
||||
// cookie = json['set-cookie']?json['set-cookie'].split(';')[0]:'';
|
||||
cookie = setCk?json[setCk].split(';')[0]:'';
|
||||
}
|
||||
// console.log(hhtml);
|
||||
console.log('cookie:'+cookie);
|
||||
let img = json.body;
|
||||
// console.log(img);
|
||||
let code = OcrApi.classification(img);
|
||||
console.log(`第${cnt+1}次验证码识别结果:${code}`);
|
||||
let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`;
|
||||
console.log(submit_url);
|
||||
let html = request(submit_url,{headers:{Cookie:cookie,'User-Agent':MOBILE_UA},'method':'POST'});
|
||||
// console.log(html);
|
||||
html = JSON.parse(html);
|
||||
if(html.msg === 'ok'){
|
||||
console.log(`第${cnt+1}次验证码提交成功`);
|
||||
return cookie // 需要返回cookie
|
||||
}else if(html.msg!=='ok'&&cnt+1>=OCR_RETRY){
|
||||
cookie = ''; // 需要清空返回cookie
|
||||
}
|
||||
}catch (e) {
|
||||
console.log(`第${cnt+1}次验证码提交失败:${e.message}`);
|
||||
if(cnt+1>=OCR_RETRY){
|
||||
cookie = '';
|
||||
}
|
||||
}
|
||||
cnt+=1
|
||||
}
|
||||
return cookie
|
||||
}
|
||||
|
||||
/**
|
||||
* 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存
|
||||
* @param k 键
|
||||
* @param v 值
|
||||
*/
|
||||
function setItem(k,v){
|
||||
local.set(RKEY,k,v);
|
||||
console.log(`规则${RKEY}设置${k} => ${v}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里
|
||||
* @param k 键
|
||||
* @param v 值
|
||||
* @returns {*}
|
||||
*/
|
||||
function getItem(k,v){
|
||||
return local.get(RKEY,k) || v;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据库key对应的一条数据,并清除此key对应的内存缓存
|
||||
* @param k
|
||||
*/
|
||||
function clearItem(k){
|
||||
local.delete(RKEY,k);
|
||||
}
|
||||
|
||||
/*** js自封装的方法 ***/
|
||||
|
||||
/**
|
||||
* 获取链接的host(带http协议的完整链接)
|
||||
* @param url 任意一个正常完整的Url,自动提取根
|
||||
* @returns {string}
|
||||
*/
|
||||
function getHome(url){
|
||||
if(!url){
|
||||
return ''
|
||||
}
|
||||
let tmp = url.split('//');
|
||||
url = tmp[0] + '//' + tmp[1].split('/')[0];
|
||||
try {
|
||||
url = decodeURIComponent(url);
|
||||
}catch (e) {}
|
||||
return url
|
||||
}
|
||||
|
||||
/**
|
||||
* get参数编译链接,类似python params字典自动拼接
|
||||
* @param url 访问链接
|
||||
* @param obj 参数字典
|
||||
* @returns {*}
|
||||
*/
|
||||
function buildUrl(url,obj){
|
||||
obj = obj||{};
|
||||
if(url.indexOf('?')<0){
|
||||
url += '?'
|
||||
}
|
||||
let param_list = [];
|
||||
let keys = Object.keys(obj);
|
||||
keys.forEach(it=>{
|
||||
param_list.push(it+'='+obj[it])
|
||||
});
|
||||
let prs = param_list.join('&');
|
||||
if(keys.length > 0 && !url.endsWith('?')){
|
||||
url += '&'
|
||||
}
|
||||
url+=prs;
|
||||
return url
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程依赖执行函数
|
||||
* @param url 远程js地址
|
||||
*/
|
||||
function require(url){
|
||||
eval(request(url));
|
||||
}
|
||||
/**
|
||||
* 海阔网页请求函数完整封装
|
||||
* @param url 请求链接
|
||||
* @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false}
|
||||
* @param ocr_flag 标识此flag是用于请求ocr识别的,自动过滤content-type指定编码
|
||||
* @returns {string|string|DocumentFragment|*}
|
||||
*/
|
||||
function request(url,obj,ocr_flag){
|
||||
ocr_flag = ocr_flag||false;
|
||||
if(typeof(obj)==='undefined'||!obj||obj==={}){
|
||||
if(!fetch_params||!fetch_params.headers){
|
||||
let headers = {
|
||||
'User-Agent':MOBILE_UA,
|
||||
};
|
||||
if(rule.headers){
|
||||
Object.assign(headers,rule.headers);
|
||||
}
|
||||
if(!fetch_params){
|
||||
fetch_params = {};
|
||||
}
|
||||
fetch_params.headers = headers;
|
||||
}
|
||||
if(!fetch_params.headers.Referer){
|
||||
fetch_params.headers.Referer = getHome(url)
|
||||
}
|
||||
obj = fetch_params;
|
||||
}else{
|
||||
let headers = obj.headers||{};
|
||||
let keys = Object.keys(headers).map(it=>it.toLowerCase());
|
||||
if(!keys.includes('user-agent')){
|
||||
headers['User-Agent'] = MOBILE_UA;
|
||||
}if(!keys.includes('referer')){
|
||||
headers['Referer'] = getHome(url);
|
||||
}
|
||||
obj.headers = headers;
|
||||
}
|
||||
if(rule.encoding&&rule.encoding!=='utf-8'&&!ocr_flag){
|
||||
if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
|
||||
obj.headers["Content-Type"] = 'text/html; charset='+rule.encoding;
|
||||
}
|
||||
}
|
||||
if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){
|
||||
// let data = {};
|
||||
// obj.body.split('&').forEach(it=>{
|
||||
// data[it.split('=')[0]] = it.split('=')[1]
|
||||
// });
|
||||
// obj.data = data;
|
||||
// delete obj.body
|
||||
|
||||
// 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form
|
||||
if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
|
||||
obj.headers["Content-Type"] = 'application/x-www-form-urlencoded; charset='+rule.encoding;
|
||||
}
|
||||
}else if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='object'){
|
||||
obj.data = obj.body;
|
||||
delete obj.body
|
||||
}
|
||||
if(!url){
|
||||
return obj.withHeaders?'{}':''
|
||||
}
|
||||
if(obj.toBase64){ // 返回base64,用于请求图片
|
||||
obj.buffer = 2;
|
||||
delete obj.toBase64
|
||||
}
|
||||
if(obj.redirect===false){
|
||||
obj.redirect = 0;
|
||||
}
|
||||
console.log(JSON.stringify(obj.headers));
|
||||
// console.log('request:'+url+' obj:'+JSON.stringify(obj));
|
||||
console.log('request:'+url+`|method:${obj.method||'GET'}|body:${obj.body||''}`);
|
||||
let res = req(url, obj);
|
||||
let html = res.content||'';
|
||||
// console.log(html);
|
||||
if(obj.withHeaders){
|
||||
let htmlWithHeaders = res.headers;
|
||||
htmlWithHeaders.body = html;
|
||||
return JSON.stringify(htmlWithHeaders);
|
||||
}else{
|
||||
return html
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 快捷post请求
|
||||
* @param url 地址
|
||||
* @param obj 对象
|
||||
* @returns {string|DocumentFragment|*}
|
||||
*/
|
||||
function post(url,obj){
|
||||
obj.method = 'POST';
|
||||
return request(url,obj);
|
||||
}
|
||||
|
||||
fetch = request;
|
||||
print = function (data){
|
||||
data = data||'';
|
||||
if(typeof(data)=='object'&&Object.keys(data).length>0){
|
||||
try {
|
||||
data = JSON.stringify(data);
|
||||
console.log(data);
|
||||
}catch (e) {
|
||||
// console.log('print:'+e.message);
|
||||
console.log(typeof(data)+':'+data.length);
|
||||
return
|
||||
}
|
||||
}else if(typeof(data)=='object'&&Object.keys(data).length<1){
|
||||
console.log('null object');
|
||||
}else{
|
||||
console.log(data);
|
||||
}
|
||||
}
|
||||
log = print;
|
||||
/**
|
||||
* 检查宝塔验证并自动跳过获取正确源码
|
||||
* @param html 之前获取的html
|
||||
* @param url 之前的来源url
|
||||
* @param obj 来源obj
|
||||
* @returns {string|DocumentFragment|*}
|
||||
*/
|
||||
function checkHtml(html,url,obj){
|
||||
if(/\?btwaf=/.test(html)){
|
||||
let btwaf = html.match(/btwaf(.*?)"/)[1];
|
||||
url = url.split('#')[0]+'?btwaf'+btwaf;
|
||||
print('宝塔验证访问链接:'+url);
|
||||
html = request(url,obj);
|
||||
}
|
||||
return html
|
||||
}
|
||||
|
||||
/**
|
||||
* 带一次宝塔验证的源码获取
|
||||
* @param url 请求链接
|
||||
* @param obj 请求参数
|
||||
* @returns {string|DocumentFragment}
|
||||
*/
|
||||
function getCode(url,obj){
|
||||
let html = request(url,obj);
|
||||
html = checkHtml(html,url,obj);
|
||||
return html
|
||||
}
|
||||
|
||||
/**
|
||||
* 源rule专用的请求方法,自动注入cookie
|
||||
* @param url 请求链接
|
||||
* @returns {string|DocumentFragment}
|
||||
*/
|
||||
function getHtml(url){
|
||||
let obj = {};
|
||||
if(rule.headers){
|
||||
obj.headers = rule.headers;
|
||||
}
|
||||
let cookie = getItem(RULE_CK,'');
|
||||
if(cookie){
|
||||
// log('有cookie:'+cookie);
|
||||
if(obj.headers && ! Object.keys(obj.headers).map(it=>it.toLowerCase()).includes('cookie')){
|
||||
log('历史无cookie,新增过验证后的cookie');
|
||||
obj.headers['Cookie'] = cookie;
|
||||
}else if(obj.headers && obj.headers.cookie && obj.headers.cookie!==cookie){
|
||||
obj.headers['Cookie'] = cookie;
|
||||
log('历史有小写过期的cookie,更新过验证后的cookie');
|
||||
}else if(obj.headers && obj.headers.Cookie && obj.headers.Cookie!==cookie){
|
||||
obj.headers['Cookie'] = cookie;
|
||||
log('历史有大写过期的cookie,更新过验证后的cookie');
|
||||
}else if(!obj.headers){
|
||||
obj.headers = {Cookie:cookie};
|
||||
log('历史无headers,更新过验证后的含cookie的headers');
|
||||
}
|
||||
}
|
||||
let html = getCode(url,obj);
|
||||
return html
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页分类解析,筛选暂未实现
|
||||
* @param homeObj 首页传参对象
|
||||
* @returns {string}
|
||||
*/
|
||||
function homeParse(homeObj) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let classes = [];
|
||||
if (homeObj.class_name && homeObj.class_url) {
|
||||
let names = homeObj.class_name.split('&');
|
||||
let urls = homeObj.class_url.split('&');
|
||||
let cnt = Math.min(names.length, urls.length);
|
||||
for (let i = 0; i < cnt; i++) {
|
||||
classes.push({
|
||||
'type_id': urls[i],
|
||||
'type_name': names[i]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (homeObj.class_parse) {
|
||||
let p = homeObj.class_parse.split(';');
|
||||
let _ps = parseTags.getParse(p[0]);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
MY_URL = rule.url;
|
||||
if (p.length >= 3) { // 可以不写正则
|
||||
try {
|
||||
let html = getHtml(homeObj.MY_URL);
|
||||
if (html) {
|
||||
homeHtmlCache = html;
|
||||
let list = _pdfa(html, p[0]);
|
||||
if (list && list.length > 0) {
|
||||
list.forEach((it,idex) => {
|
||||
try {
|
||||
let name = _pdfh(it, p[1]);
|
||||
if (homeObj.cate_exclude && (new RegExp(homeObj.cate_exclude).test(name))) {
|
||||
return;
|
||||
}
|
||||
// let url = pdfh(it, p[2]);
|
||||
let url = _pd(it, p[2]);
|
||||
if (p.length > 3 && p[3]) {
|
||||
let exp = new RegExp(p[3]);
|
||||
url = url.match(exp)[1];
|
||||
}
|
||||
|
||||
classes.push({
|
||||
'type_id': url.trim(),
|
||||
'type_name': name.trim()
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// 排除分类
|
||||
classes = classes.filter(it=>!homeObj.cate_exclude || !(new RegExp(homeObj.cate_exclude).test(it.type_name)));
|
||||
let resp = {
|
||||
'class': classes
|
||||
};
|
||||
if(homeObj.filter){
|
||||
resp.filters = homeObj.filter;
|
||||
}
|
||||
console.log(JSON.stringify(resp));
|
||||
return JSON.stringify(resp);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 推荐和搜索单字段继承一级
|
||||
* @param p 推荐或搜索的解析分割;列表
|
||||
* @param pn 自身列表序号
|
||||
* @param pp 一级解析分割;列表
|
||||
* @param ppn 继承一级序号
|
||||
* @returns {*}
|
||||
*/
|
||||
function getPP(p, pn, pp, ppn){
|
||||
try {
|
||||
let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn]
|
||||
return ps
|
||||
}catch (e) {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页推荐列表解析
|
||||
* @param homeVodObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function homeVodParse(homeVodObj){
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let d = [];
|
||||
MY_URL = homeVodObj.homeUrl;
|
||||
// setItem('MY_URL',MY_URL);
|
||||
console.log(MY_URL);
|
||||
let t1 = (new Date()).getTime();
|
||||
let p = homeVodObj.推荐;
|
||||
print('p:'+p);
|
||||
if(p==='*' && rule.一级){
|
||||
p = rule.一级;
|
||||
homeVodObj.double = false;
|
||||
}
|
||||
if(!p||typeof(p)!=='string'){
|
||||
return '{}'
|
||||
}
|
||||
p = p.trim();
|
||||
let pp = rule.一级.split(';');
|
||||
if(p.startsWith('js:')){
|
||||
const TYPE = 'home';
|
||||
var input = MY_URL;
|
||||
HOST = rule.host;
|
||||
eval(p.replace('js:',''));
|
||||
d = VODS;
|
||||
}else {
|
||||
p = p.split(';');
|
||||
if (!homeVodObj.double && p.length < 5) {
|
||||
return '{}'
|
||||
} else if (homeVodObj.double && p.length < 6) {
|
||||
return '{}'
|
||||
}
|
||||
let p0 = getPP(p,0,pp,0)
|
||||
let _ps = parseTags.getParse(p0);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
let is_json = p0.startsWith('json:');
|
||||
p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
|
||||
// print(p[0]);
|
||||
let html = homeHtmlCache || getHtml(MY_URL);
|
||||
homeHtmlCache = undefined;
|
||||
if(is_json){
|
||||
// print('是json,开始处理');
|
||||
html = dealJson(html);
|
||||
}
|
||||
try {
|
||||
console.log('double:' + homeVodObj.double);
|
||||
if (homeVodObj.double) {
|
||||
let items = _pdfa(html, p0);
|
||||
// console.log(items.length);
|
||||
let p1 = getPP(p,1,pp,0);
|
||||
let p2 = getPP(p,2,pp,1);
|
||||
let p3 = getPP(p,3,pp,2);
|
||||
let p4 = getPP(p,4,pp,3);
|
||||
let p5 = getPP(p,5,pp,4);
|
||||
let p6 = getPP(p,6,pp,5);
|
||||
for (let item of items) {
|
||||
// console.log(p[1]);
|
||||
let items2 = _pdfa(item, p1);
|
||||
// console.log(items2.length);
|
||||
for (let item2 of items2) {
|
||||
try {
|
||||
let title = _pdfh(item2, p2);
|
||||
let img = '';
|
||||
try {
|
||||
img = _pd(item2, p3);
|
||||
} catch (e) {}
|
||||
let desc = '';
|
||||
try {
|
||||
desc = _pdfh(item2, p4);
|
||||
}catch (e) {}
|
||||
let links = [];
|
||||
for (let _p5 of p5.split('+')) {
|
||||
let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5);
|
||||
links.push(link);
|
||||
}
|
||||
let content;
|
||||
if(p.length > 6 && p[6]){
|
||||
content = _pdfh(item2, p6);
|
||||
} else{
|
||||
content = '';
|
||||
}
|
||||
let vid = links.join('$');
|
||||
if(rule.二级==='*'){
|
||||
vid = vid+'@@'+title+'@@'+img;
|
||||
}
|
||||
let vod = {
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: desc,
|
||||
vod_content: content,
|
||||
vod_id: vid
|
||||
};
|
||||
// print(vod);
|
||||
d.push(vod);
|
||||
} catch (e) {
|
||||
console.log('首页列表处理发生错误:'+e.message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
let items = _pdfa(html, p0);
|
||||
let p1 = getPP(p,1,pp,1);
|
||||
let p2 = getPP(p,2,pp,2);
|
||||
let p3 = getPP(p,3,pp,3);
|
||||
let p4 = getPP(p,4,pp,4);
|
||||
let p5 = getPP(p,5,pp,5);
|
||||
for (let item of items) {
|
||||
try {
|
||||
let title = _pdfh(item, p1);
|
||||
let img = '';
|
||||
try {
|
||||
img = _pd(item, p2, MY_URL);
|
||||
} catch (e) {}
|
||||
let desc = '';
|
||||
try {
|
||||
desc = _pdfh(item, p3);
|
||||
}catch (e) {}
|
||||
let links = [];
|
||||
for (let _p5 of p4.split('+')) {
|
||||
let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5);
|
||||
links.push(link);
|
||||
}
|
||||
let content;
|
||||
if(p.length > 5 && p[5]){
|
||||
content = _pdfh(item, p5);
|
||||
}else{
|
||||
content = ''
|
||||
}
|
||||
let vid = links.join('$');
|
||||
if(rule.二级==='*'){
|
||||
vid = vid+'@@'+title+'@@'+img;
|
||||
}
|
||||
let vod = {
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: desc,
|
||||
vod_content: content,
|
||||
vod_id: vid
|
||||
};
|
||||
d.push(vod);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
let t2 = (new Date()).getTime();
|
||||
console.log('加载首页推荐耗时:'+(t2-t1)+'毫秒');
|
||||
// console.log(JSON.stringify(d));
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(rule.图片来源){
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic + rule.图片来源;
|
||||
}
|
||||
});
|
||||
}
|
||||
if(d.length>0){
|
||||
print(d.slice(0,2));
|
||||
}
|
||||
return JSON.stringify({
|
||||
list:d
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 一级分类页数据解析
|
||||
* @param cateObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function categoryParse(cateObj) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let p = cateObj.一级;
|
||||
if(!p||typeof(p)!=='string'){
|
||||
return '{}'
|
||||
}
|
||||
let d = [];
|
||||
// let url = cateObj.url.replaceAll('fyclass', cateObj.tid).replaceAll('fypage', cateObj.pg);
|
||||
let url = cateObj.url.replaceAll('fyclass', cateObj.tid);
|
||||
if(cateObj.pg === 1 && url.includes('[')&&url.includes(']')){
|
||||
url = url.split('[')[1].split(']')[0];
|
||||
}else if(cateObj.pg > 1 && url.includes('[')&&url.includes(']')){
|
||||
url = url.split('[')[0];
|
||||
}
|
||||
if(rule.filter_url){
|
||||
if(!/fyfilter/.test(url)){
|
||||
if(!url.endsWith('&')&&!rule.filter_url.startsWith('&')){
|
||||
url+='&'
|
||||
}
|
||||
url+=rule.filter_url;
|
||||
}else{
|
||||
url = url.replace('fyfilter', rule.filter_url);
|
||||
}
|
||||
// console.log('filter:'+cateObj.filter);
|
||||
let fl = cateObj.filter?cateObj.extend:{};
|
||||
// 自动合并 不同分类对应的默认筛选
|
||||
if(rule.filter_def && typeof(rule.filter_def)==='object'){
|
||||
try {
|
||||
if(Object.keys(rule.filter_def).length>0 && rule.filter_def.hasOwnProperty(cateObj.tid)){
|
||||
let self_fl_def = rule.filter_def[cateObj.tid];
|
||||
if(self_fl_def && typeof(self_fl_def)==='object'){
|
||||
// 引用传递转值传递,避免污染self变量
|
||||
let fl_def = JSON.parse(JSON.stringify(self_fl_def));
|
||||
fl = Object.assign(fl_def,fl);
|
||||
}
|
||||
}
|
||||
}catch (e) {
|
||||
print('合并不同分类对应的默认筛选出错:'+e.message);
|
||||
}
|
||||
}
|
||||
let new_url;
|
||||
new_url = cheerio.jinja2(url,{fl:fl});
|
||||
// console.log('jinjia2执行后的new_url类型为:'+typeof(new_url));
|
||||
if(/object Object/.test(new_url)){
|
||||
new_url = drT.renderText(url,fl);
|
||||
}
|
||||
url = new_url;
|
||||
}
|
||||
if(/fypage/.test(url)){
|
||||
if(url.includes('(')&&url.includes(')')){
|
||||
let url_rep = url.match(/.*?\((.*)\)/)[1];
|
||||
// console.log(url_rep);
|
||||
let cnt_page = url_rep.replaceAll('fypage', cateObj.pg);
|
||||
// console.log(cnt_page);
|
||||
let cnt_pg = eval(cnt_page);
|
||||
// console.log(cnt_pg);
|
||||
url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
|
||||
}else{
|
||||
url = url.replaceAll('fypage',cateObj.pg);
|
||||
}
|
||||
}
|
||||
|
||||
MY_URL = url;
|
||||
// setItem('MY_URL',MY_URL);
|
||||
console.log(MY_URL);
|
||||
p = p.trim();
|
||||
const MY_CATE = cateObj.tid;
|
||||
if(p.startsWith('js:')){
|
||||
var MY_FL = cateObj.extend;
|
||||
const TYPE = 'cate';
|
||||
var input = MY_URL;
|
||||
const MY_PAGE = cateObj.pg;
|
||||
var desc = '';
|
||||
eval(p.trim().replace('js:',''));
|
||||
d = VODS;
|
||||
}else {
|
||||
p = p.split(';');
|
||||
if (p.length < 5) {
|
||||
return '{}'
|
||||
}
|
||||
let _ps = parseTags.getParse(p[0]);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
let is_json = p[0].startsWith('json:');
|
||||
p[0] = p[0].replace(/^(jsp:|json:|jq:)/,'');
|
||||
try {
|
||||
let html = getHtml(MY_URL);
|
||||
if (html) {
|
||||
if(is_json){
|
||||
html = dealJson(html);
|
||||
}
|
||||
let list = _pdfa(html, p[0]);
|
||||
list.forEach(it => {
|
||||
let links = p[4].split('+').map(p4=>{
|
||||
return !rule.detailUrl?_pd(it, p4,MY_URL):_pdfh(it, p4);
|
||||
});
|
||||
let link = links.join('$');
|
||||
let vod_id = rule.detailUrl?MY_CATE+'$'+link:link;
|
||||
|
||||
let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g,'').trim();
|
||||
let vod_pic = _pd(it, p[2],MY_URL);
|
||||
|
||||
if(rule.二级==='*'){
|
||||
vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
|
||||
}
|
||||
d.push({
|
||||
'vod_id': vod_id,
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic,
|
||||
'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g,'').trim(),
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
}
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(rule.图片来源){
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic + rule.图片来源;
|
||||
}
|
||||
});
|
||||
}
|
||||
// print(d);
|
||||
if(d.length>0){
|
||||
print(d.slice(0,2));
|
||||
}
|
||||
let pagecount = 0;
|
||||
if(rule.pagecount && typeof(rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)){
|
||||
print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);
|
||||
pagecount = parseInt(rule.pagecount[MY_CATE]);
|
||||
}
|
||||
let nodata = {
|
||||
list:[{vod_name:'无数据,防无限请求',vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}],
|
||||
total:1,pagecount:1,page:1,limit:1
|
||||
};
|
||||
let vod = d.length<1?JSON.stringify(nodata):JSON.stringify({
|
||||
'page': parseInt(cateObj.pg),
|
||||
'pagecount': pagecount||999,
|
||||
'limit': 20,
|
||||
'total': 999,
|
||||
'list': d,
|
||||
});
|
||||
// print(vod);
|
||||
return vod
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索列表数据解析
|
||||
* @param searchObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function searchParse(searchObj) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let d = [];
|
||||
if(!searchObj.searchUrl){
|
||||
return '{}'
|
||||
}
|
||||
let p = searchObj.搜索==='*'&&rule.一级 ? rule.一级 : searchObj.搜索;
|
||||
if(!p||typeof(p)!=='string'){
|
||||
return '{}'
|
||||
}
|
||||
p = p.trim();
|
||||
let pp = rule.一级.split(';');
|
||||
let url = searchObj.searchUrl.replaceAll('**', searchObj.wd);
|
||||
if(searchObj.pg === 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
|
||||
url = url.split('[')[1].split(']')[0];
|
||||
}else if(searchObj.pg > 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
|
||||
url = url.split('[')[0];
|
||||
}
|
||||
if(/fypage/.test(url)){
|
||||
if(url.includes('(')&&url.includes(')')){
|
||||
let url_rep = url.match(/.*?\((.*)\)/)[1];
|
||||
// console.log(url_rep);
|
||||
let cnt_page = url_rep.replaceAll('fypage', searchObj.pg);
|
||||
// console.log(cnt_page);
|
||||
let cnt_pg = eval(cnt_page);
|
||||
// console.log(cnt_pg);
|
||||
url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
|
||||
}else{
|
||||
url = url.replaceAll('fypage',searchObj.pg);
|
||||
}
|
||||
}
|
||||
|
||||
MY_URL = url;
|
||||
console.log(MY_URL);
|
||||
// log(searchObj.搜索);
|
||||
// setItem('MY_URL',MY_URL);
|
||||
if(p.startsWith('js:')){
|
||||
const TYPE = 'search';
|
||||
const MY_PAGE = searchObj.pg;
|
||||
const KEY = searchObj.wd;
|
||||
var input = MY_URL;
|
||||
var detailUrl = rule.detailUrl||'';
|
||||
eval(p.trim().replace('js:',''));
|
||||
d = VODS;
|
||||
}else{
|
||||
p = p.split(';');
|
||||
if (p.length < 5) {
|
||||
return '{}'
|
||||
}
|
||||
let p0 = getPP(p,0,pp,0);
|
||||
let _ps = parseTags.getParse(p0);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
let is_json = p0.startsWith('json:');
|
||||
p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
|
||||
// print('1381 p0:'+p0);
|
||||
try {
|
||||
let req_method = MY_URL.split(';').length>1?MY_URL.split(';')[1].toLowerCase():'get';
|
||||
let html;
|
||||
if(req_method==='post'){
|
||||
let rurls = MY_URL.split(';')[0].split('#')
|
||||
let rurl = rurls[0]
|
||||
let params = rurls.length > 1 ?rurls[1]:'';
|
||||
print(`post=》rurl:${rurl},params:${params}`);
|
||||
// let new_dict = {};
|
||||
// let new_tmp = params.split('&');
|
||||
// new_tmp.forEach(i=>{
|
||||
// new_dict[i.split('=')[0]] = i.split('=')[1];
|
||||
// });
|
||||
// html = post(rurl,{body:new_dict});
|
||||
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let postData = {body:params};
|
||||
Object.assign(_fetch_params,postData);
|
||||
html = post(rurl,_fetch_params);
|
||||
}else if(req_method==='postjson'){
|
||||
let rurls = MY_URL.split(';')[0].split('#')
|
||||
let rurl = rurls[0]
|
||||
let params = rurls.length > 1 ?rurls[1]:'';
|
||||
print(`postjson-》rurl:${rurl},params:${params}`);
|
||||
try{
|
||||
params = JSON.parse(params);
|
||||
}catch (e) {
|
||||
params = '{}'
|
||||
}
|
||||
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let postData = {body:params};
|
||||
Object.assign(_fetch_params,postData);
|
||||
html = post(rurl,_fetch_params);
|
||||
}else{
|
||||
html = getHtml(MY_URL);
|
||||
}
|
||||
if (html) {
|
||||
if(/系统安全验证|输入验证码/.test(html)){
|
||||
let cookie = verifyCode(MY_URL);
|
||||
if(cookie){
|
||||
console.log(`本次成功过验证,cookie:${cookie}`);
|
||||
setItem(RULE_CK,cookie);
|
||||
}else{
|
||||
console.log(`本次自动过搜索验证失败,cookie:${cookie}`);
|
||||
}
|
||||
// obj.headers['Cookie'] = cookie;
|
||||
html = getHtml(MY_URL);
|
||||
}
|
||||
if(!html.includes(searchObj.wd)){
|
||||
console.log('搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码');
|
||||
console.log(html);
|
||||
}
|
||||
if(is_json){
|
||||
// console.log(html);
|
||||
html = dealJson(html);
|
||||
// console.log(JSON.stringify(html));
|
||||
}
|
||||
// console.log(html);
|
||||
let list = _pdfa(html, p0);
|
||||
// print(list.length);
|
||||
// print(list);
|
||||
let p1 = getPP(p, 1, pp, 1);
|
||||
let p2 = getPP(p, 2, pp, 2);
|
||||
let p3 = getPP(p, 3, pp, 3);
|
||||
let p4 = getPP(p, 4, pp, 4);
|
||||
let p5 = getPP(p,5,pp,5);
|
||||
list.forEach(it => {
|
||||
let links = p4.split('+').map(_p4=>{
|
||||
return !rule.detailUrl?_pd(it, _p4,MY_URL):_pdfh(it, _p4)
|
||||
});
|
||||
let link = links.join('$');
|
||||
let content;
|
||||
if(p.length > 5 && p[5]){
|
||||
content = _pdfh(it, p5);
|
||||
}else{
|
||||
content = '';
|
||||
}
|
||||
let vod_id = link;
|
||||
let vod_name = _pdfh(it, p1).replace(/\n|\t/g,'').trim();
|
||||
let vod_pic = _pd(it, p2,MY_URL);
|
||||
if(rule.二级==='*'){
|
||||
vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
|
||||
}
|
||||
let ob = {
|
||||
'vod_id': vod_id,
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic,
|
||||
'vod_remarks': _pdfh(it, p3).replace(/\n|\t/g,'').trim(),
|
||||
'vod_content': content.replace(/\n|\t/g,'').trim(),
|
||||
};
|
||||
d.push(ob);
|
||||
});
|
||||
|
||||
}
|
||||
} catch (e) {
|
||||
print('搜索发生错误:'+e.message);
|
||||
return '{}'
|
||||
}
|
||||
}
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(rule.图片来源){
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic + rule.图片来源;
|
||||
}
|
||||
});
|
||||
}
|
||||
// print(d);
|
||||
return JSON.stringify({
|
||||
'page': parseInt(searchObj.pg),
|
||||
'pagecount': 10,
|
||||
'limit': 20,
|
||||
'total': 100,
|
||||
'list': d,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 二级详情页数据解析
|
||||
* @param detailObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function detailParse(detailObj){
|
||||
let t1 = (new Date()).getTime();
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let orId = detailObj.orId;
|
||||
let vod_name = '片名';
|
||||
let vod_pic = '';
|
||||
let vod_id = orId;
|
||||
if(rule.二级==='*'){
|
||||
// vod_id = orId.split('@@')[0]; // 千万不能分割
|
||||
let extra = orId.split('@@');
|
||||
vod_name = extra.length>1?extra[1]:vod_name;
|
||||
vod_pic = extra.length>2?extra[2]:vod_pic;
|
||||
}
|
||||
// print(vod_pic);
|
||||
let vod = {
|
||||
vod_id: vod_id, //"id",
|
||||
vod_name: vod_name,
|
||||
vod_pic: vod_pic,
|
||||
type_name: "类型",
|
||||
vod_year: "年份",
|
||||
vod_area: "地区",
|
||||
vod_remarks: "更新信息",
|
||||
vod_actor: "主演",
|
||||
vod_director: "导演",
|
||||
vod_content: "简介"
|
||||
};
|
||||
let p = detailObj.二级;
|
||||
let url = detailObj.url;
|
||||
let detailUrl = detailObj.detailUrl;
|
||||
let fyclass = detailObj.fyclass;
|
||||
let tab_exclude = detailObj.tab_exclude;
|
||||
let html = detailObj.html||'';
|
||||
MY_URL = url;
|
||||
if(detailObj.二级访问前){
|
||||
try {
|
||||
print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
|
||||
eval(detailObj.二级访问前.trim().replace('js:',''));
|
||||
}catch (e) {
|
||||
print(`二级访问前执行代码出现错误:${e.message}`)
|
||||
}
|
||||
}
|
||||
// console.log(MY_URL);
|
||||
// setItem('MY_URL',MY_URL);
|
||||
if(p==='*'){
|
||||
vod.vod_play_from = '道长在线';
|
||||
vod.vod_remarks = detailUrl;
|
||||
vod.vod_actor = '没有二级,只有一级链接直接嗅探播放';
|
||||
vod.vod_content = MY_URL;
|
||||
vod.vod_play_url = '嗅探播放$' + MY_URL.split('@@')[0];
|
||||
}else if(typeof(p)==='string'&&p.trim().startsWith('js:')){
|
||||
const TYPE = 'detail';
|
||||
var input = MY_URL;
|
||||
var play_url = '';
|
||||
eval(p.trim().replace('js:',''));
|
||||
vod = VOD;
|
||||
console.log(JSON.stringify(vod));
|
||||
}else if(p&&typeof(p)==='object'){
|
||||
let tt1 = (new Date()).getTime();
|
||||
if(!html){
|
||||
html = getHtml(MY_URL);
|
||||
}
|
||||
print(`二级${MY_URL}仅获取源码耗时:${(new Date()).getTime()-tt1}毫秒`);
|
||||
let _impJQP = false;
|
||||
let _ps;
|
||||
if(p.is_json){
|
||||
print('二级是json');
|
||||
_ps = parseTags.json;
|
||||
html = dealJson(html);
|
||||
}else if(p.is_jsp){
|
||||
print('二级是jsp');
|
||||
_ps = parseTags.jsp;
|
||||
}else if(p.is_jq){
|
||||
print('二级是jq');
|
||||
_ps = parseTags.jq;
|
||||
}else{
|
||||
print('二级默认jq');
|
||||
_ps = parseTags.jq;
|
||||
// print('二级默认jsp');
|
||||
// _ps = parseTags.jsp;
|
||||
}
|
||||
if(_ps === parseTags.jq){ // jquery解析提前load(html)
|
||||
_impJQP = true;
|
||||
}
|
||||
if (_impJQP) {
|
||||
let ttt1 = (new Date()).getTime();
|
||||
let c$ = cheerio.load(html);
|
||||
// print(`二级${MY_URL}仅c$源码耗时:${(new Date()).getTime()-ttt1}毫秒`);
|
||||
html = { rr: c$, ele: c$('html')[0] };
|
||||
print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date()).getTime()-ttt1}毫秒`);
|
||||
}
|
||||
let tt2 = (new Date()).getTime();
|
||||
print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
if(p.title){
|
||||
let p1 = p.title.split(';');
|
||||
vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
|
||||
let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').replace(/ /g,'').trim():'';
|
||||
vod.type_name = type_name||vod.type_name;
|
||||
}
|
||||
if(p.desc){
|
||||
try{
|
||||
let p1 = p.desc.split(';');
|
||||
vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
|
||||
vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').trim():'';
|
||||
vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g,'').trim():'';
|
||||
// vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replaceAll('\n', ' ').trim():'';
|
||||
vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g,'').trim():'';
|
||||
vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g,'').trim():'';
|
||||
}
|
||||
catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
if(p.content){
|
||||
try{
|
||||
let p1 = p.content.split(';');
|
||||
vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
if(p.img){
|
||||
try{
|
||||
let p1 = p.img.split(';');
|
||||
vod.vod_pic = _pd(html, p1[0],MY_URL);
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
|
||||
let vod_play_from = '$$$';
|
||||
let playFrom = [];
|
||||
if(p.重定向&&p.重定向.startsWith('js:')){
|
||||
print('开始执行重定向代码:'+p.重定向);
|
||||
html = eval(p.重定向.replace('js:',''));
|
||||
if (_impJQP) {
|
||||
let c$ = cheerio.load(html);
|
||||
html = { rr: c$, ele: c$('html')[0] }
|
||||
}
|
||||
}
|
||||
|
||||
// console.log(2);
|
||||
if(p.tabs){
|
||||
if(p.tabs.startsWith('js:')){
|
||||
print('开始执行tabs代码:'+p.tabs);
|
||||
if(html&&_impJQP&&typeof (html)!=='string'){
|
||||
try { // 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错
|
||||
html = html.rr(html.ele).toString();
|
||||
}catch (e) {}
|
||||
}
|
||||
var input = MY_URL;
|
||||
eval(p.tabs.replace('js:',''));
|
||||
playFrom = TABS;
|
||||
}else{
|
||||
let p_tab = p.tabs.split(';')[0];
|
||||
// console.log(p_tab);
|
||||
let vHeader = _pdfa(html, p_tab);
|
||||
console.log(vHeader.length);
|
||||
let tab_text = p.tab_text||'body&&Text';
|
||||
// print('tab_text:'+tab_text);
|
||||
let new_map = {};
|
||||
for(let v of vHeader){
|
||||
let v_title = _pdfh(v,tab_text).trim();
|
||||
console.log(v_title);
|
||||
if(tab_exclude&& (new RegExp(tab_exclude)).test(v_title)){
|
||||
continue;
|
||||
}
|
||||
if(!new_map.hasOwnProperty(v_title)){
|
||||
new_map[v_title] = 1;
|
||||
}else{
|
||||
new_map[v_title] += 1;
|
||||
}
|
||||
if(new_map[v_title]>1){
|
||||
v_title+=Number(new_map[v_title]-1);
|
||||
}
|
||||
playFrom.push(v_title);
|
||||
}
|
||||
}
|
||||
console.log(JSON.stringify(playFrom));
|
||||
}else{
|
||||
playFrom = ['道长在线']
|
||||
}
|
||||
vod.vod_play_from = playFrom.join(vod_play_from);
|
||||
|
||||
// console.log(3);
|
||||
let vod_play_url = '$$$';
|
||||
let vod_tab_list = [];
|
||||
if(p.lists){
|
||||
if(p.lists.startsWith('js:')){
|
||||
print('开始执行lists代码:'+p.lists);
|
||||
try {
|
||||
if(html&&_impJQP&&typeof (html)!=='string'){
|
||||
// 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错
|
||||
try {
|
||||
html = html.rr(html.ele).toString();
|
||||
}catch (e) {}
|
||||
}
|
||||
var input = MY_URL;
|
||||
var play_url = '';
|
||||
eval(p.lists.replace('js:',''));
|
||||
for(let i in LISTS){
|
||||
if(LISTS.hasOwnProperty(i)){
|
||||
// print(i);
|
||||
try {
|
||||
LISTS[i] = LISTS[i].map(it=>it.split('$').slice(0,2).join('$'));
|
||||
}catch (e) {
|
||||
print('格式化LISTS发生错误:'+e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
vod_play_url = LISTS.map(it=>it.join('#')).join(vod_play_url);
|
||||
}catch (e) {
|
||||
print('js执行lists: 发生错误:'+e.message);
|
||||
}
|
||||
|
||||
}else{
|
||||
let list_text = p.list_text||'body&&Text';
|
||||
let list_url = p.list_url||'a&&href';
|
||||
// print('list_text:'+list_text);
|
||||
// print('list_url:'+list_url);
|
||||
// print('list_parse:'+p.lists);
|
||||
let is_tab_js = p.tabs.trim().startsWith('js:');
|
||||
for(let i=0;i<playFrom.length;i++){
|
||||
let tab_name = playFrom[i];
|
||||
let tab_ext = p.tabs.split(';').length > 1 && !is_tab_js ? p.tabs.split(';')[1] : '';
|
||||
let p1 = p.lists.replaceAll('#idv', tab_name).replaceAll('#id', i);
|
||||
tab_ext = tab_ext.replaceAll('#idv', tab_name).replaceAll('#id', i);
|
||||
// 测试jsp提速
|
||||
// console.log(p1);
|
||||
// p1 = p1.replace(':eq(0)',',0').replace(' ','&&');
|
||||
// console.log(p1);
|
||||
// console.log(html);
|
||||
let vodList = [];
|
||||
try {
|
||||
vodList = _pdfa(html, p1);
|
||||
console.log('len(vodList):'+vodList.length);
|
||||
}catch (e) {
|
||||
// console.log(e.message);
|
||||
}
|
||||
let new_vod_list = [];
|
||||
// print('tab_ext:'+tab_ext);
|
||||
let tabName = tab_ext?_pdfh(html, tab_ext):tab_name;
|
||||
console.log(tabName);
|
||||
// console.log('cheerio解析Text');
|
||||
// 此处存在性能问题: pt版2000集需要650毫秒,俊版1300毫秒 特么的优化不动 主要后面定位url的我拿他没法
|
||||
// 主要性能问题在于 _pd(it, list_url, MY_URL)
|
||||
let tt1 = (new Date()).getTime();
|
||||
// vodList.forEach((it,idex)=>{
|
||||
// // 请注意,这里要固定pdfh解析body&&Text,不需要下划线,没写错
|
||||
// // new_vod_list.push(pdfh(it,'body&&Text')+'$'+_pd(it,'a&&href',MY_URL));
|
||||
// // new_vod_list.push(cheerio.load(it).text()+'$'+_pd(it,'a&&href',MY_URL));
|
||||
// // new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL));
|
||||
// // new_vod_list.push(_pdfh(it, list_text).trim() + '$' +idex);
|
||||
// // new_vod_list.push(idex + '$' +_pdfh(it, list_url));
|
||||
// new_vod_list.push(_pdfh(it, list_text).trim() + '$' +_pd(it, list_url,MY_URL));
|
||||
// });
|
||||
if(vodList.length>0){
|
||||
for(let i=0;i<vodList.length;i++){
|
||||
let it = vodList[i];
|
||||
new_vod_list.push(_pdfh(it, list_text).trim() + '$' +_pd(it, list_url,MY_URL));
|
||||
}
|
||||
new_vod_list = forceOrder(new_vod_list,'',x=>x.split('$')[0]);
|
||||
console.log(`drpy影响性能代码共计列表数循环次数:${vodList.length},耗时:${(new Date()).getTime()-tt1}毫秒`);
|
||||
}
|
||||
let vlist = new_vod_list.join('#');
|
||||
vod_tab_list.push(vlist);
|
||||
}
|
||||
vod_play_url = vod_tab_list.join(vod_play_url);
|
||||
}
|
||||
}
|
||||
vod.vod_play_url = vod_play_url;
|
||||
}
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
vod.vod_pic = vod.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
if(rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){
|
||||
vod.vod_pic = vod.vod_pic + rule.图片来源;
|
||||
}
|
||||
if(!vod.vod_id||(vod_id.includes('$')&&vod.vod_id!==vod_id)){
|
||||
vod.vod_id = vod_id;
|
||||
}
|
||||
let t2 = (new Date()).getTime();
|
||||
console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
|
||||
// print(vod);
|
||||
vod = vodDeal(vod);
|
||||
// print(vod);
|
||||
return JSON.stringify({
|
||||
list: [vod]
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取二级待返回的播放线路没处理时的索引关系
|
||||
* @param vod
|
||||
* @returns {{}}
|
||||
*/
|
||||
function get_tab_index(vod){
|
||||
let obj = {};
|
||||
vod.vod_play_from.split('$$$').forEach((it,index)=>{
|
||||
obj[it] = index;
|
||||
});
|
||||
return obj
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理待返回的vod数据|线路去除,排序,重命名
|
||||
* @param vod
|
||||
* @returns {*}
|
||||
*/
|
||||
function vodDeal(vod){
|
||||
let vod_play_from = vod.vod_play_from.split('$$$');
|
||||
let vod_play_url = vod.vod_play_url.split('$$$');
|
||||
|
||||
// 移除指定线路后的列表
|
||||
let tab_removed_list = vod_play_from;
|
||||
// 排序后的线路列表
|
||||
let tab_ordered_list = vod_play_from;
|
||||
// 线路重命名后的列表
|
||||
let tab_renamed_list = vod_play_from;
|
||||
// 定义实际要返回线路
|
||||
let tab_list = vod_play_from;
|
||||
// 选集列表根据线路排序
|
||||
let play_ordered_list = vod_play_url;
|
||||
|
||||
// 判断有移除线路或者线路排序
|
||||
if((rule.tab_remove&&rule.tab_remove.length>0)||(rule.tab_order&&rule.tab_order.length>0)){
|
||||
// 获取原来线路的索引下标
|
||||
let tab_index_dict = get_tab_index(vod);
|
||||
|
||||
if(rule.tab_remove&&rule.tab_remove.length>0){
|
||||
tab_removed_list = vod_play_from.filter(it=>!rule.tab_remove.includes(it));
|
||||
tab_list = tab_removed_list;
|
||||
}
|
||||
|
||||
if(rule.tab_order&&rule.tab_order.length>0){
|
||||
let tab_order = rule.tab_order;
|
||||
tab_ordered_list = tab_removed_list.sort((a, b) => {
|
||||
return (tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a)) - (tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))
|
||||
});
|
||||
tab_list = tab_ordered_list;
|
||||
}
|
||||
play_ordered_list = tab_list.map(it=>vod_play_url[tab_index_dict[it]]);
|
||||
}
|
||||
|
||||
if(rule.tab_rename&&typeof(rule.tab_rename)==='object'&Object.keys(rule.tab_rename).length>0){
|
||||
tab_renamed_list = tab_list.map(it=>rule.tab_rename[it]||it);
|
||||
tab_list = tab_renamed_list;
|
||||
}
|
||||
vod.vod_play_from = tab_list.join('$$$');
|
||||
vod.vod_play_url = play_ordered_list.join('$$$');
|
||||
return vod
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否需要解析
|
||||
* @param url
|
||||
* @returns {number|number}
|
||||
*/
|
||||
function tellIsJx(url){
|
||||
try {
|
||||
let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split('?')[0]) && 是否正版(url);
|
||||
return is_vip?1:0
|
||||
}catch (e) {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 选集播放点击事件解析
|
||||
* @param playObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function playParse(playObj){
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
MY_URL = playObj.url;
|
||||
var MY_FLAG = playObj.flag;
|
||||
if(!/http/.test(MY_URL)){
|
||||
try {
|
||||
MY_URL = base64Decode(MY_URL);
|
||||
}catch (e) {}
|
||||
}
|
||||
MY_URL = decodeURIComponent(MY_URL);
|
||||
var input = MY_URL;//注入给免嗅js
|
||||
var flag = MY_FLAG;//注入播放线路名称给免嗅js
|
||||
let common_play = {
|
||||
parse:1,
|
||||
url:input,
|
||||
flag:flag,
|
||||
// url:urlencode(input),
|
||||
jx:tellIsJx(input)
|
||||
};
|
||||
let lazy_play;
|
||||
if(!rule.play_parse||!rule.lazy){
|
||||
lazy_play = common_play;
|
||||
}else if(rule.play_parse&&rule.lazy&&typeof(rule.lazy)==='string'){
|
||||
try {
|
||||
let lazy_code = rule.lazy.replace('js:','').trim();
|
||||
print('开始执行js免嗅=>'+lazy_code);
|
||||
eval(lazy_code);
|
||||
lazy_play = typeof(input) === 'object'?input:{
|
||||
parse:1,
|
||||
jx:tellIsJx(input),
|
||||
url:input
|
||||
};
|
||||
}catch (e) {
|
||||
print('js免嗅错误:'+e.message);
|
||||
lazy_play = common_play;
|
||||
}
|
||||
}else{
|
||||
lazy_play = common_play;
|
||||
}
|
||||
// print('play_json:'+typeof(rule.play_json));
|
||||
// console.log(Array.isArray(rule.play_json));
|
||||
if(Array.isArray(rule.play_json) && rule.play_json.length >0){ // 数组情况判断长度大于0
|
||||
let web_url = lazy_play.url;
|
||||
for(let pjson of rule.play_json){
|
||||
if(pjson.re && (pjson.re==='*'||web_url.match(new RegExp(pjson.re)))){
|
||||
if(pjson.json && typeof(pjson.json)==='object'){
|
||||
let base_json = pjson.json;
|
||||
// print('开始合并:');
|
||||
// print(base_json);
|
||||
lazy_play = Object.assign(lazy_play,base_json);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(rule.play_json && !Array.isArray(rule.play_json)){ // 其他情况 非[] 判断true/false
|
||||
let base_json = {
|
||||
jx:1,
|
||||
parse:1,
|
||||
};
|
||||
lazy_play = Object.assign(lazy_play,base_json);
|
||||
}else if(!rule.play_json){ // 不解析传0
|
||||
let base_json = {
|
||||
jx:0,
|
||||
parse:1,
|
||||
};
|
||||
lazy_play = Object.assign(lazy_play,base_json);
|
||||
}
|
||||
console.log(JSON.stringify(lazy_play));
|
||||
return JSON.stringify(lazy_play);
|
||||
}
|
||||
|
||||
/**
|
||||
* 本地代理解析规则
|
||||
* @param params
|
||||
*/
|
||||
function proxyParse(proxyObj){
|
||||
var input = proxyObj.params;
|
||||
if(proxyObj.proxy_rule){
|
||||
log('准备执行本地代理规则:\n'+proxyObj.proxy_rule);
|
||||
try {
|
||||
eval(proxyObj.proxy_rule);
|
||||
if(input && input!== proxyObj.params && Array.isArray(input) &&input.length===3){
|
||||
return input
|
||||
}else{
|
||||
return [404,'text/plain','Not Found']
|
||||
}
|
||||
}catch (e) {
|
||||
return [500,'text/plain','代理规则错误:'+e.message]
|
||||
}
|
||||
|
||||
}else{
|
||||
return [404,'text/plain','Not Found']
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 辅助嗅探解析规则
|
||||
* @param isVideoObj
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isVideoParse(isVideoObj){
|
||||
var input = isVideoObj.url;
|
||||
if(!isVideoObj.t){ // t为假代表默认传的正则字符串
|
||||
let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
|
||||
return re_matcher.test(input);
|
||||
}else{
|
||||
// 执行js
|
||||
try {
|
||||
eval(isVideoObj.isVideo);
|
||||
if(typeof(input)==='boolean'){
|
||||
return input
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
}catch (e) {
|
||||
log('执行嗅探规则发生错误:'+e.message);
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* js源预处理特定返回对象中的函数
|
||||
* @param ext
|
||||
*/
|
||||
function init(ext) {
|
||||
console.log('init');
|
||||
try {
|
||||
// make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改
|
||||
// if (typeof (globalThis.mubanJs) === 'undefined') {
|
||||
// let mubanJs = request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js', { 'User-Agent': MOBILE_UA });
|
||||
// mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default');
|
||||
// // console.log(mubanJs);
|
||||
// globalThis.mubanJs = mubanJs;
|
||||
// }
|
||||
// let muban = eval(globalThis.mubanJs);
|
||||
let muban = 模板.getMubans();
|
||||
if (typeof ext == 'object'){
|
||||
rule = ext;
|
||||
} else if (typeof ext == 'string') {
|
||||
if (ext.startsWith('http')) {
|
||||
let js = request(ext,{'method':'GET'});
|
||||
if (js){
|
||||
eval(js.replace('var rule', 'rule'));
|
||||
}
|
||||
} else {
|
||||
eval(ext.replace('var rule', 'rule'));
|
||||
}
|
||||
}
|
||||
if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
|
||||
print('继承模板:'+rule.模板);
|
||||
rule = Object.assign(muban[rule.模板], rule);
|
||||
}
|
||||
/** 处理一下 rule规则关键字段没传递的情况 **/
|
||||
let rule_cate_excludes = (rule.cate_exclude||'').split('|').filter(it=>it.trim());
|
||||
let rule_tab_excludes = (rule.tab_exclude||'').split('|').filter(it=>it.trim());
|
||||
rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split('|').filter(it=>it.trim()));
|
||||
rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split('|').filter(it=>it.trim()));
|
||||
|
||||
rule.cate_exclude = rule_cate_excludes.join('|');
|
||||
rule.tab_exclude = rule_tab_excludes.join('|');
|
||||
rule.host = (rule.host||'').rstrip('/');
|
||||
HOST = rule.host;
|
||||
if(rule.hostJs){
|
||||
console.log(`检测到hostJs,准备执行...`);
|
||||
try {
|
||||
eval(rule.hostJs);
|
||||
rule.host = HOST.rstrip('/');
|
||||
}catch (e) {
|
||||
console.log(`执行${rule.hostJs}获取host发生错误:`+e.message);
|
||||
}
|
||||
}
|
||||
rule.url = rule.url||'';
|
||||
rule.double = rule.double||false;
|
||||
rule.homeUrl = rule.homeUrl||'';
|
||||
rule.detailUrl = rule.detailUrl||'';
|
||||
rule.searchUrl = rule.searchUrl||'';
|
||||
rule.homeUrl = rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):(rule.homeUrl||rule.host);
|
||||
rule.detailUrl = rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;
|
||||
rule.二级访问前 = rule.二级访问前||'';
|
||||
if(rule.url.includes('[')&&rule.url.includes(']')){
|
||||
let u1 = rule.url.split('[')[0]
|
||||
let u2 = rule.url.split('[')[1].split(']')[0]
|
||||
rule.url = rule.host && rule.url?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.url;
|
||||
}else{
|
||||
rule.url = rule.host && rule.url ? urljoin(rule.host,rule.url) : rule.url;
|
||||
}
|
||||
|
||||
if(rule.searchUrl.includes('[')&&rule.searchUrl.includes(']')&&!rule.searchUrl.includes('#')){
|
||||
let u1 = rule.searchUrl.split('[')[0]
|
||||
let u2 = rule.searchUrl.split('[')[1].split(']')[0]
|
||||
rule.searchUrl = rule.host && rule.searchUrl?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.searchUrl;
|
||||
}else{
|
||||
rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host,rule.searchUrl) : rule.searchUrl;
|
||||
}
|
||||
|
||||
rule.timeout = rule.timeout||5000;
|
||||
rule.encoding = rule.编码||rule.encoding||'utf-8';
|
||||
rule.search_encoding = rule.搜索编码||rule.search_encoding||'';
|
||||
rule.图片来源 = rule.图片来源||'';
|
||||
rule.图片替换 = rule.图片替换||'';
|
||||
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
|
||||
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
|
||||
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
|
||||
rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
|
||||
rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
|
||||
|
||||
rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
|
||||
|
||||
rule.tab_remove = rule.hasOwnProperty('tab_remove')?rule.tab_remove:[];
|
||||
rule.tab_order = rule.hasOwnProperty('tab_order')?rule.tab_order:[];
|
||||
rule.tab_rename = rule.hasOwnProperty('tab_rename')?rule.tab_rename:{};
|
||||
|
||||
if(rule.headers && typeof(rule.headers) === 'object'){
|
||||
try {
|
||||
let header_keys = Object.keys(rule.headers);
|
||||
for(let k of header_keys){
|
||||
if(k.toLowerCase() === 'user-agent'){
|
||||
let v = rule.headers[k];
|
||||
console.log(v);
|
||||
if(['MOBILE_UA','PC_UA','UC_UA','IOS_UA','UA'].includes(v)){
|
||||
rule.headers[k] = eval(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch (e) {
|
||||
console.log('处理headers发生错误:'+e.message);
|
||||
}
|
||||
}
|
||||
// print(rule.headers);
|
||||
rule_fetch_params = {'headers': rule.headers||false, 'timeout': rule.timeout, 'encoding': rule.encoding};
|
||||
oheaders = rule.headers||{};
|
||||
RKEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host);
|
||||
pre(); // 预处理
|
||||
init_test();
|
||||
}catch (e) {
|
||||
console.log('init_test发生错误:'+e.message);
|
||||
}
|
||||
}
|
||||
|
||||
let homeHtmlCache = undefined;
|
||||
|
||||
/**
|
||||
* js源获取首页分类和筛选特定返回对象中的函数
|
||||
* @param filter 筛选条件字典对象
|
||||
* @returns {string}
|
||||
*/
|
||||
function home(filter) {
|
||||
console.log("home");
|
||||
let homeObj = {
|
||||
filter:rule.filter||false,
|
||||
MY_URL: rule.homeUrl,
|
||||
class_name: rule.class_name || '',
|
||||
class_url: rule.class_url || '',
|
||||
class_parse: rule.class_parse || '',
|
||||
cate_exclude: rule.cate_exclude,
|
||||
};
|
||||
return homeParse(homeObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* js源获取首页推荐数据列表特定返回对象中的函数
|
||||
* @param params
|
||||
* @returns {string}
|
||||
*/
|
||||
function homeVod(params) {
|
||||
console.log("homeVod");
|
||||
let homeVodObj = {
|
||||
推荐:rule.推荐,
|
||||
double:rule.double,
|
||||
homeUrl:rule.homeUrl,
|
||||
detailUrl:rule.detailUrl
|
||||
};
|
||||
return homeVodParse(homeVodObj)
|
||||
// return "{}";
|
||||
}
|
||||
|
||||
/**
|
||||
* js源获取分类页一级数据列表特定返回对象中的函数
|
||||
* @param tid 分类id
|
||||
* @param pg 页数
|
||||
* @param filter 当前选中的筛选条件
|
||||
* @param extend 扩展
|
||||
* @returns {string}
|
||||
*/
|
||||
function category(tid, pg, filter, extend) {
|
||||
let cateObj = {
|
||||
url: rule.url,
|
||||
一级: rule.一级,
|
||||
tid: tid,
|
||||
pg: parseInt(pg),
|
||||
filter: filter,
|
||||
extend: extend
|
||||
};
|
||||
// console.log(JSON.stringify(extend));
|
||||
return categoryParse(cateObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* js源获取二级详情页数据特定返回对象中的函数
|
||||
* @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id
|
||||
* @returns {string}
|
||||
*/
|
||||
function detail(vod_url) {
|
||||
let orId = vod_url;
|
||||
let fyclass = '';
|
||||
if(vod_url.indexOf('$')>-1){
|
||||
let tmp = vod_url.split('$');
|
||||
fyclass = tmp[0];
|
||||
vod_url = tmp[1];
|
||||
}
|
||||
let detailUrl = vod_url.split('@@')[0];
|
||||
let url;
|
||||
if(!detailUrl.startsWith('http')&&!detailUrl.includes('/')){
|
||||
url = rule.detailUrl.replaceAll('fyid', detailUrl).replaceAll('fyclass',fyclass);
|
||||
}else if(detailUrl.includes('/')){
|
||||
url = urljoin(rule.homeUrl,detailUrl);
|
||||
}else{
|
||||
url = detailUrl
|
||||
}
|
||||
let detailObj = {
|
||||
orId: orId,
|
||||
url:url,
|
||||
二级:rule.二级,
|
||||
二级访问前:rule.二级访问前,
|
||||
detailUrl:detailUrl,
|
||||
fyclass:fyclass,
|
||||
tab_exclude:rule.tab_exclude,
|
||||
}
|
||||
return detailParse(detailObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* js源选集按钮播放点击事件特定返回对象中的函数
|
||||
* @param flag 线路名
|
||||
* @param id 播放按钮的链接
|
||||
* @param flags 全局配置的flags是否需要解析的标识列表
|
||||
* @returns {string}
|
||||
*/
|
||||
function play(flag, id, flags) {
|
||||
let playObj = {
|
||||
url:id,
|
||||
flag:flag,
|
||||
flags:flags
|
||||
}
|
||||
return playParse(playObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* js源搜索返回的数据列表特定返回对象中的函数
|
||||
* @param wd 搜索关键字
|
||||
* @param quick 是否来自快速搜索
|
||||
* @returns {string}
|
||||
*/
|
||||
function search(wd, quick, pg) {
|
||||
if(rule.search_encoding){
|
||||
if(rule.search_encoding.toLowerCase()!=='utf-8'){
|
||||
// 按搜索编码进行编码
|
||||
wd = encodeStr(wd,rule.search_encoding);
|
||||
}
|
||||
}else if(rule.encoding && rule.encoding.toLowerCase()!=='utf-8'){
|
||||
// 按全局编码进行编码
|
||||
wd = encodeStr(wd,rule.encoding);
|
||||
}
|
||||
let searchObj = {
|
||||
searchUrl: rule.searchUrl,
|
||||
搜索: rule.搜索,
|
||||
wd: wd,
|
||||
//pg: pg,
|
||||
pg: pg||1,
|
||||
quick: quick,
|
||||
};
|
||||
// console.log(JSON.stringify(searchObj));
|
||||
return searchParse(searchObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* js源本地代理返回的数据列表特定返回对象中的函数
|
||||
* @param params 代理链接参数比如 /proxy?do=js&url=https://wwww.baidu.com => params就是 {do:'js','url':'https://wwww.baidu.com'}
|
||||
* @returns {*}
|
||||
*/
|
||||
function proxy(params){
|
||||
if(rule.proxy_rule&&rule.proxy_rule.trim()){
|
||||
rule.proxy_rule = rule.proxy_rule.trim();
|
||||
}
|
||||
if(rule.proxy_rule.startsWith('js:')){
|
||||
rule.proxy_rule = rule.proxy_rule.replace('js:','');
|
||||
}
|
||||
let proxyObj = {
|
||||
params:params,
|
||||
proxy_rule:rule.proxy_rule
|
||||
};
|
||||
return proxyParse(proxyObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
|
||||
* @returns {*|boolean|boolean}
|
||||
*/
|
||||
function sniffer(){
|
||||
let enable_sniffer = rule.sniffer || false;
|
||||
if(enable_sniffer){
|
||||
// log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
|
||||
log('开始执行辅助嗅探代理规则...');
|
||||
}
|
||||
return enable_sniffer
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
|
||||
* @param url
|
||||
*/
|
||||
function isVideo(url){
|
||||
let t = 0;
|
||||
let is_video;
|
||||
if(rule.isVideo &&rule.isVideo.trim()){
|
||||
is_video = rule.isVideo.trim();
|
||||
}
|
||||
if(is_video.startsWith('js:')){
|
||||
is_video = is_video.replace('js:','');
|
||||
t = 1;
|
||||
}
|
||||
let isVideoObj = {
|
||||
url:url,
|
||||
isVideo:is_video,
|
||||
t:t,
|
||||
};
|
||||
let result = isVideoParse(isVideoObj);
|
||||
if(result){
|
||||
log('成功执行辅助嗅探规则并检测到视频地址:\n'+rule.isVideo);
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function DRPY(){//导出函数
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
proxy:proxy,
|
||||
sniffer:sniffer,
|
||||
isVideo:isVideo
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出函数无法简写成下面的形式:
|
||||
|
||||
export default {
|
||||
...DRPY,
|
||||
DRPY
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
// 导出函数对象
|
||||
export default {
|
||||
init,
|
||||
home,
|
||||
homeVod,
|
||||
category,
|
||||
detail,
|
||||
play,
|
||||
search,
|
||||
proxy,
|
||||
sniffer,
|
||||
isVideo,
|
||||
DRPY,
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import cheerio from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js";import"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js";import"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/drT.js";import 模板 from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js";import{gbkTool}from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log("预处理执行失败:"+e.message)}}}let rule={};const VERSION="drpy1 3.9.49beta36 202400414";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://drpy.nokia.press:8028/ocr/drpy/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target}}if(!String.prototype.includes){String.prototype.includes=function(search,start){if(typeof start!=="number"){start=0}if(start+search.length>this.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k<len){if(o[k]===searchElement){return true}k++}return false}})}if(typeof String.prototype.startsWith!="function"){String.prototype.startsWith=function(prefix){return this.slice(0,prefix.length)===prefix}}if(typeof String.prototype.endsWith!="function"){String.prototype.endsWith=function(suffix){return this.indexOf(suffix,this.length-suffix.length)!==-1}}Object.prototype.myValues=function(obj){if(obj==null){throw new TypeError("Cannot convert undefined or null to object")}var res=[];for(var k in obj){if(obj.hasOwnProperty(k)){res.push(obj[k])}}return res};if(typeof Object.prototype.values!="function"){Object.prototype.values=function(obj){if(obj==null){throw new TypeError("Cannot convert undefined or null to object")}var res=[];for(var k in obj){if(obj.hasOwnProperty(k)){res.push(obj[k])}}return res}}if(typeof Array.prototype.join!="function"){Array.prototype.join=function(emoji){emoji=emoji||"";let self=this;let str="";let i=0;if(!Array.isArray(self)){throw String(self)+"is not Array"}if(self.length===0){return""}if(self.length===1){return String(self[0])}i=1;str=this[0];for(;i<self.length;i++){str+=String(emoji)+String(self[i])}return str}}String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};Array.prototype.append=Array.prototype.push;String.prototype.strip=String.prototype.trim;function 是否正版(vipUrl){let flag=new RegExp("qq.com|iqiyi.com|youku.com|mgtv.com|bilibili.com|sohu.com|ixigua.com|pptv.com|miguvideo.com|le.com|1905.com|fun.tv");return flag.test(vipUrl)}function urlDeal(vipUrl){if(!vipUrl){return""}if(!是否正版(vipUrl)){return vipUrl}if(!/miguvideo/.test(vipUrl)){vipUrl=vipUrl.split("#")[0].split("?")[0]}return vipUrl}function setResult(d){if(!Array.isArray(d)){return[]}VODS=[];d.forEach(function(it){let obj={vod_id:it.url||"",vod_name:it.title||"",vod_remarks:it.desc||"",vod_content:it.content||"",vod_pic:it.pic_url||it.img||""};let keys=Object.keys(it);if(keys.includes("tname")){obj.type_name=it.tname||""}if(keys.includes("tid")){obj.type_id=it.tid||""}if(keys.includes("year")){obj.vod_year=it.year||""}if(keys.includes("actor")){obj.vod_actor=it.actor||""}if(keys.includes("director")){obj.vod_director=it.director||""}if(keys.includes("area")){obj.vod_area=it.area||""}VODS.push(obj)});return VODS}function setResult2(res){VODS=res.list||[];return VODS}function setHomeResult(res){if(!res||typeof res!=="object"){return[]}return setResult(res.list)}function rc(js){if(js==="maomi_aes.js"){var a=CryptoJS.enc.Utf8.parse("625222f9149e961d");var t=CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");return{De:function(word){word=CryptoJS.enc.Hex.parse(word);return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word),a,{iv:t,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)},En:function(word){var Encrypted=CryptoJS.AES.encrypt(word,a,{iv:t,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return Encrypted.ciphertext.toString()}}}return{}}function maoss(jxurl,ref,key){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));eval(getCryptoJS());try{var getVideoInfo=function(text){return CryptoJS.AES.decrypt(text,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)};var token_key=key==undefined?"dvyYRQlnPRCMdQSe":key;if(ref){var html=request(jxurl,{headers:{Referer:ref}})}else{var html=request(jxurl)}if(html.indexOf("&btwaf=")!=-1){html=request(jxurl+"&btwaf"+html.match(/&btwaf(.*?)"/)[1],{headers:{Referer:ref}})}var token_iv=html.split('_token = "')[1].split('"')[0];var key=CryptoJS.enc.Utf8.parse(token_key);var iv=CryptoJS.enc.Utf8.parse(token_iv);eval(html.match(/var config = {[\s\S]*?}/)[0]+"");if(!config.url.startsWith("http")){config.url=CryptoJS.AES.decrypt(config.url,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)}return config.url}catch(e){return""}}function urlencode(str){str=(str+"").toString();return encodeURIComponent(str).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A").replace(/%20/g,"+")}function base64Encode(text){return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))}function base64Decode(text){return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text))}function md5(text){return CryptoJS.MD5(text).toString()}function encodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.encode(input)}return input}function decodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.decode(input)}return input}function getCryptoJS(){return'console.log("CryptoJS已装载");'}const RSA={encode:function(data,key,option){if(typeof rsaEncrypt==="function"){if(!option||typeof option!=="object"){return rsaEncrypt(data,key)}else{return rsaEncrypt(data,key,option)}}else{return false}},decode:function(data,key,option){if(typeof rsaDecrypt==="function"){if(!option||typeof option!=="object"){return rsaDecrypt(data,key)}else{return rsaDecrypt(data,key,option)}}else{return false}}};function getProxyUrl(){if(typeof getProxy==="function"){return getProxy(true)}else{return"http://127.0.0.1:9978/proxy?do=js"}}function forceOrder(lists,key,option){let start=Math.floor(lists.length/2);let end=Math.min(lists.length-1,start+1);if(start>=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd(html,parse,uri){let ret=this.pdfh(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse,base_url){if(!parse||!parse.trim()){return""}let eleFind=typeof html==="object";let option=undefined;if(eleFind&&parse.startsWith("body&&")){parse=parse.substr(6);if(parse.indexOf("&&")<0){option=parse.trim();parse="*=*"}}if(parse.indexOf("&&")>-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)&&!SPECIAL_URL.test(result)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX_A.test(sp[i])&&i<sp.length-1){if(sp[i]!=="body"){sp[i]=sp[i]+":first"}}}}parse=sp.join(" ")}const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);let result=[];if(ret){ret.each(function(idx,ele){result.push({rr:$,ele:ele})})}return result},pd(html,parse,uri){return parseTags.jq.pdfh(html,parse,MY_URL)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html=request(OCR_API,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true);code=html||""}catch(e){}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cnt<OCR_RETRY){try{let yzm_url=`${host}/index.php/verify/index.html`;console.log(`验证码链接:${yzm_url}`);let hhtml=request(yzm_url,{withHeaders:true,toBase64:true},true);let json=JSON.parse(hhtml);if(!cookie){let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}if(obj.redirect===false){obj.redirect=0}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj.method="POST";return request(url,obj)}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i<cnt;i++){classes.push({type_id:urls[i],type_name:names[i]})}}if(homeObj.class_parse){let p=homeObj.class_parse.split(";");let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;MY_URL=rule.url;if(p.length>=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",searchObj.pg)}}MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);list.forEach(it=>{let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _impJQP=false;let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}if(_ps===parseTags.jq){_impJQP=true}if(_impJQP){let ttt1=(new Date).getTime();let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]};print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date).getTime()-ttt1}毫秒`)}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""));if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print("格式化LISTS发生错误:"+e.message)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print("js执行lists: 发生错误:"+e.message)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i<playFrom.length;i++){let tab_name=playFrom[i];let tab_ext=p.tabs.split(";").length>1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let tt1=(new Date).getTime();if(vodList.length>0){for(let i=0;i<vodList.length;i++){let it=vodList[i];new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))}new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${vodList.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];vod.vod_pic=vod.vod_pic.replace(replace_from,replace_to)}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);vod=vodDeal(vod);return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return vod}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;var MY_FLAG=playObj.flag;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;var flag=MY_FLAG;let common_play={parse:1,url:input,flag:flag,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length===3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log("执行嗅探规则发生错误:"+e.message);return false}}}function init(ext){console.log("init");try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}else{eval(ext.replace("var rule","rule"))}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:`+e.message)}}rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;rule.二级访问前=rule.二级访问前||"";if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")&&!rule.searchUrl.includes("#")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl}rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.图片替换=rule.图片替换||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);pre();init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,"二级访问前":rule.二级访问前,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,DRPY:DRPY};
|
||||
+2808
@@ -0,0 +1,2808 @@
|
||||
import cheerio from 'assets://js/lib/cheerio.min.js';
|
||||
import 'assets://js/lib/crypto-js.js';
|
||||
import './jsencrypt.js';
|
||||
import 模板 from "../js/模板.js"
|
||||
import {gbkTool} from './gbk.js'
|
||||
|
||||
// import cheerio from "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js";
|
||||
// import "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js";
|
||||
// import 模板 from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js";
|
||||
// import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js'
|
||||
|
||||
function init_test(){
|
||||
// console.log(typeof(CryptoJS));
|
||||
console.log("init_test_start");
|
||||
// print(模板);
|
||||
// print(typeof(模板.getMubans));
|
||||
console.log("当前版本号:"+VERSION);
|
||||
console.log(RKEY);
|
||||
console.log(JSON.stringify(rule));
|
||||
console.log("init_test_end");
|
||||
|
||||
|
||||
// log('typeof (JSEncrypt):'+typeof (JSEncrypt));
|
||||
// let publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwEc7wBMtYKkxvrQNI3+ITBZwAkPkGvsv4TsAHFskKGZWz9eYl3scivhmlEfWHlEkdyb0m82CmB1qAgef+pD4cZu+Cdmm2e9lnExhLwm8cBgpkAen9QRNdjojZgxM0W+JcReH4W6pw+uFXiLRn4AIQkDftWGNLg6wlNS+39Z/RvP9zyATJLZ9AKDdHp62XMxEK1KZvWBuIg+Oa5UzgA9jy+2XyIqwhBtO8tPbUl21t2pvTzHoLUjSkPNm2LurcUk6+jQ2r6aiS2CN1NXIucPJU6mkuIQ821SjvkYPtIdRMntW4y2u4cyiqVEEQwlzWVMHh+/vfrWAQr9fgjDuYYtvPQIDAQAB';
|
||||
// let privateKey = 'MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDARzvAEy1gqTG+tA0jf4hMFnACQ+Qa+y/hOwAcWyQoZlbP15iXexyK+GaUR9YeUSR3JvSbzYKYHWoCB5/6kPhxm74J2abZ72WcTGEvCbxwGCmQB6f1BE12OiNmDEzRb4lxF4fhbqnD64VeItGfgAhCQN+1YY0uDrCU1L7f1n9G8/3PIBMktn0AoN0enrZczEQrUpm9YG4iD45rlTOAD2PL7ZfIirCEG07y09tSXbW3am9PMegtSNKQ82bYu6txSTr6NDavpqJLYI3U1ci5w8lTqaS4hDzbVKO+Rg+0h1Eye1bjLa7hzKKpUQRDCXNZUweH7+9+tYBCv1+CMO5hi289AgMBAAECggEBAIRbRJUWXmEwdq64kGbELlV6CIZ2p3mvOSlIjO34Cy7IK7AMz9xOgbpj/XDK9miOIJTouu7ZC7GcZdGZ4BUCYBMMS0fKjGFuurpZlXhkslNTPqEHtCUkXhIpOR7RDrwIlErGEOIsZC4aXQcM3tF1t7mroJLh4OY4dHMu82lv5NM4hhFMNvHzXVvrPXeTzw26gddHVG/ke0WUYOcB5j3cPp8xaVp7JV8bdxtGtkqIfBLY/dIczzJu/3F3cBpU2nNwt8uVUF/w/HKlr7j8FqqFHXWh182beU0n5AIdRyRJBrRUAEhdtsUnvJOVBDqzZa+9DJ5395F7V8KRlQptxETdhCECgYEA4x/2HM9fnVIhG6wTbEt1LhGTKYb/igMAHLqquEMfRsB44tobI8gVNwR3qJQY/nKXxcQemQV29PcdqpENCKyXUXGD8SI1UPg15rHFBI8CIqlCXfzJybdHjmzlhaA9I5lofIVh+5MW7WkvHZoRy7NeDMhHUuaiveuqC4OJ8n+dD2kCgYEA2LkmUVef3WkBBwUBRdkyoog3DMwR+/ubb0ncJVYy3ItYVJltQ4HqmrRiJc8xBAoFnG8rbiqDnmTnDR3WbuxU1G2hml09fqId+rQds2UfESswCXHU43A4f77m1XyA6PprBxpozVIcmK69N4rR9jOXflLWo3O+p2ipUbmNpId7+rUCgYBSpcbBJRT+AmzZzPwkZDD32p1ady114zGfQq3s7z/qVw+mPQezNZPCuXVxerK9pKVl6b/Ynwxyh5nb/3xms6c8k7oXfQM5u5ihof63cfKs+jqUSPCE3pTDVw0OWwjkc2Z6KW9GRHgLXEMw2mevYE3RCPArUpHV2nO+TNddzuIwQQKBgQDOZwdnUNygMfEYjlu3+jOPN8u2FGTMZ8SRKPbRWFb4VH27lKPLN2AIFuOivsEf56uQYRAry7GumMq0Y0ZmPg5Mglz2dvaqNBv5OLFQuW3tHAST+iWWtroYb+fISts7B8QG79AAO8OgZksvKrbslBYj6SEiaomZRsR7YQzVNXOOQQKBgQCovElZ50c8ZJ6m9D9fw3Nes7u9vshpyyac5tt4tZ7yfU4l5pWGrIUqCE703qZp4NAqEvlZUCJbj9kkysaj/2MfFb2b9jSvdNB+V/YW9Cwg+5TziYoOcQzN1z2u4p4goTAv0S+pTNSr3qWaTUI4TXUXQajif45Fexv+MrP5AAXQyw=='
|
||||
// // let text = '你好';
|
||||
// let text = '[{"vod_name":"兔小贝原创儿歌","vod_pic":"https://resource-cdn.tuxiaobei.com/video-album/FnQ8ieJHgsbgCKWXNBg4uoOmKgG5.jpg","vod_remarks":"共229首","vod_content":"","vod_id":"/subject/17@@兔小贝原创儿歌@@https://resource-cdn.tuxiaobei.com/video-album/FnQ8ieJHgsbgCKWXNBg4uoOmKgG5.jpg"},{"vod_name":"英文儿歌","vod_pic":"https://resource-cdn.tuxiaobei.com/video-album/Fqjpx2H_-QaYNAYn2MekRuDpeyUv.jpg","vod_remarks":"共10首","vod_content":"","vod_id":"/subject/23@@英文儿歌@@https://resource-cdn.tuxiaobei.com/video-album/Fqjpx2H_-QaYNAYn2MekRuDpeyUv.jpg"}]';
|
||||
// let str = RSA.encode(text, publicKey);
|
||||
// console.log("加密数据:" + str);
|
||||
// let str1 = 'Wa2c/868VOm0PgpGG2s2aMrDbGOlJRdZXlSGswjFgywd3nZNB7ND8kVMdNB/OsNFoQXJXSJMvPaE73BH7rs8fz54JGdYQK+qTgfQRqQZvomCjbzseSR4bm4NOrtIOOslL3WqxlzOuU0M1P1eERmkLEVU2WSyc3RGtJro3b3MOWYCNdKMoZdncfOHJndkl4wm9V3GGc3uH98hs6OxLvBWgXoW9jZQ3n0vR2FtS2KYrPGuSuKGkxlt9Kw5TD6nri142NOimz05WK55Xe04YUQ1VZd51t0wzJGXolWgfzIQaK2zzhk5Zjlm+IQJxXqEWiJ2+O6TJ+lIttvsDSaUflcDXQ==';
|
||||
// let str2 = 'R86mW9DzBw05pxBSh9ECh1stXxINmnudgZBbzU/cz1EcFgrEgdk0Zk4ruAiJZB2fP5c7d3gMmN8+Dv19IfARWSzw85xCEjUhpdcMJ0jn6ZE5H+muadND9LzjeVisojqwYxot3YVdKof7HMhPFN8QR0jfzqhjmnGFTlY1jMXzJK0MSOLNRLDar480CdKNb/cxALC8+xKIlhM9E4B31t8J4rNMUWSCAr49lbZ3jx3PxieBpTQUdDJz96AttR93Pc+c51wrxh0Ch/Mt4Rs09HGMXwIpNV+CxsGwSGRQUlyJo2k3d0WqsVzpz6S8A4VGEMTRLGI3IjEt+eWt7wM3nAXarg==';
|
||||
// let str3 = 'D4eOsRqua+jYA5+ZOR9PLI2PExKjKfArQfv9/wGeG50bQSjWypShJPY6RQfO+rghyf0juzHIUSxqH91OxinhCFkONaF2Vod2QVyphyn9eh73dAcEFKIFFKGXoPCjbMWrr3p4d+hgVrHzrFeGqkRq8JFOvG2L5XDxVfWbV8KmUA0DKuz6QwWg7P4kesy+C7BbLALy5W/wfZchD3gnsBvx/pjFoe11VfAify9isLxg9a15jj52xr6lzQ9kge9C2JcV8yq85bFKaUpJWgobzz+BSIv3lVMU6vgcldmOrhkyiETpFGFGGF00DphGCEoK6uAyyNDh7+Jn8P17zf/DW1wV3A==';
|
||||
// let uncrypted = RSA.decode(str, privateKey);
|
||||
// log('解密数据:'+uncrypted);
|
||||
// uncrypted = RSA.decode(str1, privateKey);
|
||||
// log('解密数据1:'+uncrypted);
|
||||
// uncrypted = RSA.decode(str2, privateKey);
|
||||
// log('解密数据2:'+uncrypted);
|
||||
// uncrypted = RSA.decode(str3, privateKey);
|
||||
// log('解密数据3:'+uncrypted);
|
||||
|
||||
// log('rsax:'+typeof(rsax));
|
||||
// log('rsaX:'+typeof(rsaX));
|
||||
// let data = base64Encode('你好');
|
||||
// let publicKey = 'dzyyds';
|
||||
// console.log(typeof (RSA.encode));
|
||||
// let encryptBase64Data = RSA.encode(data,publicKey);
|
||||
// log('encryptBase64Data:'+encryptBase64Data);
|
||||
// let str = RSA.decode(data,publicKey);
|
||||
// log('str:'+str);
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行预处理代码
|
||||
*/
|
||||
function pre(){
|
||||
if(typeof(rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()){
|
||||
let code = rule.预处理.trim();
|
||||
console.log("执行预处理代码:"+code);
|
||||
if(code.startsWith('js:')){
|
||||
code = code.replace('js:','');
|
||||
}
|
||||
try {
|
||||
// code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie
|
||||
// 直接操作 rule_fetch_params 这个变量 .headers.Cookie
|
||||
eval(code);
|
||||
}catch (e) {
|
||||
console.log('预处理执行失败:'+e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let rule = {};
|
||||
let vercode = typeof(pdfl) ==='function'?'drpy2.1':'drpy2';
|
||||
const VERSION = vercode+' 3.9.49beta40 202400426';
|
||||
/** 已知问题记录
|
||||
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
|
||||
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
|
||||
* 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend(合并文件了可以不管了)
|
||||
* 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?)
|
||||
* 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印(貌似不影响使用)
|
||||
* 5.需要实现 stringify 函数,比起JSON.strifngify函数,它会原封不动保留中文不会编码unicode
|
||||
* 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了)
|
||||
* 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略)
|
||||
* done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd}
|
||||
* 8.req函数不支持传递字符串的data参数 {'content-type':'text/plain'} 类型数据,因此无法直接调用alist的ocr接口
|
||||
* * 电脑看日志调试
|
||||
adb tcpip 5555
|
||||
adb connect 192.168.10.192
|
||||
adb devices -l
|
||||
adb logcat -c
|
||||
adb logcat | grep -i QuickJS
|
||||
adb logcat -c -b events
|
||||
adb logcat -c -b main -b events -b radio -b system
|
||||
adb logcat > 2.log DRPY:E | grep -i QuickJS
|
||||
* **/
|
||||
|
||||
|
||||
/*** 以下是内置变量和解析方法 **/
|
||||
const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
|
||||
const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
|
||||
const UA = 'Mozilla/5.0';
|
||||
const UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36';
|
||||
const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
const RULE_CK = 'cookie'; // 源cookie的key值
|
||||
// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识
|
||||
const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态';
|
||||
const TAB_EXCLUDE = '猜你|喜欢|下载|剧情|热播';
|
||||
const OCR_RETRY = 3;//ocr验证重试次数
|
||||
// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口
|
||||
// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口
|
||||
// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口
|
||||
// const OCR_API = 'http://cms.nokia.press:5707/parse/ocr';//ocr在线识别接口
|
||||
const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口
|
||||
if(typeof(MY_URL)==='undefined'){
|
||||
var MY_URL; // 全局注入变量,pd函数需要
|
||||
}
|
||||
var HOST;
|
||||
var RKEY; // 源的唯一标识
|
||||
var fetch;
|
||||
var print;
|
||||
var log;
|
||||
var rule_fetch_params;
|
||||
var fetch_params; // 每个位置单独的
|
||||
var oheaders;
|
||||
// var play_url; // 二级详情页注入变量,为了适配js模式0 (不在这里定义了,直接二级里定义了个空字符串)
|
||||
var _pdfh;
|
||||
var _pdfa;
|
||||
var _pd;
|
||||
// const DOM_CHECK_ATTR = ['url', 'src', 'href', 'data-original', 'data-src'];
|
||||
const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/;
|
||||
// 过滤特殊链接,不走urlJoin
|
||||
const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/;
|
||||
const NOADD_INDEX = /:eq|:lt|:gt|:first|:last|^body$|^#/; // 不自动加eq下标索引
|
||||
const URLJOIN_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/; // 需要自动urljoin的属性
|
||||
const SELECT_REGEX = /:eq|:lt|:gt|#/g;
|
||||
const SELECT_REGEX_A = /:eq|:lt|:gt/g;
|
||||
|
||||
/**
|
||||
es6py扩展
|
||||
*/
|
||||
if (typeof Object.assign != 'function') {
|
||||
Object.assign = function () {
|
||||
let target = arguments[0];
|
||||
for (let i = 1; i < arguments.length; i++) {
|
||||
let source = arguments[i];
|
||||
for (let key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
}
|
||||
if (!String.prototype.includes) {
|
||||
String.prototype.includes = function (search, start) {
|
||||
if (typeof start !== 'number') {
|
||||
start = 0;
|
||||
}
|
||||
|
||||
if (start + search.length > this.length) {
|
||||
return false;
|
||||
} else {
|
||||
return this.indexOf(search, start) !== -1;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (!Array.prototype.includes) {
|
||||
Object.defineProperty(Array.prototype, 'includes', {
|
||||
value: function (searchElement, fromIndex) {
|
||||
|
||||
if (this == null) {//this是空或者未定义,抛出错误
|
||||
throw new TypeError('"this" is null or not defined');
|
||||
}
|
||||
|
||||
var o = Object(this);//将this转变成对象
|
||||
var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0
|
||||
|
||||
if (len === 0) {//length为0直接返回false未找到目标值
|
||||
return false;
|
||||
}
|
||||
|
||||
var n = fromIndex | 0;//查找起始索引
|
||||
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引,因为有可能是负值
|
||||
|
||||
while (k < len) {//从起始索引处开始循环
|
||||
if (o[k] === searchElement) {//如果某一位置与寻找目标相等,返回true,找到了
|
||||
return true;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
return false;//未找到,返回false
|
||||
}
|
||||
});
|
||||
}
|
||||
if (typeof String.prototype.startsWith != 'function') {
|
||||
String.prototype.startsWith = function (prefix){
|
||||
return this.slice(0, prefix.length) === prefix;
|
||||
};
|
||||
}
|
||||
if (typeof String.prototype.endsWith != 'function') {
|
||||
String.prototype.endsWith = function(suffix) {
|
||||
return this.indexOf(suffix, this.length - suffix.length) !== -1;
|
||||
};
|
||||
}
|
||||
Object.prototype.myValues=function(obj){
|
||||
if(obj ==null) {
|
||||
throw new TypeError("Cannot convert undefined or null to object");
|
||||
}
|
||||
var res=[]
|
||||
for(var k in obj){
|
||||
if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
|
||||
res.push(obj[k]);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
if (typeof Object.prototype.values != 'function') {
|
||||
Object.prototype.values=function(obj){
|
||||
if(obj ==null) {
|
||||
throw new TypeError("Cannot convert undefined or null to object");
|
||||
}
|
||||
var res=[]
|
||||
for(var k in obj){
|
||||
if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
|
||||
res.push(obj[k]);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
if (typeof Array.prototype.join != 'function') {
|
||||
Array.prototype.join = function (emoji) {
|
||||
// emoji = emoji||',';
|
||||
emoji = emoji||'';
|
||||
let self = this;
|
||||
let str = "";
|
||||
let i = 0;
|
||||
if (!Array.isArray(self)) {throw String(self)+'is not Array'}
|
||||
if(self.length===0){return ''}
|
||||
if (self.length === 1){return String(self[0])}
|
||||
i = 1;
|
||||
str = this[0];
|
||||
for (; i < self.length; i++) {
|
||||
str += String(emoji)+String(self[i]);
|
||||
}
|
||||
return str;
|
||||
};
|
||||
}
|
||||
if (typeof Array.prototype.toReversed != 'function') {
|
||||
Array.prototype.toReversed = function () {
|
||||
const clonedList = this.slice();
|
||||
// 倒序新数组
|
||||
const reversedList = clonedList.reverse();
|
||||
return reversedList;
|
||||
};
|
||||
}
|
||||
|
||||
String.prototype.rstrip = function (chars) {
|
||||
let regex = new RegExp(chars + "$");
|
||||
return this.replace(regex, "");
|
||||
};
|
||||
|
||||
Array.prototype.append = Array.prototype.push;
|
||||
String.prototype.strip = String.prototype.trim;
|
||||
function 是否正版(vipUrl){
|
||||
let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv');
|
||||
return flag.test(vipUrl);
|
||||
}
|
||||
function urlDeal(vipUrl){
|
||||
if(!vipUrl){
|
||||
return ''
|
||||
}
|
||||
if(!是否正版(vipUrl)){
|
||||
return vipUrl
|
||||
}
|
||||
if(!/miguvideo/.test(vipUrl)){
|
||||
vipUrl=vipUrl.split('#')[0].split('?')[0];
|
||||
}
|
||||
return vipUrl
|
||||
}
|
||||
function setResult(d){
|
||||
if(!Array.isArray(d)){
|
||||
return []
|
||||
}
|
||||
VODS = [];
|
||||
// print(d);
|
||||
d.forEach(function (it){
|
||||
let obj = {
|
||||
vod_id:it.url||'',
|
||||
vod_name: it.title||'',
|
||||
vod_remarks: it.desc||'',
|
||||
vod_content: it.content||'',
|
||||
vod_pic: it.pic_url||it.img||'',
|
||||
};
|
||||
let keys = Object.keys(it);
|
||||
if(keys.includes('tname')){
|
||||
obj.type_name = it.tname||'';
|
||||
}
|
||||
if(keys.includes('tid')){
|
||||
obj.type_id = it.tid||'';
|
||||
}
|
||||
if(keys.includes('year')){
|
||||
obj.vod_year = it.year||'';
|
||||
}
|
||||
if(keys.includes('actor')){
|
||||
obj.vod_actor = it.actor||'';
|
||||
}
|
||||
if(keys.includes('director')){
|
||||
obj.vod_director = it.director||'';
|
||||
}
|
||||
if(keys.includes('area')){
|
||||
obj.vod_area = it.area||'';
|
||||
}
|
||||
VODS.push(obj);
|
||||
});
|
||||
return VODS
|
||||
}
|
||||
function setResult2(res){
|
||||
VODS = res.list||[];
|
||||
return VODS
|
||||
}
|
||||
function setHomeResult(res){
|
||||
if(!res||typeof(res)!=='object'){
|
||||
return []
|
||||
}
|
||||
return setResult(res.list);
|
||||
}
|
||||
// 猫了个咪
|
||||
function rc(js) {
|
||||
if (js === 'maomi_aes.js') {
|
||||
var a = CryptoJS.enc.Utf8.parse("625222f9149e961d");
|
||||
var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");
|
||||
return {
|
||||
De: function (word) {
|
||||
word = CryptoJS.enc.Hex.parse(word)
|
||||
return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, {
|
||||
iv: t,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}).toString(CryptoJS.enc.Utf8)
|
||||
},
|
||||
En: function (word) {
|
||||
// print(a);
|
||||
// print(word);
|
||||
var Encrypted = CryptoJS.AES.encrypt(word, a, {
|
||||
iv: t,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
});
|
||||
return Encrypted.ciphertext.toString();
|
||||
}
|
||||
};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// 千万不要用for in 推荐 forEach (for in 会打乱顺序)
|
||||
//猫函数
|
||||
function maoss(jxurl, ref, key) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
eval(getCryptoJS());
|
||||
try {
|
||||
var getVideoInfo = function (text) {
|
||||
return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
|
||||
};
|
||||
var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key;
|
||||
if (ref) {
|
||||
var html = request(jxurl, {
|
||||
headers: {
|
||||
'Referer': ref
|
||||
}
|
||||
});
|
||||
} else {
|
||||
var html = request(jxurl);
|
||||
}
|
||||
// print(html);
|
||||
if (html.indexOf('&btwaf=') != -1) {
|
||||
html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], {
|
||||
headers: {
|
||||
'Referer': ref
|
||||
}
|
||||
})
|
||||
}
|
||||
var token_iv = html.split('_token = "')[1].split('"')[0];
|
||||
var key = CryptoJS.enc.Utf8.parse(token_key);
|
||||
var iv = CryptoJS.enc.Utf8.parse(token_iv);
|
||||
// log("iv:"+iv);
|
||||
// log(html);
|
||||
// print(key);
|
||||
// print(iv);
|
||||
eval(html.match(/var config = {[\s\S]*?}/)[0] + '');
|
||||
// config.url = config.url.replace(/,/g,'');
|
||||
// print(config.url);
|
||||
if (!config.url.startsWith('http')) {
|
||||
//config.url = decodeURIComponent(AES(config.url, key, iv));
|
||||
config.url = CryptoJS.AES.decrypt(config.url, key, {
|
||||
iv: iv,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}).toString(CryptoJS.enc.Utf8)
|
||||
}
|
||||
return config.url;
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function urlencode (str) {
|
||||
str = (str + '').toString();
|
||||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
|
||||
replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||||
}
|
||||
|
||||
function base64Encode(text){
|
||||
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
|
||||
// return text
|
||||
}
|
||||
|
||||
function base64Decode(text){
|
||||
return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text));
|
||||
// return text
|
||||
}
|
||||
|
||||
function md5(text) {
|
||||
return CryptoJS.MD5(text).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串按指定编码
|
||||
* @param input
|
||||
* @param encoding
|
||||
* @returns {*}
|
||||
*/
|
||||
function encodeStr(input,encoding){
|
||||
encoding = encoding||'gbk';
|
||||
if(encoding.startsWith('gb')){
|
||||
const strTool = gbkTool();
|
||||
input = strTool.encode(input);
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串指定解码
|
||||
* @param input
|
||||
* @param encoding
|
||||
* @returns {*}
|
||||
*/
|
||||
function decodeStr(input,encoding){
|
||||
encoding = encoding||'gbk';
|
||||
if(encoding.startsWith('gb')){
|
||||
const strTool = gbkTool();
|
||||
input = strTool.decode(input);
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
function getCryptoJS(){
|
||||
// return request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-hiker.js');
|
||||
return 'console.log("CryptoJS已装载");'
|
||||
}
|
||||
|
||||
// 封装的RSA加解密类
|
||||
const RSA = {
|
||||
decode: function (data, key, option) {
|
||||
option = option || {};
|
||||
if (typeof (JSEncrypt) === 'function') {
|
||||
let chunkSize = option.chunkSize || 117; // 默认分段长度为117
|
||||
let privateKey = this.getPrivateKey(key); // 获取私钥
|
||||
const decryptor = new JSEncrypt(); //创建解密对象实例
|
||||
decryptor.setPrivateKey(privateKey); //设置秘钥
|
||||
let uncrypted = '';
|
||||
// uncrypted = decryptor.decrypt(data);
|
||||
uncrypted = decryptor.decryptUnicodeLong(data);
|
||||
return uncrypted;
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
},
|
||||
encode: function (data, key, option) {
|
||||
option = option || {};
|
||||
if (typeof (JSEncrypt) === 'function') {
|
||||
let chunkSize = option.chunkSize || 117; // 默认分段长度为117
|
||||
let publicKey = this.getPublicKey(key); // 获取公钥
|
||||
const encryptor = new JSEncrypt();
|
||||
encryptor.setPublicKey(publicKey); // 设置公钥
|
||||
let encrypted = ''; // 加密结果
|
||||
// const textLen = data.length; // 待加密文本长度
|
||||
// let offset = 0; // 分段偏移量
|
||||
// // 分段加密
|
||||
// while (offset < textLen) {
|
||||
// let chunk = data.slice(offset, chunkSize); // 提取分段数据
|
||||
// let enc = encryptor.encrypt(chunk); // 加密分段数据
|
||||
// encrypted += enc; // 连接加密结果
|
||||
// offset += chunkSize; // 更新偏移量
|
||||
// }
|
||||
encrypted = encryptor.encryptUnicodeLong(data);
|
||||
return encrypted
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
},
|
||||
fixKey(key, prefix, endfix) {
|
||||
if (!key.includes(prefix)) {
|
||||
key = prefix + key;
|
||||
}
|
||||
if (!key.includes(endfix)) {
|
||||
key += endfix
|
||||
}
|
||||
return key
|
||||
},
|
||||
getPrivateKey(key) {
|
||||
let prefix = '-----BEGIN RSA PRIVATE KEY-----';
|
||||
let endfix = '-----END RSA PRIVATE KEY-----';
|
||||
return this.fixKey(key, prefix, endfix);
|
||||
},
|
||||
getPublicKey(key) {
|
||||
let prefix = '-----BEGIN PUBLIC KEY-----';
|
||||
let endfix = '-----END PUBLIC KEY-----';
|
||||
return this.fixKey(key, prefix, endfix);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取壳子返回的代理地址
|
||||
* @returns {string|*}
|
||||
*/
|
||||
function getProxyUrl(){
|
||||
if(typeof(getProxy)==='function'){//判断壳子里有getProxy函数就执行取返回结果。否则取默认的本地
|
||||
return getProxy(true)
|
||||
}else{
|
||||
return 'http://127.0.0.1:9978/proxy?do=js'
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据正则处理原始m3u8里的广告ts片段,自动修复相对链接
|
||||
* @param m3u8_text m3u8原始文本,里面是最末级的只含ts片段的。不支持嵌套m3u8链接
|
||||
* @param m3u8_url m3u8原始地址
|
||||
* @param ad_remove 正则表达式如: reg:/video/adjump(.*?)ts
|
||||
* @returns {string|DocumentFragment|*|string}
|
||||
*/
|
||||
function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
|
||||
if ((!m3u8_text && !m3u8_url) || (!m3u8_text && m3u8_url && !m3u8_url.startsWith('http'))) {
|
||||
return ''
|
||||
}
|
||||
if (!m3u8_text) {
|
||||
log('m3u8_url:' + m3u8_url);
|
||||
m3u8_text = request(m3u8_url);
|
||||
}
|
||||
log('len(m3u8_text):' + m3u8_text.length);
|
||||
if (!ad_remove) {
|
||||
return m3u8_text
|
||||
}
|
||||
if (ad_remove.startsWith('reg:')) {
|
||||
ad_remove = ad_remove.slice(4)
|
||||
} else if (ad_remove.startsWith('js:')) {
|
||||
ad_remove = ad_remove.slice(3)
|
||||
}
|
||||
let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf('#EXTINF')).trim();
|
||||
let m3u8_body = m3u8_text.slice(m3u8_text.indexOf('#EXTINF'), m3u8_text.indexOf('#EXT-X-ENDLIST')).trim();
|
||||
let m3u8_end = m3u8_text.slice(m3u8_text.indexOf('#EXT-X-ENDLIST')).trim();
|
||||
let murls = [];
|
||||
let m3_body_list = m3u8_body.split('\n');
|
||||
let m3_len = m3_body_list.length;
|
||||
let i = 0;
|
||||
while (i < m3_len) {
|
||||
let mi = m3_body_list[i];
|
||||
let mi_1 = m3_body_list[i + 1];
|
||||
if (mi.startsWith('#EXTINF')) {
|
||||
murls.push([mi, mi_1].join('&'));
|
||||
i += 2
|
||||
} else if (mi.startsWith('#EXT-X-DISCONTINUITY')) {
|
||||
let mi_2 = m3_body_list[i + 2];
|
||||
murls.push([mi, mi_1, mi_2].join('&'));
|
||||
i += 3
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
let new_m3u8_body = [];
|
||||
for (let murl of murls) {
|
||||
if (ad_remove && new RegExp(ad_remove).test(murl)) {
|
||||
|
||||
} else {
|
||||
let murl_list = murl.split('&');
|
||||
if (!murl_list[murl_list.length - 1].startsWith('http') && m3u8_url.startsWith('http')) {
|
||||
murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1]);
|
||||
}
|
||||
murl_list.forEach((it) => {
|
||||
new_m3u8_body.push(it);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
new_m3u8_body = new_m3u8_body.join('\n').trim();
|
||||
m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join('\n').trim();
|
||||
return m3u8_text
|
||||
}
|
||||
|
||||
/**
|
||||
* 智能对比去除广告。支持嵌套m3u8。只需要传入播放地址
|
||||
* @param m3u8_url m3u8播放地址
|
||||
* @returns {string}
|
||||
*/
|
||||
function fixAdM3u8Ai(m3u8_url) {
|
||||
let ts = new Date().getTime();
|
||||
|
||||
function b(s1, s2) {
|
||||
let i = 0;
|
||||
while (i < s1.length) {
|
||||
if (s1[i] !== s2[i]) {
|
||||
break
|
||||
}
|
||||
i++
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
function reverseString(str) {
|
||||
return str.split('').reverse().join('');
|
||||
}
|
||||
|
||||
//log('播放的地址:' + m3u8_url);
|
||||
let m3u8 = request(m3u8_url);
|
||||
//log('m3u8处理前:' + m3u8);
|
||||
m3u8 = m3u8.trim().split('\n').map(it => it.startsWith('#') ? it : urljoin(m3u8_url, it)).join('\n');
|
||||
//log('m3u8处理后:============:' + m3u8);
|
||||
// 获取嵌套m3u8地址
|
||||
let last_url = m3u8.split('\n').slice(-1)[0];
|
||||
if (last_url.includes('.m3u8') && last_url !== m3u8_url) {
|
||||
m3u8_url = last_url;
|
||||
//log('嵌套的m3u8_url:' + m3u8_url);
|
||||
m3u8 = request(m3u8_url);
|
||||
}
|
||||
//log('----处理有广告的地址----');
|
||||
let s = m3u8.trim().split('\n').filter(it => it.trim()).join('\n');
|
||||
let ss = s.split('\n')
|
||||
//找出第一条播放地址
|
||||
let firststr = ss.find(x => !x.startsWith('#'));
|
||||
let maxl = 0;//最大相同字符
|
||||
let firststrlen = firststr.length;
|
||||
//log('字符串长度:' + firststrlen);
|
||||
let ml = Math.round(ss.length / 2).toString().length;//取数据的长度的位数
|
||||
//log('数据条数的长度:' + ml);
|
||||
//找出最后一条播放地址
|
||||
let laststr = ss.toReversed().find((x) => {
|
||||
if (!x.startsWith('#')) {
|
||||
let k = b(reverseString(firststr), reverseString(x));
|
||||
maxl = b(firststr, x);
|
||||
if (firststrlen - maxl <= ml + k) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
});
|
||||
log('最后一条切片:' + laststr);
|
||||
//log('最小相同字符长度:' + maxl);
|
||||
let ad_urls = [];
|
||||
for (let i = 0; i < ss.length; i++) {
|
||||
let s = ss[i];
|
||||
if (!s.startsWith('#')) {
|
||||
if (b(firststr, s) < maxl) {
|
||||
ad_urls.push(s); // 广告地址加入列表
|
||||
ss.splice(i - 1, 2);
|
||||
i = i - 2;
|
||||
} else {
|
||||
ss[i] = urljoin(m3u8_url, s);
|
||||
}
|
||||
} else {
|
||||
ss[i] = s.replace(/URI=\"(.*)\"/, 'URI=\"' + urljoin(m3u8_url, '$1') + '\"');
|
||||
}
|
||||
}
|
||||
log('处理的m3u8地址:' + m3u8_url);
|
||||
log('----广告地址----');
|
||||
log(ad_urls);
|
||||
m3u8 = ss.join('\n');
|
||||
//log('处理完成');
|
||||
log('处理耗时:' + (new Date().getTime() - ts).toString());
|
||||
return m3u8
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制正序算法
|
||||
* @param lists 待正序列表
|
||||
* @param key 正序键
|
||||
* @param option 单个元素处理函数
|
||||
* @returns {*}
|
||||
*/
|
||||
function forceOrder(lists,key,option){
|
||||
let start = Math.floor(lists.length/2);
|
||||
let end = Math.min(lists.length-1,start+1);
|
||||
if(start >= end){
|
||||
return lists;
|
||||
}
|
||||
let first = lists[start];
|
||||
let second = lists[end];
|
||||
if(key){
|
||||
try {
|
||||
first = first[key];
|
||||
second = second[key];
|
||||
}catch (e) {}
|
||||
}
|
||||
if(option && typeof(option)==='function'){
|
||||
try {
|
||||
first = option(first);
|
||||
second = option(second);
|
||||
}catch (e) {}
|
||||
}
|
||||
first+='';
|
||||
second+='';
|
||||
// console.log(first,second);
|
||||
if(first.match(/(\d+)/)&&second.match(/(\d+)/)){
|
||||
let num1 = Number(first.match(/(\d+)/)[1]);
|
||||
let num2 = Number(second.match(/(\d+)/)[1]);
|
||||
if (num1 > num2){
|
||||
lists.reverse();
|
||||
}
|
||||
}
|
||||
return lists
|
||||
}
|
||||
|
||||
let VODS = [];// 一级或者搜索需要的数据列表
|
||||
let VOD = {};// 二级的单个数据
|
||||
let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
|
||||
let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']]
|
||||
globalThis.encodeUrl = urlencode;
|
||||
globalThis.urlencode = urlencode;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* url拼接
|
||||
* @param fromPath 初始当前页面url
|
||||
* @param nowPath 相对当前页面url
|
||||
* @returns {*}
|
||||
*/
|
||||
function urljoin(fromPath, nowPath) {
|
||||
fromPath = fromPath||'';
|
||||
nowPath = nowPath||'';
|
||||
return joinUrl(fromPath, nowPath);
|
||||
// try {
|
||||
// // import Uri from './uri.min.js';
|
||||
// // var Uri = require('./uri.min.js');
|
||||
// // eval(request('https://cdn.bootcdn.net/ajax/libs/URI.js/1.19.11/URI.min.js'));
|
||||
// // let new_uri = URI(nowPath, fromPath);
|
||||
|
||||
// let new_uri = Uri(nowPath, fromPath);
|
||||
// new_uri = new_uri.toString();
|
||||
// // console.log(new_uri);
|
||||
// // return fromPath + nowPath
|
||||
// return new_uri
|
||||
// }
|
||||
// catch (e) {
|
||||
// console.log('urljoin发生错误:'+e.message);
|
||||
// if(nowPath.startsWith('http')){
|
||||
// return nowPath
|
||||
// }if(nowPath.startsWith('/')){
|
||||
// return getHome(fromPath)+nowPath
|
||||
// }
|
||||
// return fromPath+nowPath
|
||||
// }
|
||||
}
|
||||
var urljoin2 = urljoin;
|
||||
|
||||
// 内置 pdfh,pdfa,pd
|
||||
const defaultParser = {
|
||||
pdfh:pdfh,
|
||||
pdfa:pdfa,
|
||||
pd:pd,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* pdfh原版优化,能取style属性里的图片链接
|
||||
* @param html 源码
|
||||
* @param parse 解析表达式
|
||||
* @returns {string|*}
|
||||
*/
|
||||
function pdfh2(html,parse){
|
||||
let html2 = html;
|
||||
try {
|
||||
if(typeof(html)!=='string'){
|
||||
html2 = html.rr(html.ele).toString();
|
||||
}
|
||||
}catch (e) {
|
||||
print('html对象转文本发生了错误:'+e.message);
|
||||
}
|
||||
let result = defaultParser.pdfh(html2,parse);
|
||||
let option = parse.includes('&&')?parse.split('&&').slice(-1)[0]:parse.split(' ').slice(-1)[0];
|
||||
if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){
|
||||
try {
|
||||
result = result.match(/url\((.*?)\)/)[1];
|
||||
// 2023/07/28新增 style取内部链接自动去除首尾单双引号
|
||||
result = result.replace(/^['|"](.*)['|"]$/, "$1");
|
||||
}catch (e) {}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* pdfa原版优化,可以转换jq的html对象
|
||||
* @param html
|
||||
* @param parse
|
||||
* @returns {*}
|
||||
*/
|
||||
function pdfa2(html,parse){
|
||||
let html2 = html;
|
||||
try {
|
||||
if(typeof(html)!=='string'){
|
||||
html2 = html.rr(html.ele).toString();
|
||||
}
|
||||
}catch (e) {
|
||||
print('html对象转文本发生了错误:'+e.message);
|
||||
}
|
||||
return defaultParser.pdfa(html2,parse);
|
||||
}
|
||||
|
||||
/**
|
||||
* pd原版方法重写-增加自动urljoin
|
||||
* @param html
|
||||
* @param parse
|
||||
* @param uri
|
||||
* @returns {*}
|
||||
*/
|
||||
function pd2(html,parse,uri){
|
||||
let ret = pdfh2(html,parse);
|
||||
if(typeof(uri)==='undefined'||!uri){
|
||||
uri = '';
|
||||
}
|
||||
if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){
|
||||
if(/http/.test(ret)){
|
||||
ret = ret.slice(ret.indexOf('http'));
|
||||
}else{
|
||||
ret = urljoin(MY_URL,ret)
|
||||
}
|
||||
}
|
||||
// MY_URL = getItem('MY_URL',MY_URL);
|
||||
// console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`);
|
||||
return ret
|
||||
}
|
||||
|
||||
const parseTags = {
|
||||
jsp:{
|
||||
pdfh:pdfh2,
|
||||
pdfa:pdfa2,
|
||||
pd:pd2,
|
||||
},
|
||||
json:{
|
||||
pdfh(html, parse) {
|
||||
if (!parse || !parse.trim()){
|
||||
return '';
|
||||
}
|
||||
if (typeof(html) === 'string'){
|
||||
// print('jsonpath:pdfh字符串转dict');
|
||||
html = JSON.parse(html);
|
||||
}
|
||||
parse = parse.trim();
|
||||
if (!parse.startsWith('$.')){
|
||||
parse = '$.' + parse;
|
||||
}
|
||||
parse = parse.split('||');
|
||||
for (let ps of parse) {
|
||||
let ret = cheerio.jp(ps, html);
|
||||
if (Array.isArray(ret)){
|
||||
ret = ret[0] || '';
|
||||
} else{
|
||||
ret = ret || ''
|
||||
}
|
||||
if (ret && typeof (ret) !== 'string'){
|
||||
ret = ret.toString();
|
||||
}
|
||||
if(ret){
|
||||
return ret
|
||||
}
|
||||
}
|
||||
return '';
|
||||
},
|
||||
pdfa(html, parse) {
|
||||
if (!parse || !parse.trim()){
|
||||
return '';
|
||||
}
|
||||
if (typeof(html) === 'string'){
|
||||
// print('jsonpath:pdfa字符串转dict');
|
||||
html = JSON.parse(html);
|
||||
}
|
||||
parse = parse.trim()
|
||||
if (!parse.startsWith('$.')){
|
||||
parse = '$.' + parse;
|
||||
}
|
||||
let ret = cheerio.jp(parse, html);
|
||||
if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1){
|
||||
return ret[0] || []
|
||||
}
|
||||
return ret || []
|
||||
},
|
||||
pd(html,parse){
|
||||
let ret = parseTags.json.pdfh(html,parse);
|
||||
if(ret){
|
||||
return urljoin(MY_URL,ret);
|
||||
}
|
||||
return ret
|
||||
},
|
||||
},
|
||||
jq:{
|
||||
pdfh(html, parse) {
|
||||
if (!html||!parse || !parse.trim()) {
|
||||
return ''
|
||||
}
|
||||
parse = parse.trim();
|
||||
let result = defaultParser.pdfh(html,parse);
|
||||
// print(`pdfh解析${parse}=>${result}`);
|
||||
return result;
|
||||
},
|
||||
pdfa(html, parse) {
|
||||
if (!html||!parse || !parse.trim()) {
|
||||
return [];
|
||||
}
|
||||
parse = parse.trim();
|
||||
let result = defaultParser.pdfa(html,parse);
|
||||
// print(result);
|
||||
print(`pdfa解析${parse}=>${result.length}`);
|
||||
return result;
|
||||
},
|
||||
pd(html,parse,base_url){
|
||||
if (!html||!parse || !parse.trim()) {
|
||||
return ''
|
||||
}
|
||||
parse = parse.trim();
|
||||
base_url = base_url||MY_URL;
|
||||
return defaultParser.pd(html, parse, base_url);
|
||||
},
|
||||
},
|
||||
getParse(p0){//非js开头的情况自动获取解析标签
|
||||
if(p0.startsWith('jsp:')){
|
||||
return this.jsp
|
||||
}else if(p0.startsWith('json:')){
|
||||
return this.json
|
||||
}else if(p0.startsWith('jq:')){
|
||||
return this.jq
|
||||
}else {
|
||||
return this.jq
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const stringify = JSON.stringify;
|
||||
const jsp = parseTags.jsp;
|
||||
const jq = parseTags.jq;
|
||||
|
||||
/*** 后台需要实现的java方法并注入到js中 ***/
|
||||
|
||||
/**
|
||||
* 读取本地文件->应用程序目录
|
||||
* @param filePath
|
||||
* @returns {string}
|
||||
*/
|
||||
function readFile(filePath){
|
||||
filePath = filePath||'./uri.min.js';
|
||||
var fd = os.open(filePath);
|
||||
var buffer = new ArrayBuffer(1024);
|
||||
var len = os.read(fd, buffer, 0, 1024);
|
||||
console.log(len);
|
||||
let text = String.fromCharCode.apply(null, new Uint8Array(buffer));
|
||||
console.log(text);
|
||||
return text
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理返回的json数据
|
||||
* @param html
|
||||
* @returns {*}
|
||||
*/
|
||||
function dealJson(html) {
|
||||
try {
|
||||
// html = html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1];
|
||||
html = html.trim();
|
||||
if(!((html.startsWith('{') && html.endsWith('}'))||(html.startsWith('[') && html.endsWith(']')))){
|
||||
html = '{'+html.match(/.*?\{(.*)\}/m)[1]+'}';
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
try {
|
||||
html = JSON.parse(html);
|
||||
}catch (e) {}
|
||||
// console.log(typeof(html));
|
||||
return html;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口)
|
||||
* @type {{api: string, classification: (function(*=): string)}}
|
||||
*/
|
||||
var OcrApi={
|
||||
api:OCR_API,
|
||||
classification:function (img){ // img是byte类型,这里不方便搞啊
|
||||
let code = '';
|
||||
try {
|
||||
// let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
|
||||
// html = JSON.parse(html);
|
||||
// code = html.url||'';
|
||||
log('通过drpy_ocr验证码接口过验证...');
|
||||
let html = request(OCR_API,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
|
||||
code = html||'';
|
||||
}catch (e) {
|
||||
log(`OCR识别验证码发生错误:${e.message}`)
|
||||
}
|
||||
return code
|
||||
}
|
||||
};
|
||||
/**
|
||||
* 验证码识别,暂未实现
|
||||
* @param url 验证码图片链接
|
||||
* @returns {string} 验证成功后的cookie
|
||||
*/
|
||||
function verifyCode(url){
|
||||
let cnt = 0;
|
||||
let host = getHome(url);
|
||||
let cookie = '';
|
||||
while (cnt < OCR_RETRY){
|
||||
try{
|
||||
// let obj = {headers:headers,timeout:timeout};
|
||||
let yzm_url = `${host}/index.php/verify/index.html`;
|
||||
console.log(`验证码链接:${yzm_url}`);
|
||||
let hhtml = request(yzm_url,{withHeaders:true,toBase64:true},true);
|
||||
let json = JSON.parse(hhtml);
|
||||
if(!cookie){
|
||||
// print(json);
|
||||
let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie');
|
||||
// cookie = json['set-cookie']?json['set-cookie'].split(';')[0]:'';
|
||||
cookie = setCk?json[setCk].split(';')[0]:'';
|
||||
}
|
||||
// console.log(hhtml);
|
||||
console.log('cookie:'+cookie);
|
||||
let img = json.body;
|
||||
// console.log(img);
|
||||
let code = OcrApi.classification(img);
|
||||
console.log(`第${cnt+1}次验证码识别结果:${code}`);
|
||||
let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`;
|
||||
console.log(submit_url);
|
||||
let html = request(submit_url,{headers:{Cookie:cookie,'User-Agent':MOBILE_UA},'method':'POST'});
|
||||
// console.log(html);
|
||||
html = JSON.parse(html);
|
||||
if(html.msg === 'ok'){
|
||||
console.log(`第${cnt+1}次验证码提交成功`);
|
||||
return cookie // 需要返回cookie
|
||||
}else if(html.msg!=='ok'&&cnt+1>=OCR_RETRY){
|
||||
cookie = ''; // 需要清空返回cookie
|
||||
}
|
||||
}catch (e) {
|
||||
console.log(`第${cnt+1}次验证码提交失败:${e.message}`);
|
||||
if(cnt+1>=OCR_RETRY){
|
||||
cookie = '';
|
||||
}
|
||||
}
|
||||
cnt+=1
|
||||
}
|
||||
return cookie
|
||||
}
|
||||
|
||||
/**
|
||||
* 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存
|
||||
* @param k 键
|
||||
* @param v 值
|
||||
*/
|
||||
function setItem(k,v){
|
||||
local.set(RKEY,k,v);
|
||||
console.log(`规则${RKEY}设置${k} => ${v}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里
|
||||
* @param k 键
|
||||
* @param v 值
|
||||
* @returns {*}
|
||||
*/
|
||||
function getItem(k,v){
|
||||
return local.get(RKEY,k) || v;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据库key对应的一条数据,并清除此key对应的内存缓存
|
||||
* @param k
|
||||
*/
|
||||
function clearItem(k){
|
||||
local.delete(RKEY,k);
|
||||
}
|
||||
|
||||
/*** js自封装的方法 ***/
|
||||
|
||||
/**
|
||||
* 获取链接的host(带http协议的完整链接)
|
||||
* @param url 任意一个正常完整的Url,自动提取根
|
||||
* @returns {string}
|
||||
*/
|
||||
function getHome(url){
|
||||
if(!url){
|
||||
return ''
|
||||
}
|
||||
let tmp = url.split('//');
|
||||
url = tmp[0] + '//' + tmp[1].split('/')[0];
|
||||
try {
|
||||
url = decodeURIComponent(url);
|
||||
}catch (e) {}
|
||||
return url
|
||||
}
|
||||
|
||||
/**
|
||||
* get参数编译链接,类似python params字典自动拼接
|
||||
* @param url 访问链接
|
||||
* @param obj 参数字典
|
||||
* @returns {*}
|
||||
*/
|
||||
function buildUrl(url,obj){
|
||||
obj = obj||{};
|
||||
if(url.indexOf('?')<0){
|
||||
url += '?'
|
||||
}
|
||||
let param_list = [];
|
||||
let keys = Object.keys(obj);
|
||||
keys.forEach(it=>{
|
||||
param_list.push(it+'='+obj[it])
|
||||
});
|
||||
let prs = param_list.join('&');
|
||||
if(keys.length > 0 && !url.endsWith('?')){
|
||||
url += '&'
|
||||
}
|
||||
url+=prs;
|
||||
return url
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程依赖执行函数
|
||||
* @param url 远程js地址
|
||||
*/
|
||||
function require(url){
|
||||
eval(request(url));
|
||||
}
|
||||
/**
|
||||
* 海阔网页请求函数完整封装
|
||||
* @param url 请求链接
|
||||
* @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false}
|
||||
* @param ocr_flag 标识此flag是用于请求ocr识别的,自动过滤content-type指定编码
|
||||
* @returns {string|string|DocumentFragment|*}
|
||||
*/
|
||||
function request(url,obj,ocr_flag){
|
||||
ocr_flag = ocr_flag||false;
|
||||
if(typeof(obj)==='undefined'||!obj||obj==={}){
|
||||
if(!fetch_params||!fetch_params.headers){
|
||||
let headers = {
|
||||
'User-Agent':MOBILE_UA,
|
||||
};
|
||||
if(rule.headers){
|
||||
Object.assign(headers,rule.headers);
|
||||
}
|
||||
if(!fetch_params){
|
||||
fetch_params = {};
|
||||
}
|
||||
fetch_params.headers = headers;
|
||||
}
|
||||
if(!fetch_params.headers.Referer){
|
||||
fetch_params.headers.Referer = getHome(url)
|
||||
}
|
||||
obj = fetch_params;
|
||||
}else{
|
||||
let headers = obj.headers||{};
|
||||
let keys = Object.keys(headers).map(it=>it.toLowerCase());
|
||||
if(!keys.includes('user-agent')){
|
||||
headers['User-Agent'] = MOBILE_UA;
|
||||
}if(!keys.includes('referer')){
|
||||
headers['Referer'] = getHome(url);
|
||||
}
|
||||
obj.headers = headers;
|
||||
}
|
||||
if(rule.encoding&&rule.encoding!=='utf-8'&&!ocr_flag){
|
||||
if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
|
||||
obj.headers["Content-Type"] = 'text/html; charset='+rule.encoding;
|
||||
}
|
||||
}
|
||||
if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){
|
||||
// let data = {};
|
||||
// obj.body.split('&').forEach(it=>{
|
||||
// data[it.split('=')[0]] = it.split('=')[1]
|
||||
// });
|
||||
// obj.data = data;
|
||||
// delete obj.body
|
||||
|
||||
// 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form
|
||||
if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
|
||||
obj.headers["Content-Type"] = 'application/x-www-form-urlencoded; charset='+rule.encoding;
|
||||
}
|
||||
}else if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='object'){
|
||||
obj.data = obj.body;
|
||||
delete obj.body
|
||||
}
|
||||
if(!url){
|
||||
return obj.withHeaders?'{}':''
|
||||
}
|
||||
if(obj.toBase64){ // 返回base64,用于请求图片
|
||||
obj.buffer = 2;
|
||||
delete obj.toBase64
|
||||
}
|
||||
if(obj.redirect===false){
|
||||
obj.redirect = 0;
|
||||
}
|
||||
console.log(JSON.stringify(obj.headers));
|
||||
// console.log('request:'+url+' obj:'+JSON.stringify(obj));
|
||||
console.log('request:'+url+`|method:${obj.method||'GET'}|body:${obj.body||''}`);
|
||||
let res = req(url, obj);
|
||||
let html = res.content||'';
|
||||
// console.log(html);
|
||||
if(obj.withHeaders){
|
||||
let htmlWithHeaders = res.headers;
|
||||
htmlWithHeaders.body = html;
|
||||
return JSON.stringify(htmlWithHeaders);
|
||||
}else{
|
||||
return html
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 快捷post请求
|
||||
* @param url 地址
|
||||
* @param obj 对象
|
||||
* @returns {string|DocumentFragment|*}
|
||||
*/
|
||||
function post(url,obj){
|
||||
obj.method = 'POST';
|
||||
return request(url,obj);
|
||||
}
|
||||
|
||||
fetch = request;
|
||||
print = function (data){
|
||||
data = data||'';
|
||||
if(typeof(data)=='object'&&Object.keys(data).length>0){
|
||||
try {
|
||||
data = JSON.stringify(data);
|
||||
console.log(data);
|
||||
}catch (e) {
|
||||
// console.log('print:'+e.message);
|
||||
console.log(typeof(data)+':'+data.length);
|
||||
return
|
||||
}
|
||||
}else if(typeof(data)=='object'&&Object.keys(data).length<1){
|
||||
console.log('null object');
|
||||
}else{
|
||||
console.log(data);
|
||||
}
|
||||
}
|
||||
log = print;
|
||||
/**
|
||||
* 检查宝塔验证并自动跳过获取正确源码
|
||||
* @param html 之前获取的html
|
||||
* @param url 之前的来源url
|
||||
* @param obj 来源obj
|
||||
* @returns {string|DocumentFragment|*}
|
||||
*/
|
||||
function checkHtml(html,url,obj){
|
||||
if(/\?btwaf=/.test(html)){
|
||||
let btwaf = html.match(/btwaf(.*?)"/)[1];
|
||||
url = url.split('#')[0]+'?btwaf'+btwaf;
|
||||
print('宝塔验证访问链接:'+url);
|
||||
html = request(url,obj);
|
||||
}
|
||||
return html
|
||||
}
|
||||
|
||||
/**
|
||||
* 带一次宝塔验证的源码获取
|
||||
* @param url 请求链接
|
||||
* @param obj 请求参数
|
||||
* @returns {string|DocumentFragment}
|
||||
*/
|
||||
function getCode(url,obj){
|
||||
let html = request(url,obj);
|
||||
html = checkHtml(html,url,obj);
|
||||
return html
|
||||
}
|
||||
|
||||
/**
|
||||
* 源rule专用的请求方法,自动注入cookie
|
||||
* @param url 请求链接
|
||||
* @returns {string|DocumentFragment}
|
||||
*/
|
||||
function getHtml(url){
|
||||
let obj = {};
|
||||
if(rule.headers){
|
||||
obj.headers = rule.headers;
|
||||
}
|
||||
let cookie = getItem(RULE_CK,'');
|
||||
if(cookie){
|
||||
// log('有cookie:'+cookie);
|
||||
if(obj.headers && ! Object.keys(obj.headers).map(it=>it.toLowerCase()).includes('cookie')){
|
||||
log('历史无cookie,新增过验证后的cookie');
|
||||
obj.headers['Cookie'] = cookie;
|
||||
}else if(obj.headers && obj.headers.cookie && obj.headers.cookie!==cookie){
|
||||
obj.headers['Cookie'] = cookie;
|
||||
log('历史有小写过期的cookie,更新过验证后的cookie');
|
||||
}else if(obj.headers && obj.headers.Cookie && obj.headers.Cookie!==cookie){
|
||||
obj.headers['Cookie'] = cookie;
|
||||
log('历史有大写过期的cookie,更新过验证后的cookie');
|
||||
}else if(!obj.headers){
|
||||
obj.headers = {Cookie:cookie};
|
||||
log('历史无headers,更新过验证后的含cookie的headers');
|
||||
}
|
||||
}
|
||||
let html = getCode(url,obj);
|
||||
return html
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页分类解析,筛选暂未实现
|
||||
* @param homeObj 首页传参对象
|
||||
* @returns {string}
|
||||
*/
|
||||
function homeParse(homeObj) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let classes = [];
|
||||
if (homeObj.class_name && homeObj.class_url) {
|
||||
let names = homeObj.class_name.split('&');
|
||||
let urls = homeObj.class_url.split('&');
|
||||
let cnt = Math.min(names.length, urls.length);
|
||||
for (let i = 0; i < cnt; i++) {
|
||||
classes.push({
|
||||
'type_id': urls[i],
|
||||
'type_name': names[i]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (homeObj.class_parse) {
|
||||
if(homeObj.class_parse.startsWith('js:')) {
|
||||
var input = homeObj.MY_URL;
|
||||
try {
|
||||
eval(homeObj.class_parse.replace('js:', ''));
|
||||
if (Array.isArray(input)) {
|
||||
classes = input;
|
||||
}
|
||||
}catch(e){
|
||||
log('通过js动态获取分类发生了错误:'+e.message);
|
||||
}
|
||||
}else {
|
||||
let p = homeObj.class_parse.split(';');
|
||||
let p0 = p[0];
|
||||
let _ps = parseTags.getParse(p0);
|
||||
let is_json = p0.startsWith('json:');
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
MY_URL = rule.url;
|
||||
if(is_json){
|
||||
try {
|
||||
let cms_cate_url = homeObj.MY_URL.replace('ac=detail','ac=list');
|
||||
let html = getHtml(cms_cate_url);
|
||||
if (html) {
|
||||
if(cms_cate_url === homeObj.MY_URL){
|
||||
homeHtmlCache = html;
|
||||
}
|
||||
let list = _pdfa(html, p0.replace('json:',''));
|
||||
if (list && list.length > 0) {
|
||||
classes = list;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
} else if(p.length >= 3 && !is_json) { // 可以不写正则
|
||||
try {
|
||||
let html = getHtml(homeObj.MY_URL);
|
||||
if (html) {
|
||||
homeHtmlCache = html;
|
||||
let list = _pdfa(html, p0);
|
||||
if (list && list.length > 0) {
|
||||
list.forEach((it, idex) => {
|
||||
try {
|
||||
let name = _pdfh(it, p[1]);
|
||||
if (homeObj.cate_exclude && (new RegExp(homeObj.cate_exclude).test(name))) {
|
||||
return;
|
||||
}
|
||||
// let url = pdfh(it, p[2]);
|
||||
let url = _pd(it, p[2]);
|
||||
if (p.length > 3 && p[3]) {
|
||||
let exp = new RegExp(p[3]);
|
||||
url = url.match(exp)[1];
|
||||
}
|
||||
|
||||
classes.push({
|
||||
'type_id': url.trim(),
|
||||
'type_name': name.trim()
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
// 排除分类
|
||||
classes = classes.filter(it=>!homeObj.cate_exclude || !(new RegExp(homeObj.cate_exclude).test(it.type_name)));
|
||||
let resp = {
|
||||
'class': classes
|
||||
};
|
||||
if(homeObj.filter){
|
||||
resp.filters = homeObj.filter;
|
||||
}
|
||||
console.log(JSON.stringify(resp));
|
||||
return JSON.stringify(resp);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 推荐和搜索单字段继承一级
|
||||
* @param p 推荐或搜索的解析分割;列表
|
||||
* @param pn 自身列表序号
|
||||
* @param pp 一级解析分割;列表
|
||||
* @param ppn 继承一级序号
|
||||
* @returns {*}
|
||||
*/
|
||||
function getPP(p, pn, pp, ppn){
|
||||
try {
|
||||
let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn]
|
||||
return ps
|
||||
}catch (e) {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页推荐列表解析
|
||||
* @param homeVodObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function homeVodParse(homeVodObj){
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let d = [];
|
||||
MY_URL = homeVodObj.homeUrl;
|
||||
// setItem('MY_URL',MY_URL);
|
||||
console.log(MY_URL);
|
||||
let t1 = (new Date()).getTime();
|
||||
let p = homeVodObj.推荐;
|
||||
print('p:'+p);
|
||||
if(p==='*' && rule.一级){
|
||||
p = rule.一级;
|
||||
homeVodObj.double = false;
|
||||
}
|
||||
if(!p||typeof(p)!=='string'){
|
||||
return '{}'
|
||||
}
|
||||
p = p.trim();
|
||||
let pp = rule.一级.split(';');
|
||||
if(p.startsWith('js:')){
|
||||
const TYPE = 'home';
|
||||
var input = MY_URL;
|
||||
HOST = rule.host;
|
||||
eval(p.replace('js:',''));
|
||||
d = VODS;
|
||||
}else {
|
||||
p = p.split(';');
|
||||
if (!homeVodObj.double && p.length < 5) {
|
||||
return '{}'
|
||||
} else if (homeVodObj.double && p.length < 6) {
|
||||
return '{}'
|
||||
}
|
||||
let p0 = getPP(p,0,pp,0)
|
||||
let _ps = parseTags.getParse(p0);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
let is_json = p0.startsWith('json:');
|
||||
p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
|
||||
// print(p[0]);
|
||||
let html = homeHtmlCache || getHtml(MY_URL);
|
||||
homeHtmlCache = undefined;
|
||||
if(is_json){
|
||||
// print('是json,开始处理');
|
||||
html = dealJson(html);
|
||||
}
|
||||
try {
|
||||
console.log('double:' + homeVodObj.double);
|
||||
if (homeVodObj.double) {
|
||||
let items = _pdfa(html, p0);
|
||||
// console.log(items.length);
|
||||
let p1 = getPP(p,1,pp,0);
|
||||
let p2 = getPP(p,2,pp,1);
|
||||
let p3 = getPP(p,3,pp,2);
|
||||
let p4 = getPP(p,4,pp,3);
|
||||
let p5 = getPP(p,5,pp,4);
|
||||
let p6 = getPP(p,6,pp,5);
|
||||
for (let item of items) {
|
||||
// console.log(p[1]);
|
||||
let items2 = _pdfa(item, p1);
|
||||
// console.log(items2.length);
|
||||
for (let item2 of items2) {
|
||||
try {
|
||||
let title = _pdfh(item2, p2);
|
||||
let img = '';
|
||||
try {
|
||||
img = _pd(item2, p3);
|
||||
} catch (e) {}
|
||||
let desc = '';
|
||||
try {
|
||||
desc = _pdfh(item2, p4);
|
||||
}catch (e) {}
|
||||
let links = [];
|
||||
for (let _p5 of p5.split('+')) {
|
||||
let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5);
|
||||
links.push(link);
|
||||
}
|
||||
let content;
|
||||
if(p.length > 6 && p[6]){
|
||||
content = _pdfh(item2, p6);
|
||||
} else{
|
||||
content = '';
|
||||
}
|
||||
let vid = links.join('$');
|
||||
if(rule.二级==='*'){
|
||||
vid = vid+'@@'+title+'@@'+img;
|
||||
}
|
||||
let vod = {
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: desc,
|
||||
vod_content: content,
|
||||
vod_id: vid
|
||||
};
|
||||
// print(vod);
|
||||
d.push(vod);
|
||||
} catch (e) {
|
||||
console.log('首页列表双层定位处理发生错误:'+e.message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
let items = _pdfa(html, p0);
|
||||
let p1 = getPP(p,1,pp,1);
|
||||
let p2 = getPP(p,2,pp,2);
|
||||
let p3 = getPP(p,3,pp,3);
|
||||
let p4 = getPP(p,4,pp,4);
|
||||
let p5 = getPP(p,5,pp,5);
|
||||
|
||||
for (let item of items) {
|
||||
try {
|
||||
let title = _pdfh(item, p1);
|
||||
let img = '';
|
||||
try {
|
||||
img = _pd(item, p2, MY_URL);
|
||||
} catch (e) {}
|
||||
let desc = '';
|
||||
try {
|
||||
desc = _pdfh(item, p3);
|
||||
}catch (e) {}
|
||||
let links = [];
|
||||
for (let _p5 of p4.split('+')) {
|
||||
let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5);
|
||||
links.push(link);
|
||||
}
|
||||
let content;
|
||||
if(p.length > 5 && p[5]){
|
||||
content = _pdfh(item, p5);
|
||||
}else{
|
||||
content = ''
|
||||
}
|
||||
let vid = links.join('$');
|
||||
if(rule.二级==='*'){
|
||||
vid = vid+'@@'+title+'@@'+img;
|
||||
}
|
||||
let vod = {
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: desc,
|
||||
vod_content: content,
|
||||
vod_id: vid
|
||||
};
|
||||
d.push(vod);
|
||||
|
||||
} catch (e) {
|
||||
console.log('首页列表单层定位处理发生错误:'+e.message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
let t2 = (new Date()).getTime();
|
||||
console.log('加载首页推荐耗时:'+(t2-t1)+'毫秒');
|
||||
// console.log(JSON.stringify(d));
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(rule.图片来源){
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic + rule.图片来源;
|
||||
}
|
||||
});
|
||||
}
|
||||
if(d.length>0){
|
||||
print(d.slice(0,2));
|
||||
}
|
||||
return JSON.stringify({
|
||||
list:d
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 一级分类页数据解析
|
||||
* @param cateObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function categoryParse(cateObj) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let p = cateObj.一级;
|
||||
if(!p||typeof(p)!=='string'){
|
||||
return '{}'
|
||||
}
|
||||
let d = [];
|
||||
// let url = cateObj.url.replaceAll('fyclass', cateObj.tid).replaceAll('fypage', cateObj.pg);
|
||||
let url = cateObj.url.replaceAll('fyclass', cateObj.tid);
|
||||
if(cateObj.pg === 1 && url.includes('[')&&url.includes(']')){
|
||||
url = url.split('[')[1].split(']')[0];
|
||||
}else if(cateObj.pg > 1 && url.includes('[')&&url.includes(']')){
|
||||
url = url.split('[')[0];
|
||||
}
|
||||
if(rule.filter_url){
|
||||
if(!/fyfilter/.test(url)){
|
||||
if(!url.endsWith('&')&&!rule.filter_url.startsWith('&')){
|
||||
url+='&'
|
||||
}
|
||||
url+=rule.filter_url;
|
||||
}else{
|
||||
url = url.replace('fyfilter', rule.filter_url);
|
||||
}
|
||||
// console.log('filter:'+cateObj.filter);
|
||||
let fl = cateObj.filter?cateObj.extend:{};
|
||||
// 自动合并 不同分类对应的默认筛选
|
||||
if(rule.filter_def && typeof(rule.filter_def)==='object'){
|
||||
try {
|
||||
if(Object.keys(rule.filter_def).length>0 && rule.filter_def.hasOwnProperty(cateObj.tid)){
|
||||
let self_fl_def = rule.filter_def[cateObj.tid];
|
||||
if(self_fl_def && typeof(self_fl_def)==='object'){
|
||||
// 引用传递转值传递,避免污染self变量
|
||||
let fl_def = JSON.parse(JSON.stringify(self_fl_def));
|
||||
fl = Object.assign(fl_def,fl);
|
||||
}
|
||||
}
|
||||
}catch (e) {
|
||||
print('合并不同分类对应的默认筛选出错:'+e.message);
|
||||
}
|
||||
}
|
||||
let new_url;
|
||||
new_url = cheerio.jinja2(url,{fl:fl});
|
||||
// console.log('jinjia2执行后的new_url类型为:'+typeof(new_url));
|
||||
url = new_url;
|
||||
}
|
||||
if(/fypage/.test(url)){
|
||||
if(url.includes('(')&&url.includes(')')){
|
||||
let url_rep = url.match(/.*?\((.*)\)/)[1];
|
||||
// console.log(url_rep);
|
||||
let cnt_page = url_rep.replaceAll('fypage', cateObj.pg);
|
||||
// console.log(cnt_page);
|
||||
let cnt_pg = eval(cnt_page);
|
||||
// console.log(cnt_pg);
|
||||
url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
|
||||
}else{
|
||||
url = url.replaceAll('fypage',cateObj.pg);
|
||||
}
|
||||
}
|
||||
|
||||
MY_URL = url;
|
||||
// setItem('MY_URL',MY_URL);
|
||||
console.log(MY_URL);
|
||||
p = p.trim();
|
||||
const MY_CATE = cateObj.tid;
|
||||
if(p.startsWith('js:')){
|
||||
var MY_FL = cateObj.extend;
|
||||
const TYPE = 'cate';
|
||||
var input = MY_URL;
|
||||
const MY_PAGE = cateObj.pg;
|
||||
var desc = '';
|
||||
eval(p.trim().replace('js:',''));
|
||||
d = VODS;
|
||||
}else {
|
||||
p = p.split(';');
|
||||
if (p.length < 5) {
|
||||
return '{}'
|
||||
}
|
||||
let _ps = parseTags.getParse(p[0]);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
let is_json = p[0].startsWith('json:');
|
||||
p[0] = p[0].replace(/^(jsp:|json:|jq:)/,'');
|
||||
try {
|
||||
let html = getHtml(MY_URL);
|
||||
if (html) {
|
||||
if(is_json){
|
||||
html = dealJson(html);
|
||||
}
|
||||
let list = _pdfa(html, p[0]);
|
||||
list.forEach(it => {
|
||||
let links = p[4].split('+').map(p4=>{
|
||||
return !rule.detailUrl?_pd(it, p4,MY_URL):_pdfh(it, p4);
|
||||
});
|
||||
let link = links.join('$');
|
||||
let vod_id = rule.detailUrl?MY_CATE+'$'+link:link;
|
||||
|
||||
let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g,'').trim();
|
||||
let vod_pic = _pd(it, p[2],MY_URL);
|
||||
|
||||
if(rule.二级==='*'){
|
||||
vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
|
||||
}
|
||||
d.push({
|
||||
'vod_id': vod_id,
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic,
|
||||
'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g,'').trim(),
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
}
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(rule.图片来源){
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic + rule.图片来源;
|
||||
}
|
||||
});
|
||||
}
|
||||
// print(d);
|
||||
if(d.length>0){
|
||||
print(d.slice(0,2));
|
||||
}
|
||||
let pagecount = 0;
|
||||
if(rule.pagecount && typeof(rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)){
|
||||
print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);
|
||||
pagecount = parseInt(rule.pagecount[MY_CATE]);
|
||||
}
|
||||
let nodata = {
|
||||
list:[{vod_name:'无数据,防无限请求',vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}],
|
||||
total:1,pagecount:1,page:1,limit:1
|
||||
};
|
||||
let vod = d.length<1?JSON.stringify(nodata):JSON.stringify({
|
||||
'page': parseInt(cateObj.pg),
|
||||
'pagecount': pagecount||999,
|
||||
'limit': 20,
|
||||
'total': 999,
|
||||
'list': d,
|
||||
});
|
||||
// print(vod);
|
||||
return vod
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索列表数据解析
|
||||
* @param searchObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function searchParse(searchObj) {
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let d = [];
|
||||
if(!searchObj.searchUrl){
|
||||
return '{}'
|
||||
}
|
||||
let p = searchObj.搜索==='*'&&rule.一级 ? rule.一级 : searchObj.搜索;
|
||||
if(!p||typeof(p)!=='string'){
|
||||
return '{}'
|
||||
}
|
||||
p = p.trim();
|
||||
let pp = rule.一级.split(';');
|
||||
let url = searchObj.searchUrl.replaceAll('**', searchObj.wd);
|
||||
if(searchObj.pg === 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
|
||||
url = url.split('[')[1].split(']')[0];
|
||||
}else if(searchObj.pg > 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
|
||||
url = url.split('[')[0];
|
||||
}
|
||||
|
||||
if(/fypage/.test(url)){
|
||||
if(url.includes('(')&&url.includes(')')){
|
||||
let url_rep = url.match(/.*?\((.*)\)/)[1];
|
||||
// console.log(url_rep);
|
||||
let cnt_page = url_rep.replaceAll('fypage', searchObj.pg);
|
||||
// console.log(cnt_page);
|
||||
let cnt_pg = eval(cnt_page);
|
||||
// console.log(cnt_pg);
|
||||
url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
|
||||
}else{
|
||||
url = url.replaceAll('fypage',searchObj.pg);
|
||||
}
|
||||
}
|
||||
|
||||
MY_URL = url;
|
||||
console.log(MY_URL);
|
||||
// log(searchObj.搜索);
|
||||
// setItem('MY_URL',MY_URL);
|
||||
if(p.startsWith('js:')){
|
||||
const TYPE = 'search';
|
||||
const MY_PAGE = searchObj.pg;
|
||||
const KEY = searchObj.wd;
|
||||
var input = MY_URL;
|
||||
var detailUrl = rule.detailUrl||'';
|
||||
eval(p.trim().replace('js:',''));
|
||||
d = VODS;
|
||||
}else{
|
||||
p = p.split(';');
|
||||
if (p.length < 5) {
|
||||
return '{}'
|
||||
}
|
||||
let p0 = getPP(p,0,pp,0);
|
||||
let _ps = parseTags.getParse(p0);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
let is_json = p0.startsWith('json:');
|
||||
p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
|
||||
// print('1381 p0:'+p0);
|
||||
try {
|
||||
let req_method = MY_URL.split(';').length>1?MY_URL.split(';')[1].toLowerCase():'get';
|
||||
let html;
|
||||
if(req_method==='post'){
|
||||
let rurls = MY_URL.split(';')[0].split('#')
|
||||
let rurl = rurls[0]
|
||||
let params = rurls.length > 1 ?rurls[1]:'';
|
||||
print(`post=》rurl:${rurl},params:${params}`);
|
||||
// let new_dict = {};
|
||||
// let new_tmp = params.split('&');
|
||||
// new_tmp.forEach(i=>{
|
||||
// new_dict[i.split('=')[0]] = i.split('=')[1];
|
||||
// });
|
||||
// html = post(rurl,{body:new_dict});
|
||||
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let postData = {body:params};
|
||||
Object.assign(_fetch_params,postData);
|
||||
html = post(rurl,_fetch_params);
|
||||
}else if(req_method==='postjson'){
|
||||
let rurls = MY_URL.split(';')[0].split('#')
|
||||
let rurl = rurls[0]
|
||||
let params = rurls.length > 1 ?rurls[1]:'';
|
||||
print(`postjson-》rurl:${rurl},params:${params}`);
|
||||
try{
|
||||
params = JSON.parse(params);
|
||||
}catch (e) {
|
||||
params = '{}'
|
||||
}
|
||||
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let postData = {body:params};
|
||||
Object.assign(_fetch_params,postData);
|
||||
html = post(rurl,_fetch_params);
|
||||
}else{
|
||||
html = getHtml(MY_URL);
|
||||
}
|
||||
if (html) {
|
||||
if(/系统安全验证|输入验证码/.test(html)){
|
||||
let cookie = verifyCode(MY_URL);
|
||||
if(cookie){
|
||||
console.log(`本次成功过验证,cookie:${cookie}`);
|
||||
setItem(RULE_CK,cookie);
|
||||
}else{
|
||||
console.log(`本次自动过搜索验证失败,cookie:${cookie}`);
|
||||
}
|
||||
// obj.headers['Cookie'] = cookie;
|
||||
html = getHtml(MY_URL);
|
||||
}
|
||||
if(!html.includes(searchObj.wd)){
|
||||
console.log('搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码');
|
||||
console.log(html);
|
||||
}
|
||||
if(is_json){
|
||||
// console.log(html);
|
||||
html = dealJson(html);
|
||||
// console.log(JSON.stringify(html));
|
||||
}
|
||||
// console.log(html);
|
||||
let list = _pdfa(html, p0);
|
||||
// print(list.length);
|
||||
// print(list);
|
||||
let p1 = getPP(p, 1, pp, 1);
|
||||
let p2 = getPP(p, 2, pp, 2);
|
||||
let p3 = getPP(p, 3, pp, 3);
|
||||
let p4 = getPP(p, 4, pp, 4);
|
||||
let p5 = getPP(p,5,pp,5);
|
||||
list.forEach(it => {
|
||||
let links = p4.split('+').map(_p4=>{
|
||||
return !rule.detailUrl?_pd(it, _p4,MY_URL):_pdfh(it, _p4)
|
||||
});
|
||||
let link = links.join('$');
|
||||
let content;
|
||||
if(p.length > 5 && p[5]){
|
||||
content = _pdfh(it, p5);
|
||||
}else{
|
||||
content = '';
|
||||
}
|
||||
let vod_id = link;
|
||||
let vod_name = _pdfh(it, p1).replace(/\n|\t/g,'').trim();
|
||||
let vod_pic = _pd(it, p2,MY_URL);
|
||||
if(rule.二级==='*'){
|
||||
vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
|
||||
}
|
||||
let ob = {
|
||||
'vod_id': vod_id,
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic,
|
||||
'vod_remarks': _pdfh(it, p3).replace(/\n|\t/g,'').trim(),
|
||||
'vod_content': content.replace(/\n|\t/g,'').trim(),
|
||||
};
|
||||
d.push(ob);
|
||||
});
|
||||
|
||||
}
|
||||
} catch (e) {
|
||||
print('搜索发生错误:'+e.message);
|
||||
return '{}'
|
||||
}
|
||||
}
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(rule.图片来源){
|
||||
d.forEach(it=>{
|
||||
if(it.vod_pic&&it.vod_pic.startsWith('http')){
|
||||
it.vod_pic = it.vod_pic + rule.图片来源;
|
||||
}
|
||||
});
|
||||
}
|
||||
// print(d);
|
||||
return JSON.stringify({
|
||||
'page': parseInt(searchObj.pg),
|
||||
'pagecount': 10,
|
||||
'limit': 20,
|
||||
'total': 100,
|
||||
'list': d,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 二级详情页数据解析
|
||||
* @param detailObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function detailParse(detailObj){
|
||||
let t1 = (new Date()).getTime();
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
let orId = detailObj.orId;
|
||||
let vod_name = '片名';
|
||||
let vod_pic = '';
|
||||
let vod_id = orId;
|
||||
if(rule.二级==='*'){
|
||||
// vod_id = orId.split('@@')[0]; // 千万不能分割
|
||||
let extra = orId.split('@@');
|
||||
vod_name = extra.length>1?extra[1]:vod_name;
|
||||
vod_pic = extra.length>2?extra[2]:vod_pic;
|
||||
}
|
||||
// print(vod_pic);
|
||||
let vod = {
|
||||
vod_id: vod_id, //"id",
|
||||
vod_name: vod_name,
|
||||
vod_pic: vod_pic,
|
||||
type_name: "类型",
|
||||
vod_year: "年份",
|
||||
vod_area: "地区",
|
||||
vod_remarks: "更新信息",
|
||||
vod_actor: "主演",
|
||||
vod_director: "导演",
|
||||
vod_content: "简介"
|
||||
};
|
||||
let p = detailObj.二级;
|
||||
let url = detailObj.url;
|
||||
let detailUrl = detailObj.detailUrl;
|
||||
let fyclass = detailObj.fyclass;
|
||||
let tab_exclude = detailObj.tab_exclude;
|
||||
let html = detailObj.html||'';
|
||||
MY_URL = url;
|
||||
if(detailObj.二级访问前){
|
||||
try {
|
||||
print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
|
||||
eval(detailObj.二级访问前.trim().replace('js:',''));
|
||||
}catch (e) {
|
||||
print(`二级访问前执行代码出现错误:${e.message}`)
|
||||
}
|
||||
}
|
||||
// console.log(MY_URL);
|
||||
// setItem('MY_URL',MY_URL);
|
||||
if(p==='*'){
|
||||
vod.vod_play_from = '道长在线';
|
||||
vod.vod_remarks = detailUrl;
|
||||
vod.vod_actor = '没有二级,只有一级链接直接嗅探播放';
|
||||
vod.vod_content = MY_URL;
|
||||
vod.vod_play_url = '嗅探播放$' + MY_URL.split('@@')[0];
|
||||
}else if(typeof(p)==='string'&&p.trim().startsWith('js:')){
|
||||
const TYPE = 'detail';
|
||||
var input = MY_URL;
|
||||
var play_url = '';
|
||||
eval(p.trim().replace('js:',''));
|
||||
vod = VOD;
|
||||
console.log(JSON.stringify(vod));
|
||||
}else if(p&&typeof(p)==='object'){
|
||||
let tt1 = (new Date()).getTime();
|
||||
if(!html){
|
||||
html = getHtml(MY_URL);
|
||||
}
|
||||
print(`二级${MY_URL}仅获取源码耗时:${(new Date()).getTime()-tt1}毫秒`);
|
||||
let _ps;
|
||||
if(p.is_json){
|
||||
print('二级是json');
|
||||
_ps = parseTags.json;
|
||||
html = dealJson(html);
|
||||
}else if(p.is_jsp){
|
||||
print('二级是jsp');
|
||||
_ps = parseTags.jsp;
|
||||
}else if(p.is_jq){
|
||||
print('二级是jq');
|
||||
_ps = parseTags.jq;
|
||||
}else{
|
||||
print('二级默认jq');
|
||||
_ps = parseTags.jq;
|
||||
// print('二级默认jsp');
|
||||
// _ps = parseTags.jsp;
|
||||
}
|
||||
let tt2 = (new Date()).getTime();
|
||||
print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
|
||||
_pdfa = _ps.pdfa;
|
||||
_pdfh = _ps.pdfh;
|
||||
_pd = _ps.pd;
|
||||
if(p.title){
|
||||
let p1 = p.title.split(';');
|
||||
vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
|
||||
let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').replace(/ /g,'').trim():'';
|
||||
vod.type_name = type_name||vod.type_name;
|
||||
}
|
||||
if(p.desc){
|
||||
try{
|
||||
let p1 = p.desc.split(';');
|
||||
vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
|
||||
vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').trim():'';
|
||||
vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g,'').trim():'';
|
||||
// vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replaceAll('\n', ' ').trim():'';
|
||||
vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g,'').trim():'';
|
||||
vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g,'').trim():'';
|
||||
}
|
||||
catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
if(p.content){
|
||||
try{
|
||||
let p1 = p.content.split(';');
|
||||
vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
if(p.img){
|
||||
try{
|
||||
let p1 = p.img.split(';');
|
||||
vod.vod_pic = _pd(html, p1[0],MY_URL);
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
|
||||
let vod_play_from = '$$$';
|
||||
let playFrom = [];
|
||||
if(p.重定向&&p.重定向.startsWith('js:')){
|
||||
print('开始执行重定向代码:'+p.重定向);
|
||||
html = eval(p.重定向.replace('js:',''));
|
||||
}
|
||||
|
||||
// console.log(2);
|
||||
if(p.tabs){
|
||||
if(p.tabs.startsWith('js:')){
|
||||
print('开始执行tabs代码:'+p.tabs);
|
||||
var input = MY_URL;
|
||||
eval(p.tabs.replace('js:',''));
|
||||
playFrom = TABS;
|
||||
}else{
|
||||
let p_tab = p.tabs.split(';')[0];
|
||||
// console.log(p_tab);
|
||||
let vHeader = _pdfa(html, p_tab);
|
||||
console.log(vHeader.length);
|
||||
let tab_text = p.tab_text||'body&&Text';
|
||||
// print('tab_text:'+tab_text);
|
||||
let new_map = {};
|
||||
for(let v of vHeader){
|
||||
let v_title = _pdfh(v,tab_text).trim();
|
||||
if(!v_title){
|
||||
v_title = '线路空'
|
||||
}
|
||||
console.log(v_title);
|
||||
if(tab_exclude&& (new RegExp(tab_exclude)).test(v_title)){
|
||||
continue;
|
||||
}
|
||||
if(!new_map.hasOwnProperty(v_title)){
|
||||
new_map[v_title] = 1;
|
||||
}else{
|
||||
new_map[v_title] += 1;
|
||||
}
|
||||
if(new_map[v_title]>1){
|
||||
v_title+=Number(new_map[v_title]-1);
|
||||
}
|
||||
playFrom.push(v_title);
|
||||
}
|
||||
}
|
||||
console.log(JSON.stringify(playFrom));
|
||||
}else{
|
||||
playFrom = ['道长在线']
|
||||
}
|
||||
vod.vod_play_from = playFrom.join(vod_play_from);
|
||||
|
||||
// console.log(3);
|
||||
let vod_play_url = '$$$';
|
||||
let vod_tab_list = [];
|
||||
if(p.lists){
|
||||
if(p.lists.startsWith('js:')){
|
||||
print('开始执行lists代码:'+p.lists);
|
||||
try {
|
||||
var input = MY_URL;
|
||||
var play_url = '';
|
||||
eval(p.lists.replace('js:',''));
|
||||
for(let i in LISTS){
|
||||
if(LISTS.hasOwnProperty(i)){
|
||||
// print(i);
|
||||
try {
|
||||
LISTS[i] = LISTS[i].map(it=>it.split('$').slice(0,2).join('$'));
|
||||
}catch (e) {
|
||||
print('格式化LISTS发生错误:'+e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
vod_play_url = LISTS.map(it=>it.join('#')).join(vod_play_url);
|
||||
}catch (e) {
|
||||
print('js执行lists: 发生错误:'+e.message);
|
||||
}
|
||||
|
||||
}else{
|
||||
let list_text = p.list_text||'body&&Text';
|
||||
let list_url = p.list_url||'a&&href';
|
||||
// print('list_text:'+list_text);
|
||||
// print('list_url:'+list_url);
|
||||
// print('list_parse:'+p.lists);
|
||||
let is_tab_js = p.tabs.trim().startsWith('js:');
|
||||
for(let i=0;i<playFrom.length;i++){
|
||||
let tab_name = playFrom[i];
|
||||
let tab_ext = p.tabs.split(';').length > 1 && !is_tab_js ? p.tabs.split(';')[1] : '';
|
||||
let p1 = p.lists.replaceAll('#idv', tab_name).replaceAll('#id', i);
|
||||
tab_ext = tab_ext.replaceAll('#idv', tab_name).replaceAll('#id', i);
|
||||
let tabName = tab_ext?_pdfh(html, tab_ext):tab_name;
|
||||
console.log(tabName);
|
||||
// print('tab_ext:'+tab_ext);
|
||||
let new_vod_list = [];
|
||||
let tt1 = (new Date()).getTime();
|
||||
// print('pdfl:'+typeof (pdfl));
|
||||
if(typeof (pdfl) ==='function'){
|
||||
new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL);
|
||||
}else {
|
||||
let vodList = [];
|
||||
try {
|
||||
vodList = _pdfa(html, p1);
|
||||
console.log('len(vodList):'+vodList.length);
|
||||
}catch (e) {
|
||||
// console.log(e.message);
|
||||
}
|
||||
for (let i = 0; i < vodList.length; i++) {
|
||||
let it = vodList[i];
|
||||
new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL));
|
||||
}
|
||||
}
|
||||
if(new_vod_list.length>0){
|
||||
new_vod_list = forceOrder(new_vod_list,'',x=>x.split('$')[0]);
|
||||
console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date()).getTime()-tt1}毫秒`);
|
||||
}
|
||||
// print(new_vod_list);
|
||||
let vlist = new_vod_list.join('#');
|
||||
vod_tab_list.push(vlist);
|
||||
}
|
||||
vod_play_url = vod_tab_list.join(vod_play_url);
|
||||
}
|
||||
}
|
||||
vod.vod_play_url = vod_play_url;
|
||||
}
|
||||
if(rule.图片替换 && rule.图片替换.includes('=>')){
|
||||
let replace_from = rule.图片替换.split('=>')[0];
|
||||
let replace_to = rule.图片替换.split('=>')[1];
|
||||
vod.vod_pic = vod.vod_pic.replace(replace_from,replace_to);
|
||||
}
|
||||
if(rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){
|
||||
vod.vod_pic = vod.vod_pic + rule.图片来源;
|
||||
}
|
||||
if(!vod.vod_id||(vod_id.includes('$')&&vod.vod_id!==vod_id)){
|
||||
vod.vod_id = vod_id;
|
||||
}
|
||||
let t2 = (new Date()).getTime();
|
||||
console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
|
||||
// print(vod);
|
||||
vod = vodDeal(vod);
|
||||
// print(vod);
|
||||
return JSON.stringify({
|
||||
list: [vod]
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取二级待返回的播放线路没处理时的索引关系
|
||||
* @param vod
|
||||
* @returns {{}}
|
||||
*/
|
||||
function get_tab_index(vod){
|
||||
let obj = {};
|
||||
vod.vod_play_from.split('$$$').forEach((it,index)=>{
|
||||
obj[it] = index;
|
||||
});
|
||||
return obj
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理待返回的vod数据|线路去除,排序,重命名
|
||||
* @param vod
|
||||
* @returns {*}
|
||||
*/
|
||||
function vodDeal(vod){
|
||||
let vod_play_from = vod.vod_play_from.split('$$$');
|
||||
let vod_play_url = vod.vod_play_url.split('$$$');
|
||||
|
||||
// 移除指定线路后的列表
|
||||
let tab_removed_list = vod_play_from;
|
||||
// 排序后的线路列表
|
||||
let tab_ordered_list = vod_play_from;
|
||||
// 线路重命名后的列表
|
||||
let tab_renamed_list = vod_play_from;
|
||||
// 定义实际要返回线路
|
||||
let tab_list = vod_play_from;
|
||||
// 选集列表根据线路排序
|
||||
let play_ordered_list = vod_play_url;
|
||||
|
||||
// 判断有移除线路或者线路排序
|
||||
if((rule.tab_remove&&rule.tab_remove.length>0)||(rule.tab_order&&rule.tab_order.length>0)){
|
||||
// 获取原来线路的索引下标
|
||||
let tab_index_dict = get_tab_index(vod);
|
||||
|
||||
if(rule.tab_remove&&rule.tab_remove.length>0){
|
||||
tab_removed_list = vod_play_from.filter(it=>!rule.tab_remove.includes(it));
|
||||
tab_list = tab_removed_list;
|
||||
}
|
||||
|
||||
if(rule.tab_order&&rule.tab_order.length>0){
|
||||
let tab_order = rule.tab_order;
|
||||
tab_ordered_list = tab_removed_list.sort((a, b) => {
|
||||
return (tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a)) - (tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))
|
||||
});
|
||||
tab_list = tab_ordered_list;
|
||||
}
|
||||
play_ordered_list = tab_list.map(it=>vod_play_url[tab_index_dict[it]]);
|
||||
}
|
||||
|
||||
if(rule.tab_rename&&typeof(rule.tab_rename)==='object'&Object.keys(rule.tab_rename).length>0){
|
||||
tab_renamed_list = tab_list.map(it=>rule.tab_rename[it]||it);
|
||||
tab_list = tab_renamed_list;
|
||||
}
|
||||
vod.vod_play_from = tab_list.join('$$$');
|
||||
vod.vod_play_url = play_ordered_list.join('$$$');
|
||||
return vod
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否需要解析
|
||||
* @param url
|
||||
* @returns {number|number}
|
||||
*/
|
||||
function tellIsJx(url){
|
||||
try {
|
||||
let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split('?')[0]) && 是否正版(url);
|
||||
return is_vip?1:0
|
||||
}catch (e) {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 选集播放点击事件解析
|
||||
* @param playObj
|
||||
* @returns {string}
|
||||
*/
|
||||
function playParse(playObj){
|
||||
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||
MY_URL = playObj.url;
|
||||
var MY_FLAG = playObj.flag;
|
||||
if(!/http/.test(MY_URL)){
|
||||
try {
|
||||
MY_URL = base64Decode(MY_URL);
|
||||
}catch (e) {}
|
||||
}
|
||||
MY_URL = decodeURIComponent(MY_URL);
|
||||
var input = MY_URL;//注入给免嗅js
|
||||
var flag = MY_FLAG;//注入播放线路名称给免嗅js
|
||||
let common_play = {
|
||||
parse:1,
|
||||
url:input,
|
||||
flag:flag,
|
||||
// url:urlencode(input),
|
||||
jx:tellIsJx(input)
|
||||
};
|
||||
let lazy_play;
|
||||
if(!rule.play_parse||!rule.lazy){
|
||||
lazy_play = common_play;
|
||||
}else if(rule.play_parse&&rule.lazy&&typeof(rule.lazy)==='string'){
|
||||
try {
|
||||
let lazy_code = rule.lazy.replace('js:','').trim();
|
||||
print('开始执行js免嗅=>'+lazy_code);
|
||||
eval(lazy_code);
|
||||
lazy_play = typeof(input) === 'object'?input:{
|
||||
parse:1,
|
||||
jx:tellIsJx(input),
|
||||
url:input
|
||||
};
|
||||
}catch (e) {
|
||||
print('js免嗅错误:'+e.message);
|
||||
lazy_play = common_play;
|
||||
}
|
||||
}else{
|
||||
lazy_play = common_play;
|
||||
}
|
||||
// print('play_json:'+typeof(rule.play_json));
|
||||
// console.log(Array.isArray(rule.play_json));
|
||||
if(Array.isArray(rule.play_json) && rule.play_json.length >0){ // 数组情况判断长度大于0
|
||||
let web_url = lazy_play.url;
|
||||
for(let pjson of rule.play_json){
|
||||
if(pjson.re && (pjson.re==='*'||web_url.match(new RegExp(pjson.re)))){
|
||||
if(pjson.json && typeof(pjson.json)==='object'){
|
||||
let base_json = pjson.json;
|
||||
// print('开始合并:');
|
||||
// print(base_json);
|
||||
lazy_play = Object.assign(lazy_play,base_json);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(rule.play_json && !Array.isArray(rule.play_json)){ // 其他情况 非[] 判断true/false
|
||||
let base_json = {
|
||||
jx:1,
|
||||
parse:1,
|
||||
};
|
||||
lazy_play = Object.assign(lazy_play,base_json);
|
||||
}else if(!rule.play_json){ // 不解析传0
|
||||
let base_json = {
|
||||
jx:0,
|
||||
parse:1,
|
||||
};
|
||||
lazy_play = Object.assign(lazy_play,base_json);
|
||||
}
|
||||
console.log(JSON.stringify(lazy_play));
|
||||
return JSON.stringify(lazy_play);
|
||||
}
|
||||
|
||||
/**
|
||||
* 本地代理解析规则
|
||||
* @param params
|
||||
*/
|
||||
function proxyParse(proxyObj){
|
||||
var input = proxyObj.params;
|
||||
if(proxyObj.proxy_rule){
|
||||
log('准备执行本地代理规则:\n'+proxyObj.proxy_rule);
|
||||
try {
|
||||
eval(proxyObj.proxy_rule);
|
||||
if(input && input!== proxyObj.params && Array.isArray(input) &&input.length===3){
|
||||
return input
|
||||
}else{
|
||||
return [404,'text/plain','Not Found']
|
||||
}
|
||||
}catch (e) {
|
||||
return [500,'text/plain','代理规则错误:'+e.message]
|
||||
}
|
||||
|
||||
}else{
|
||||
return [404,'text/plain','Not Found']
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 辅助嗅探解析规则
|
||||
* @param isVideoObj
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isVideoParse(isVideoObj){
|
||||
var input = isVideoObj.url;
|
||||
if(!isVideoObj.t){ // t为假代表默认传的正则字符串
|
||||
let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
|
||||
return re_matcher.test(input);
|
||||
}else{
|
||||
// 执行js
|
||||
try {
|
||||
eval(isVideoObj.isVideo);
|
||||
if(typeof(input)==='boolean'){
|
||||
return input
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
}catch (e) {
|
||||
log('执行嗅探规则发生错误:'+e.message);
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* js源预处理特定返回对象中的函数
|
||||
* @param ext
|
||||
*/
|
||||
function init(ext) {
|
||||
console.log('init');
|
||||
try {
|
||||
// make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改
|
||||
// if (typeof (globalThis.mubanJs) === 'undefined') {
|
||||
// let mubanJs = request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js', { 'User-Agent': MOBILE_UA });
|
||||
// mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default');
|
||||
// // console.log(mubanJs);
|
||||
// globalThis.mubanJs = mubanJs;
|
||||
// }
|
||||
// let muban = eval(globalThis.mubanJs);
|
||||
|
||||
let muban = 模板.getMubans();
|
||||
// print(typeof (muban));
|
||||
// print(muban);
|
||||
if (typeof ext == 'object'){
|
||||
rule = ext;
|
||||
} else if (typeof ext == 'string') {
|
||||
if (ext.startsWith('http')) {
|
||||
let js = request(ext,{'method':'GET'});
|
||||
if (js){
|
||||
eval(js.replace('var rule', 'rule'));
|
||||
}
|
||||
} else {
|
||||
eval(ext.replace('var rule', 'rule'));
|
||||
}
|
||||
}
|
||||
if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
|
||||
print('继承模板:'+rule.模板);
|
||||
rule = Object.assign(muban[rule.模板], rule);
|
||||
}
|
||||
/** 处理一下 rule规则关键字段没传递的情况 **/
|
||||
let rule_cate_excludes = (rule.cate_exclude||'').split('|').filter(it=>it.trim());
|
||||
let rule_tab_excludes = (rule.tab_exclude||'').split('|').filter(it=>it.trim());
|
||||
rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split('|').filter(it=>it.trim()));
|
||||
rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split('|').filter(it=>it.trim()));
|
||||
|
||||
rule.cate_exclude = rule_cate_excludes.join('|');
|
||||
rule.tab_exclude = rule_tab_excludes.join('|');
|
||||
rule.host = (rule.host||'').rstrip('/');
|
||||
HOST = rule.host;
|
||||
if(rule.hostJs){
|
||||
console.log(`检测到hostJs,准备执行...`);
|
||||
try {
|
||||
eval(rule.hostJs);
|
||||
rule.host = HOST.rstrip('/');
|
||||
}catch (e) {
|
||||
console.log(`执行${rule.hostJs}获取host发生错误:`+e.message);
|
||||
}
|
||||
}
|
||||
rule.url = rule.url||'';
|
||||
rule.double = rule.double||false;
|
||||
rule.homeUrl = rule.homeUrl||'';
|
||||
rule.detailUrl = rule.detailUrl||'';
|
||||
rule.searchUrl = rule.searchUrl||'';
|
||||
rule.homeUrl = rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):(rule.homeUrl||rule.host);
|
||||
rule.homeUrl = cheerio.jinja2(rule.homeUrl,{rule:rule});
|
||||
rule.detailUrl = rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;
|
||||
rule.二级访问前 = rule.二级访问前||'';
|
||||
if(rule.url.includes('[')&&rule.url.includes(']')){
|
||||
let u1 = rule.url.split('[')[0]
|
||||
let u2 = rule.url.split('[')[1].split(']')[0]
|
||||
rule.url = rule.host && rule.url?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.url;
|
||||
}else{
|
||||
rule.url = rule.host && rule.url ? urljoin(rule.host,rule.url) : rule.url;
|
||||
}
|
||||
if(rule.searchUrl.includes('[')&&rule.searchUrl.includes(']')&&!rule.searchUrl.includes('#')){
|
||||
let u1 = rule.searchUrl.split('[')[0]
|
||||
let u2 = rule.searchUrl.split('[')[1].split(']')[0]
|
||||
rule.searchUrl = rule.host && rule.searchUrl?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.searchUrl;
|
||||
}else{
|
||||
rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host,rule.searchUrl) : rule.searchUrl;
|
||||
}
|
||||
|
||||
rule.timeout = rule.timeout||5000;
|
||||
rule.encoding = rule.编码||rule.encoding||'utf-8';
|
||||
rule.search_encoding = rule.搜索编码||rule.search_encoding||'';
|
||||
rule.图片来源 = rule.图片来源||'';
|
||||
rule.图片替换 = rule.图片替换||'';
|
||||
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
|
||||
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
|
||||
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
|
||||
rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
|
||||
rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
|
||||
|
||||
rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
|
||||
|
||||
rule.tab_remove = rule.hasOwnProperty('tab_remove')?rule.tab_remove:[];
|
||||
rule.tab_order = rule.hasOwnProperty('tab_order')?rule.tab_order:[];
|
||||
rule.tab_rename = rule.hasOwnProperty('tab_rename')?rule.tab_rename:{};
|
||||
|
||||
if(rule.headers && typeof(rule.headers) === 'object'){
|
||||
try {
|
||||
let header_keys = Object.keys(rule.headers);
|
||||
for(let k of header_keys){
|
||||
if(k.toLowerCase() === 'user-agent'){
|
||||
let v = rule.headers[k];
|
||||
console.log(v);
|
||||
if(['MOBILE_UA','PC_UA','UC_UA','IOS_UA','UA'].includes(v)){
|
||||
rule.headers[k] = eval(v);
|
||||
}
|
||||
}else if(k.toLowerCase() === 'cookie'){
|
||||
let v = rule.headers[k];
|
||||
if(v && v.startsWith('http')){
|
||||
console.log(v);
|
||||
try {
|
||||
v = fetch(v);
|
||||
console.log(v);
|
||||
rule.headers[k] = v;
|
||||
}catch (e) {
|
||||
console.log(`从${v}获取cookie发生错误:`+e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch (e) {
|
||||
console.log('处理headers发生错误:'+e.message);
|
||||
}
|
||||
}
|
||||
// print(rule.headers);
|
||||
rule_fetch_params = {'headers': rule.headers||false, 'timeout': rule.timeout, 'encoding': rule.encoding};
|
||||
oheaders = rule.headers||{};
|
||||
RKEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host);
|
||||
pre(); // 预处理
|
||||
init_test();
|
||||
}catch (e) {
|
||||
console.log('init_test发生错误:'+e.message);
|
||||
}
|
||||
}
|
||||
|
||||
let homeHtmlCache = undefined;
|
||||
|
||||
/**
|
||||
* js源获取首页分类和筛选特定返回对象中的函数
|
||||
* @param filter 筛选条件字典对象
|
||||
* @returns {string}
|
||||
*/
|
||||
function home(filter) {
|
||||
console.log("home");
|
||||
let homeObj = {
|
||||
filter:rule.filter||false,
|
||||
MY_URL: rule.homeUrl,
|
||||
class_name: rule.class_name || '',
|
||||
class_url: rule.class_url || '',
|
||||
class_parse: rule.class_parse || '',
|
||||
cate_exclude: rule.cate_exclude,
|
||||
};
|
||||
return homeParse(homeObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* js源获取首页推荐数据列表特定返回对象中的函数
|
||||
* @param params
|
||||
* @returns {string}
|
||||
*/
|
||||
function homeVod(params) {
|
||||
console.log("homeVod");
|
||||
let homeVodObj = {
|
||||
推荐:rule.推荐,
|
||||
double:rule.double,
|
||||
homeUrl:rule.homeUrl,
|
||||
detailUrl:rule.detailUrl
|
||||
};
|
||||
return homeVodParse(homeVodObj)
|
||||
// return "{}";
|
||||
}
|
||||
|
||||
/**
|
||||
* js源获取分类页一级数据列表特定返回对象中的函数
|
||||
* @param tid 分类id
|
||||
* @param pg 页数
|
||||
* @param filter 当前选中的筛选条件
|
||||
* @param extend 扩展
|
||||
* @returns {string}
|
||||
*/
|
||||
function category(tid, pg, filter, extend) {
|
||||
let cateObj = {
|
||||
url: rule.url,
|
||||
一级: rule.一级,
|
||||
tid: tid,
|
||||
pg: parseInt(pg),
|
||||
filter: filter,
|
||||
extend: extend
|
||||
};
|
||||
// console.log(JSON.stringify(extend));
|
||||
return categoryParse(cateObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* js源获取二级详情页数据特定返回对象中的函数
|
||||
* @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id
|
||||
* @returns {string}
|
||||
*/
|
||||
function detail(vod_url) {
|
||||
let orId = vod_url;
|
||||
let fyclass = '';
|
||||
log('orId:'+orId);
|
||||
if(vod_url.indexOf('$')>-1){
|
||||
let tmp = vod_url.split('$');
|
||||
fyclass = tmp[0];
|
||||
vod_url = tmp[1];
|
||||
}
|
||||
let detailUrl = vod_url.split('@@')[0];
|
||||
let url;
|
||||
if(!detailUrl.startsWith('http')&&!detailUrl.includes('/')){
|
||||
url = rule.detailUrl.replaceAll('fyid', detailUrl).replaceAll('fyclass',fyclass);
|
||||
}else if(detailUrl.includes('/')){
|
||||
url = urljoin(rule.homeUrl,detailUrl);
|
||||
}else{
|
||||
url = detailUrl
|
||||
}
|
||||
let detailObj = {
|
||||
orId: orId,
|
||||
url:url,
|
||||
二级:rule.二级,
|
||||
二级访问前:rule.二级访问前,
|
||||
detailUrl:detailUrl,
|
||||
fyclass:fyclass,
|
||||
tab_exclude:rule.tab_exclude,
|
||||
}
|
||||
return detailParse(detailObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* js源选集按钮播放点击事件特定返回对象中的函数
|
||||
* @param flag 线路名
|
||||
* @param id 播放按钮的链接
|
||||
* @param flags 全局配置的flags是否需要解析的标识列表
|
||||
* @returns {string}
|
||||
*/
|
||||
function play(flag, id, flags) {
|
||||
let playObj = {
|
||||
url:id,
|
||||
flag:flag,
|
||||
flags:flags
|
||||
}
|
||||
return playParse(playObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* js源搜索返回的数据列表特定返回对象中的函数
|
||||
* @param wd 搜索关键字
|
||||
* @param quick 是否来自快速搜索
|
||||
* @returns {string}
|
||||
*/
|
||||
function search(wd, quick, pg) {
|
||||
if(rule.search_encoding){
|
||||
if(rule.search_encoding.toLowerCase()!=='utf-8'){
|
||||
// 按搜索编码进行编码
|
||||
wd = encodeStr(wd,rule.search_encoding);
|
||||
}
|
||||
}else if(rule.encoding && rule.encoding.toLowerCase()!=='utf-8'){
|
||||
// 按全局编码进行编码
|
||||
wd = encodeStr(wd,rule.encoding);
|
||||
}
|
||||
let searchObj = {
|
||||
searchUrl: rule.searchUrl,
|
||||
搜索: rule.搜索,
|
||||
wd: wd,
|
||||
//pg: pg,
|
||||
pg: pg||1,
|
||||
quick: quick,
|
||||
};
|
||||
// console.log(JSON.stringify(searchObj));
|
||||
return searchParse(searchObj)
|
||||
}
|
||||
|
||||
/**
|
||||
* js源本地代理返回的数据列表特定返回对象中的函数
|
||||
* @param params 代理链接参数比如 /proxy?do=js&url=https://wwww.baidu.com => params就是 {do:'js','url':'https://wwww.baidu.com'}
|
||||
* @returns {*}
|
||||
*/
|
||||
function proxy(params){
|
||||
if(rule.proxy_rule&&rule.proxy_rule.trim()){
|
||||
rule.proxy_rule = rule.proxy_rule.trim();
|
||||
}
|
||||
if(rule.proxy_rule.startsWith('js:')){
|
||||
rule.proxy_rule = rule.proxy_rule.replace('js:','');
|
||||
}
|
||||
let proxyObj = {
|
||||
params:params,
|
||||
proxy_rule:rule.proxy_rule
|
||||
};
|
||||
return proxyParse(proxyObj)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
|
||||
* @returns {*|boolean|boolean}
|
||||
*/
|
||||
function sniffer(){
|
||||
let enable_sniffer = rule.sniffer || false;
|
||||
if(enable_sniffer){
|
||||
// log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
|
||||
log('开始执行辅助嗅探代理规则...');
|
||||
}
|
||||
return enable_sniffer
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
|
||||
* @param url
|
||||
*/
|
||||
function isVideo(url){
|
||||
let t = 0;
|
||||
let is_video;
|
||||
if(rule.isVideo &&rule.isVideo.trim()){
|
||||
is_video = rule.isVideo.trim();
|
||||
}
|
||||
if(is_video.startsWith('js:')){
|
||||
is_video = is_video.replace('js:','');
|
||||
t = 1;
|
||||
}
|
||||
let isVideoObj = {
|
||||
url:url,
|
||||
isVideo:is_video,
|
||||
t:t,
|
||||
};
|
||||
let result = isVideoParse(isVideoObj);
|
||||
if(result){
|
||||
log('成功执行辅助嗅探规则并检测到视频地址:\n'+rule.isVideo);
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function DRPY(){//导出函数
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
proxy:proxy,
|
||||
sniffer:sniffer,
|
||||
isVideo:isVideo
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出函数无法简写成下面的形式:
|
||||
|
||||
export default {
|
||||
...DRPY,
|
||||
DRPY
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
// 导出函数对象
|
||||
export default {
|
||||
init,
|
||||
home,
|
||||
homeVod,
|
||||
category,
|
||||
detail,
|
||||
play,
|
||||
search,
|
||||
proxy,
|
||||
sniffer,
|
||||
isVideo,
|
||||
DRPY,
|
||||
}
|
||||
Vendored
+73
File diff suppressed because one or more lines are too long
+773
@@ -0,0 +1,773 @@
|
||||
{
|
||||
"author": "takagen99",
|
||||
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
|
||||
"homeUrl": "https://www.duboku.tv/",
|
||||
"dcVipFlag": "true",
|
||||
"dcPlayUrl": "true",
|
||||
"cateNode": "//ul[contains(@class,'nav-menu')]/li/a[contains(@href, 'vodtype')]",
|
||||
"cateName": "/text()",
|
||||
"cateId": "/@href",
|
||||
"cateIdR": "/vodtype/(\\w+).html",
|
||||
"cateManual": {
|
||||
"陆剧": "13",
|
||||
"日韩剧": "15",
|
||||
"短剧": "21",
|
||||
"英美剧": "16",
|
||||
"台泰剧": "14",
|
||||
"港剧": "20",
|
||||
"综艺": "3",
|
||||
"动漫": "4"
|
||||
},
|
||||
"homeVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a",
|
||||
"homeVodName": "/@title",
|
||||
"homeVodId": "/@href",
|
||||
"homeVodIdR": "/voddetail/(\\w+).html",
|
||||
"homeVodImg": "/@data-original",
|
||||
"homeVodImgR": "\\S+(http\\S+)",
|
||||
"homeVodMark": "//span[contains(@class,'pic-text')]/text()",
|
||||
"cateUrl": "https://www.duboku.tv/vodshow/{cateId}-{area}-{by}------{catePg}---{year}.html",
|
||||
"cateVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a",
|
||||
"cateVodName": "/@title",
|
||||
"cateVodId": "/@href",
|
||||
"cateVodIdR": "/voddetail/(\\w+).html",
|
||||
"cateVodImg": "/@data-original",
|
||||
"cateVodImgR": "\\S+(http\\S+)",
|
||||
"cateVodMark": "//span[contains(@class,'pic-text')]/text()",
|
||||
"dtUrl": "https://w.duboku.io/voddetail/{vid}.html",
|
||||
"dtNode": "//body",
|
||||
"dtName": "//div[contains(@class,'myui-content__thumb')]/a/@title",
|
||||
"dtNameR": "",
|
||||
"dtImg": "//div[contains(@class,'myui-content__thumb')]/a/img/@data-original",
|
||||
"dtImgR": "",
|
||||
"dtCate": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '分类')]/following-sibling::a/text()",
|
||||
"dtYear": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '年份')]/following-sibling::a/text()",
|
||||
"dtArea": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '地区')]/following-sibling::a/text()",
|
||||
"dtMark": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '更新')]/following-sibling::a/text()",
|
||||
"dtDirector": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '导演')]/following-sibling::a/text()",
|
||||
"dtActor": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '主演')]/following-sibling::a/text()",
|
||||
"dtDesc": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '简介')]/following-sibling::a/text()",
|
||||
"dtFromNode": "//ul[contains(@class,'nav-tabs')]/li/a",
|
||||
"dtFromName": "/text()",
|
||||
"dtFromNameR": "",
|
||||
"dtUrlNode": "//ul[contains(@class,'myui-content__list')]",
|
||||
"dtUrlSubNode": "/li/a",
|
||||
"dtUrlId": "/@href",
|
||||
"dtUrlIdR": "/vodplay/(\\S+).html",
|
||||
"dtUrlName": "/text()",
|
||||
"dtUrlNameR": "",
|
||||
|
||||
"playUrl": "https://w.duboku.io/vodplay/{playUrl}.html",
|
||||
"playUa": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
|
||||
"playReferer": "https://w.duboku.io/",
|
||||
"searchUrl": "https://w.duboku.io/index.php/ajax/suggest?mid=1&wd={wd}&limit=10",
|
||||
"scVodNode": "json:list",
|
||||
"scVodName": "name",
|
||||
"scVodId": "id",
|
||||
"scVodIdR": "",
|
||||
"scVodImg": "pic",
|
||||
"scVodMark": "",
|
||||
"filter": {
|
||||
"13": [
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"14": [
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"16": [
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"15": [
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"key": "cateId",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "陆剧",
|
||||
"v": "13"
|
||||
},
|
||||
{
|
||||
"n": "日韩剧",
|
||||
"v": "15"
|
||||
},
|
||||
{
|
||||
"n": "英美剧",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "台泰剧",
|
||||
"v": "14"
|
||||
},
|
||||
{
|
||||
"n": "港剧",
|
||||
"v": "20"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "内地",
|
||||
"v": "内地"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "香港",
|
||||
"v": "香港"
|
||||
},
|
||||
{
|
||||
"n": "台湾",
|
||||
"v": "台湾"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "巴西",
|
||||
"v": "巴西"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "荷兰",
|
||||
"v": "荷兰"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "内地",
|
||||
"v": "内地"
|
||||
},
|
||||
{
|
||||
"n": "香港",
|
||||
"v": "香港"
|
||||
},
|
||||
{
|
||||
"n": "台湾",
|
||||
"v": "台湾"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "国产",
|
||||
"v": "国产"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"20": [
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"21": [
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "排序",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
[
|
||||
{"name":"范明明OfficalSite","url":"https://live.fanmingming.com/tv/m3u/global.m3u"},
|
||||
{"name":"范明明GitHub","url":"https://mirror.ghproxy.com/raw.githubusercontent.com/fanmingming/live/main/tv/m3u/global.m3u"},
|
||||
{"name":"范明明IPV6","url":"https://live.fanmingming.com/tv/m3u/ipv6.m3u"}
|
||||
]
|
||||
+68
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import re
|
||||
import json
|
||||
import requests
|
||||
import time
|
||||
import traceback
|
||||
import gzip
|
||||
|
||||
p=re.compile(r'.*/s/(.*)')
|
||||
skipp = re.compile(r'.*(cover|screen|频道).*',re.IGNORECASE)
|
||||
reqcount=1
|
||||
sharedict=set()
|
||||
|
||||
def getlist(w,shareid, fileid,morepage):
|
||||
global p
|
||||
global skipp
|
||||
global reqcount
|
||||
global sharedict
|
||||
|
||||
reqcount += 1
|
||||
if reqcount % 5 == 0:
|
||||
print(f"reqcount:{reqcount} shareid:{shareid} fileid:{fileid}",file=sys.stderr)
|
||||
#time.sleep(1)
|
||||
url = f'http://192.168.101.188:9978/proxy?do=pikpak&type=list&share_id={shareid}&file_id={fileid}&pass_code=&morepage={morepage}'
|
||||
print(f"url: {url}",file=sys.stderr)
|
||||
resp = requests.get(url)
|
||||
content = resp.content.decode('utf-8')
|
||||
lines = content.split("\n")
|
||||
if "folder" not in content and len(lines)<=4:
|
||||
return
|
||||
isfirst=True
|
||||
for line in lines:
|
||||
if isfirst:
|
||||
isfirst=False
|
||||
print(f"first line:{line}",file=sys.stderr)
|
||||
if skipp.match(line):
|
||||
continue
|
||||
linearr = line.split('\t')
|
||||
if len(linearr)>2:
|
||||
m = p.match(linearr[0])
|
||||
if m:
|
||||
arr = m.group(1).split("/")
|
||||
else:
|
||||
arr = linearr[0].split("/")
|
||||
shareid=arr[0]
|
||||
fileid=arr[1] if len(arr)>1 else ""
|
||||
if shareid+"/"+fileid in sharedict:
|
||||
print(f"skip shareid{shareid} fileid:{fileid}", file=sys.stderr)
|
||||
continue
|
||||
w.write(line+"\n")
|
||||
w.flush()
|
||||
if linearr[2] == "folder":
|
||||
getlist(w,shareid,fileid,False)
|
||||
|
||||
if len(lines)>0:
|
||||
getlist(w,shareid,fileid,True)
|
||||
|
||||
def main():
|
||||
try:
|
||||
f = gzip.open(sys.argv[1]+".raw.gz",mode="rt",encoding="utf-8")
|
||||
if f is not None:
|
||||
print(f"found gz raw file:{sys.argv[1]}.raw.gz, extract it",file=sys.stderr)
|
||||
with(open(sys.argv[1]+".raw","w",encoding="utf-8")) as w:
|
||||
while(True):
|
||||
lines = f.readlines()
|
||||
if len(lines)<=0:
|
||||
break
|
||||
for line in lines:
|
||||
line=line.strip()
|
||||
w.write(line+"\n")
|
||||
f.seek(0)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
f = open(sys.argv[1]+".raw","r",encoding="utf-8")
|
||||
except:
|
||||
f = None
|
||||
if f is not None:
|
||||
print("found old raw file")
|
||||
while True:
|
||||
lines = f.readlines()
|
||||
if len(lines)<=0:
|
||||
break
|
||||
for line in lines:
|
||||
linearr = line.split("\t")
|
||||
m = p.match(linearr[0])
|
||||
if m:
|
||||
arr = m.group(1).split("/")
|
||||
else:
|
||||
arr = linearr[0].split("/")
|
||||
if len(arr)>1:
|
||||
shareid = arr[0]
|
||||
fileid = arr[1]
|
||||
sharedict.add(shareid+"/"+fileid)
|
||||
f.close()
|
||||
print(f"old raw file record:{len(sharedict)}")
|
||||
else:
|
||||
print("no old raw file")
|
||||
with(open(sys.argv[1]+".raw","a+",encoding="utf-8")) as w:
|
||||
with(open(sys.argv[1],"r",encoding="utf-8")) as f:
|
||||
j = json.load(f)
|
||||
for c in j:
|
||||
shareid=c.get("type_id")
|
||||
fileid=""
|
||||
m = p.match(shareid)
|
||||
if m:
|
||||
arr = m.group(1).split("/")
|
||||
else:
|
||||
arr = shareid.split("/")
|
||||
shareid=arr[0]
|
||||
fileid=arr[1] if len(arr)>1 else ""
|
||||
if shareid+"/"+fileid in sharedict:
|
||||
continue
|
||||
getlist(w,shareid,fileid,False)
|
||||
|
||||
main()
|
||||
@@ -0,0 +1,482 @@
|
||||
{
|
||||
"0": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地區",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "国产",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "6"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "5"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "18"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "153"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "101"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "118"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "7"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "22"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "热门",
|
||||
"v": "hot"
|
||||
},
|
||||
{
|
||||
"n": "更新",
|
||||
"v": "updata"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "rating"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"1": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地區",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "国产",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "6"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "5"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "18"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "153"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "101"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "118"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "7"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "22"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "热门",
|
||||
"v": "hot"
|
||||
},
|
||||
{
|
||||
"n": "更新",
|
||||
"v": "updata"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "rating"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地區",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "国产",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "6"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "5"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "18"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "153"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "101"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "118"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "7"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "22"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "热门",
|
||||
"v": "hot"
|
||||
},
|
||||
{
|
||||
"n": "更新",
|
||||
"v": "updata"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "rating"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地區",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "国产",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "6"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "5"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "18"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "153"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "101"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "118"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "7"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "22"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "热门",
|
||||
"v": "hot"
|
||||
},
|
||||
{
|
||||
"n": "更新",
|
||||
"v": "updata"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "rating"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "地區",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "国产",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "中国香港",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "中国台湾",
|
||||
"v": "6"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "5"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "18"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "year",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "0"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "153"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "101"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "118"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "7"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "3"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "22"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "by",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "热门",
|
||||
"v": "hot"
|
||||
},
|
||||
{
|
||||
"n": "更新",
|
||||
"v": "updata"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "rating"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+534
@@ -0,0 +1,534 @@
|
||||
/**
|
||||
* live2cms.js
|
||||
* 配置设置 {"key":"Live2CMS","name":"直播转点播V2","type":3,"api":"{{host}}/libs/live2cms.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"}
|
||||
* live2mv_data.json
|
||||
* 支持m3u类直播,支持线路归并。支持筛选切换显示模式
|
||||
[
|
||||
{"name": "甜蜜", "url": "http://zdir.kebedd69.repl.co/public/live.txt"},
|
||||
{"name": "俊于", "url": "http://home.jundie.top:81/Cat/tv/live.txt"},
|
||||
{"name": "菜妮丝", "url": "http://xn--ihqu10cn4c.xn--z7x900a.love:63/TV/tvzb.txt"},
|
||||
{"name": "布里m3u", "url": "http://jiexi.bulisite.top/m3u.php"},
|
||||
{"name": "吾爱", "url": "http://52bsj.vip:81/api/v3/file/get/763/live.txt?sign=87BTGT1_6AOry7FPwy_uuxFTv2Wcb9aDMj46rDdRTD8%3D%3A0"},
|
||||
{"name": "饭太硬", "url": "http://ftyyy.tk/live.txt"}
|
||||
]
|
||||
|
||||
* 提示 ext文件格式为json列表,name,url参数
|
||||
* 取消加密,减少性能问题
|
||||
*/
|
||||
String.prototype.rstrip = function (chars) {
|
||||
let regex = new RegExp(chars + "$");
|
||||
return this.replace(regex, "");
|
||||
};
|
||||
const request_timeout = 5000;
|
||||
const RKEY = 'live2cms'; // 源的唯一标识
|
||||
const VERSION = 'live2cms 20230619';
|
||||
const UA = 'Mozilla/5.0'; //默认请求ua
|
||||
const __ext = {data_dict:{}};
|
||||
const tips = `\n道长直播转点播js-当前版本${VERSION}`;
|
||||
const def_pic = 'https://avatars.githubusercontent.com/u/58679624?s=400&u=246b55fcda2b4850b444aebd6b8f8d6a12883f8c&v=4';
|
||||
|
||||
/**
|
||||
* 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存
|
||||
* @param k 键
|
||||
* @param v 值
|
||||
*/
|
||||
function setItem(k,v){
|
||||
local.set(RKEY,k,v);
|
||||
console.log(`规则${RKEY}设置${k} => ${v}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里
|
||||
* @param k 键
|
||||
* @param v 值
|
||||
* @returns {*}
|
||||
*/
|
||||
function getItem(k,v){
|
||||
return local.get(RKEY,k) || v;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据库key对应的一条数据,并清除此key对应的内存缓存
|
||||
* @param k
|
||||
*/
|
||||
function clearItem(k){
|
||||
local.delete(RKEY,k);
|
||||
}
|
||||
|
||||
var showMode = getItem('showMode','groups'); // groups按组分类显示 all全部一条线路展示
|
||||
var groupDict = JSON.parse(getItem('groupDict','{}')); // 搜索分组字典
|
||||
|
||||
/**
|
||||
* 打印日志
|
||||
* @param any 任意变量
|
||||
*/
|
||||
function print(any){
|
||||
any = any||'';
|
||||
if(typeof(any)=='object'&&Object.keys(any).length>0){
|
||||
try {
|
||||
any = JSON.stringify(any);
|
||||
console.log(any);
|
||||
}catch (e) {
|
||||
// console.log('print:'+e.message);
|
||||
console.log(typeof(any)+':'+any.length);
|
||||
}
|
||||
}else if(typeof(any)=='object'&&Object.keys(any).length<1){
|
||||
console.log('null object');
|
||||
}else{
|
||||
console.log(any);
|
||||
}
|
||||
}
|
||||
|
||||
/*** js自封装的方法 ***/
|
||||
|
||||
/**
|
||||
* 获取链接的host(带http协议的完整链接)
|
||||
* @param url 任意一个正常完整的Url,自动提取根
|
||||
* @returns {string}
|
||||
*/
|
||||
function getHome(url){
|
||||
if(!url){
|
||||
return ''
|
||||
}
|
||||
let tmp = url.split('//');
|
||||
url = tmp[0] + '//' + tmp[1].split('/')[0];
|
||||
try {
|
||||
url = decodeURIComponent(url);
|
||||
}catch (e) {}
|
||||
return url
|
||||
}
|
||||
|
||||
/**
|
||||
* m3u直播格式转一般直播格式
|
||||
* @param m3u
|
||||
* @returns {string}
|
||||
*/
|
||||
function convertM3uToNormal(m3u) {
|
||||
try {
|
||||
const lines = m3u.split('\n');
|
||||
let result = '';
|
||||
let TV='';
|
||||
// let flag='#genre#';
|
||||
let flag='#m3u#';
|
||||
let currentGroupTitle = '';
|
||||
lines.forEach((line) => {
|
||||
if (line.startsWith('#EXTINF:')) {
|
||||
const groupTitle = line.split('"')[1].trim();
|
||||
TV= line.split('"')[2].substring(1);
|
||||
if (currentGroupTitle !== groupTitle) {
|
||||
currentGroupTitle = groupTitle;
|
||||
result += `\n${currentGroupTitle},${flag}\n`;
|
||||
}
|
||||
} else if (line.startsWith('http')) {
|
||||
const splitLine = line.split(',');
|
||||
result += `${TV}\,${splitLine[0]}\n`;
|
||||
}
|
||||
});
|
||||
return result.trim();
|
||||
}catch (e) {
|
||||
print(`m3u直播转普通直播发生错误:${e.message}`);
|
||||
return m3u
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 线路归类
|
||||
* @param arr
|
||||
* @returns {*[][]}
|
||||
*/
|
||||
function merge(arr) {
|
||||
var parse = arguments[1] ? arguments[1] : '';
|
||||
var p = [];
|
||||
if (parse !== '' && typeof(parse)=="function") {
|
||||
p = arr.map(parse);
|
||||
}
|
||||
const createEmptyArrays = (length) => Array.from({
|
||||
length
|
||||
}, () => []);
|
||||
let lists = createEmptyArrays(arr.length);
|
||||
let sl = createEmptyArrays(arr.length);
|
||||
(p.length ? p : arr).forEach((k, index) => {
|
||||
var i = 0;
|
||||
while (sl[i].includes(k)) {
|
||||
i = i + 1
|
||||
}
|
||||
sl[i].push(k);
|
||||
lists[i].push(arr[index]);
|
||||
})
|
||||
lists=lists.filter(x=>x.some(k=>k.length));
|
||||
return lists
|
||||
}
|
||||
|
||||
/**
|
||||
* 线路归类/小棉袄算法
|
||||
* @param arr 数组
|
||||
* @param parse 解析式
|
||||
* @returns {[[*]]}
|
||||
*/
|
||||
function splitArray(arr,parse) {
|
||||
parse = parse&&typeof(parse)=='function'?parse:'';
|
||||
let result = [[arr[0]]];
|
||||
for (let i = 1; i < arr.length; i++) {
|
||||
let index = -1;
|
||||
for (let j = 0; j < result.length; j++) {
|
||||
if (parse&&result[j].map(parse).includes(parse(arr[i]))) {
|
||||
index = j;
|
||||
}else if((!parse) && result[j].includes(arr[i])){
|
||||
index = j;
|
||||
}
|
||||
}
|
||||
if (index >= result.length - 1) {
|
||||
result.push([]);
|
||||
result[result.length - 1].push(arr[i]);
|
||||
} else {
|
||||
result[index + 1].push(arr[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 搜索结果生成分组字典
|
||||
* @param arr
|
||||
* @param parse x=>x.split(',')[0]
|
||||
* @returns {{}}
|
||||
*/
|
||||
function gen_group_dict(arr,parse){
|
||||
let dict = {};
|
||||
arr.forEach((it)=>{
|
||||
let k = it.split(',')[0];
|
||||
if(parse && typeof(parse)==='function'){
|
||||
k = parse(k);
|
||||
}
|
||||
if(!dict[k]){
|
||||
dict[k] = [it]
|
||||
}else{
|
||||
dict[k].push(it);
|
||||
}
|
||||
});
|
||||
return dict
|
||||
}
|
||||
|
||||
const http = function (url, options = {}) {
|
||||
if(options.method ==='POST' && options.data){
|
||||
options.body = JSON.stringify(options.data);
|
||||
options.headers = Object.assign({'content-type':'application/json'}, options.headers);
|
||||
}
|
||||
options.timeout = request_timeout;
|
||||
if(!options.headers){
|
||||
options.headers = {};
|
||||
}
|
||||
let keys = Object.keys(options.headers).map(it=>it.toLowerCase());
|
||||
if(!keys.includes('referer')){
|
||||
options.headers['Referer'] = getHome(url);
|
||||
}
|
||||
if(!keys.includes('user-agent')){
|
||||
options.headers['User-Agent'] = UA;
|
||||
}
|
||||
console.log(JSON.stringify(options.headers));
|
||||
try {
|
||||
const res = req(url, options);
|
||||
// if(options.headers['Authorization']){
|
||||
// console.log(res.content);
|
||||
// }
|
||||
res.json = () => res&&res.content ? JSON.parse(res.content) : null;
|
||||
res.text = () => res&&res.content ? res.content:'';
|
||||
return res
|
||||
}catch (e) {
|
||||
return {
|
||||
json() {
|
||||
return null
|
||||
}, text() {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
["get", "post"].forEach(method => {
|
||||
http[method] = function (url, options = {}) {
|
||||
return http(url, Object.assign(options, {method: method.toUpperCase()}));
|
||||
}
|
||||
});
|
||||
|
||||
function init(ext) {
|
||||
console.log("当前版本号:"+VERSION);
|
||||
let data;
|
||||
if (typeof ext == 'object'){
|
||||
data = ext;
|
||||
print('live ext:object');
|
||||
} else if (typeof ext == 'string') {
|
||||
if (ext.startsWith('http')) {
|
||||
let ext_paramas = ext.split(';');
|
||||
let data_url = ext_paramas[0];
|
||||
print(data_url);
|
||||
data = http.get(data_url).json();
|
||||
}
|
||||
}
|
||||
print(data);
|
||||
__ext.data = data;
|
||||
print('init执行完毕');
|
||||
}
|
||||
|
||||
function home(filter) {
|
||||
let classes = __ext.data.map(it => ({
|
||||
type_id: it.url,
|
||||
type_name: it.name,
|
||||
}));
|
||||
print("----home----");
|
||||
let filter_dict = {};
|
||||
let filters = [
|
||||
{'key': 'show', 'name': '播放展示', 'value': [{'n': '多线路分组', 'v': 'groups'},{'n': '单线路', 'v': 'all'}]}
|
||||
];
|
||||
classes.forEach(it=>{
|
||||
filter_dict[it.type_id] = filters;
|
||||
});
|
||||
print(classes);
|
||||
return JSON.stringify({ 'class': classes,'filters': filter_dict});
|
||||
}
|
||||
|
||||
function homeVod(params) {
|
||||
let _get_url = __ext.data[0].url;
|
||||
let html;
|
||||
if(__ext.data_dict[_get_url]){
|
||||
html = __ext.data_dict[_get_url];
|
||||
}else{
|
||||
html = http.get(_get_url).text();
|
||||
if(/#EXTM3U/.test(html)){
|
||||
html = convertM3uToNormal(html);
|
||||
}
|
||||
__ext.data_dict[_get_url] = html;
|
||||
}
|
||||
// let arr = html.match(/.*?,#[\s\S].*?#/g);
|
||||
let arr = html.match(/.*?[,,]#[\s\S].*?#/g); // 可能存在中文逗号
|
||||
let _list = [];
|
||||
try {
|
||||
arr.forEach(it=>{
|
||||
let vname = it.split(/[,,]/)[0];
|
||||
let vtab = it.match(/#(.*?)#/)[0];
|
||||
_list.push({
|
||||
vod_name:vname,
|
||||
vod_id:_get_url+'$'+vname,
|
||||
vod_pic:def_pic,
|
||||
vod_remarks:vtab,
|
||||
});
|
||||
});
|
||||
}catch (e) {
|
||||
print('Live2cms获取首页推荐发送错误:'+e.message);
|
||||
}
|
||||
return JSON.stringify({ 'list': _list });
|
||||
}
|
||||
|
||||
function category(tid, pg, filter, extend) {
|
||||
let fl = filter?extend:{};
|
||||
if(fl.show){
|
||||
showMode = fl.show;
|
||||
setItem('showMode',showMode);
|
||||
}
|
||||
if(parseInt(pg)>1){
|
||||
return JSON.stringify({
|
||||
'list': [],
|
||||
});
|
||||
}
|
||||
let _get_url = tid;
|
||||
let html;
|
||||
if(__ext.data_dict[_get_url]){
|
||||
html = __ext.data_dict[_get_url];
|
||||
}else{
|
||||
html = http.get(_get_url).text();
|
||||
if(/#EXTM3U/.test(html)){
|
||||
html = convertM3uToNormal(html);
|
||||
}
|
||||
__ext.data_dict[_get_url] = html;
|
||||
}
|
||||
// let arr = html.match(/.*?[,,]#[\s\S].*?#/g);
|
||||
let arr = html.match(/.*?[,,]#[\s\S].*?#/g); // 可能存在中文逗号
|
||||
let _list = [];
|
||||
try {
|
||||
arr.forEach(it=>{
|
||||
let vname = it.split(/[,,]/)[0];
|
||||
let vtab = it.match(/#(.*?)#/)[0];
|
||||
_list.push({
|
||||
// vod_name:it.split(',')[0],
|
||||
vod_name:vname,
|
||||
vod_id:_get_url+'$'+vname,
|
||||
vod_pic:def_pic,
|
||||
vod_remarks:vtab,
|
||||
});
|
||||
});
|
||||
}catch (e) {
|
||||
print('Live2cms获取一级分类页发生错误:'+e.message);
|
||||
}
|
||||
|
||||
return JSON.stringify({
|
||||
'page': 1,
|
||||
'pagecount': 1,
|
||||
'limit': _list.length,
|
||||
'total': _list.length,
|
||||
'list': _list,
|
||||
});
|
||||
}
|
||||
|
||||
function detail(tid) { // ⛵ 港•澳•台
|
||||
let _get_url = tid.split('$')[0];
|
||||
let _tab = tid.split('$')[1];
|
||||
if(tid.includes('#search#')){
|
||||
let vod_name = _tab.replace('#search#','');
|
||||
let vod_play_from = '来自搜索';
|
||||
vod_play_from+=`:${_get_url}`;
|
||||
|
||||
// let vod_play_url = vod_name+'$'+_get_url;
|
||||
// print(vod_play_url);
|
||||
|
||||
let vod_play_url = groupDict[_get_url].map(x=>x.replace(',','$')).join('#');
|
||||
|
||||
return JSON.stringify({
|
||||
list: [{
|
||||
vod_id: tid,
|
||||
vod_name: '搜索:'+vod_name,
|
||||
type_name: "直播列表",
|
||||
vod_pic: def_pic,
|
||||
vod_content: tid,
|
||||
vod_play_from: vod_play_from,
|
||||
vod_play_url: vod_play_url,
|
||||
vod_director: tips,
|
||||
vod_remarks: `道长直播转点播js-当前版本${VERSION}`,
|
||||
}]
|
||||
});
|
||||
}
|
||||
let html;
|
||||
if(__ext.data_dict[_get_url]){
|
||||
html = __ext.data_dict[_get_url];
|
||||
}else{
|
||||
html = http.get(_get_url).text();
|
||||
if(/#EXTM3U/.test(html)){
|
||||
html = convertM3uToNormal(html);
|
||||
}
|
||||
__ext.data_dict[_get_url] = html;
|
||||
}
|
||||
// let a = new RegExp(`.*?${_tab},#[\\s\\S].*?#`);
|
||||
let a = new RegExp(`.*?${_tab.replace('(','\\(').replace(')','\\)')}[,,]#[\\s\\S].*?#`);
|
||||
let b = html.match(a)[0];
|
||||
let c = html.split(b)[1];
|
||||
if(c.match(/.*?[,,]#[\s\S].*?#/)){
|
||||
let d = c.match(/.*?[,,]#[\s\S].*?#/)[0];
|
||||
c = c.split(d)[0];
|
||||
}
|
||||
let arr = c.trim().split('\n');
|
||||
let _list = [];
|
||||
arr.forEach((it)=>{
|
||||
if(it.trim()){
|
||||
let t = it.trim().split(',')[0];
|
||||
let u = it.trim().split(',')[1];
|
||||
_list.push(t+'$'+u);
|
||||
}
|
||||
});
|
||||
|
||||
let vod_name = __ext.data.find(x=>x.url===_get_url).name;
|
||||
let vod_play_url;
|
||||
let vod_play_from;
|
||||
|
||||
if(showMode==='groups'){
|
||||
let groups = splitArray(_list,x=>x.split('$')[0]);
|
||||
let tabs = [];
|
||||
for(let i=0;i<groups.length;i++){
|
||||
if(i===0){
|
||||
tabs.push(vod_name+'1')
|
||||
}else{
|
||||
tabs.push(` ${i+1} `)
|
||||
}
|
||||
}
|
||||
vod_play_url = groups.map(it=>it.join('#')).join('$$$');
|
||||
vod_play_from = tabs.join('$$$');
|
||||
}else{
|
||||
vod_play_url = _list.join('#');
|
||||
vod_play_from = vod_name;
|
||||
}
|
||||
let vod = {
|
||||
vod_id: tid,
|
||||
vod_name: vod_name+'|'+_tab,
|
||||
type_name: "直播列表",
|
||||
vod_pic: def_pic,
|
||||
vod_content: tid,
|
||||
vod_play_from: vod_play_from,
|
||||
vod_play_url: vod_play_url,
|
||||
vod_director: tips,
|
||||
vod_remarks: `道长直播转点播js-当前版本${VERSION}`,
|
||||
};
|
||||
|
||||
return JSON.stringify({
|
||||
list: [vod]
|
||||
});
|
||||
}
|
||||
|
||||
function play(flag, id, flags) {
|
||||
let vod = {
|
||||
'parse': /m3u8/.test(id)?0:1,
|
||||
'playUrl': '',
|
||||
'url': id
|
||||
};
|
||||
print(vod);
|
||||
return JSON.stringify(vod);
|
||||
}
|
||||
|
||||
function search(wd, quick) {
|
||||
let _get_url = __ext.data[0].url;
|
||||
let html;
|
||||
if(__ext.data_dict[_get_url]){
|
||||
html = __ext.data_dict[_get_url];
|
||||
}else{
|
||||
html = http.get(_get_url).text();
|
||||
if(/#EXTM3U/.test(html)){
|
||||
html = convertM3uToNormal(html);
|
||||
}
|
||||
__ext.data_dict[_get_url] = html;
|
||||
}
|
||||
let str='';
|
||||
Object.keys(__ext.data_dict).forEach(()=>{
|
||||
str+=__ext.data_dict[_get_url];
|
||||
});
|
||||
let links = str.split('\n').filter(it=>it.trim() && it.includes(',') && it.split(',')[1].trim().startsWith('http'));
|
||||
links = links.map(it=>it.trim());
|
||||
let plays = Array.from(new Set(links));
|
||||
print('搜索关键词:'+wd);
|
||||
print('过滤前:'+plays.length);
|
||||
plays = plays.filter(it=>it.includes(wd));
|
||||
print('过滤后:'+plays.length);
|
||||
print(plays);
|
||||
let new_group = gen_group_dict(plays);
|
||||
groupDict = Object.assign(groupDict,new_group);
|
||||
// 搜索分组结果存至本地方便二级调用
|
||||
setItem('groupDict',JSON.stringify(groupDict));
|
||||
let _list = [];
|
||||
|
||||
|
||||
// plays.forEach((it)=>{
|
||||
// _list.push({
|
||||
// 'vod_name':it.split(',')[0],
|
||||
// 'vod_id':it.split(',')[1].trim()+'$'+it.split(',')[0].trim()+'#search#',
|
||||
// 'vod_pic':def_pic,
|
||||
// })
|
||||
// });
|
||||
|
||||
Object.keys(groupDict).forEach((it)=>{
|
||||
_list.push({
|
||||
'vod_name':it,
|
||||
'vod_id':it+'$'+wd+'#search#',
|
||||
'vod_pic':def_pic,
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
'list': _list
|
||||
});
|
||||
}
|
||||
|
||||
// 导出函数对象
|
||||
export default {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
var iil='jsjiami.com.v6',iil_=['iil'],lIIIl1ll=[iil,'\x6f\x6b\x68\x74\x74\x70\x2f\x33\x2e\x31\x35','\x69\x6e\x64\x65\x78\x4f\x66','\x24\x24\x24','\x73\x70\x6c\x69\x74','\x74\x72\x69\x6d','\x26\x26\x26','\x3a\x2f\x2f','\x6c\x6f\x67','\x70\x69\x63\x55\x72\x6c\x3a\x20','\x72\x65\x70\x6c\x61\x63\x65','\x70\x75\x73\x68','\x2f\x66\x69\x6c\x65\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74','\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74','\x47\x45\x54','\x70\x61\x72\x73\x65','\x63\x6f\x6e\x74\x65\x6e\x74','\x73\x75\x62\x73\x74\x72\x69\x6e\x67','\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x4f\x66','\x6e\x61\x6d\x65','\x75\x72\x6c','\x3d\x3d\x3d\x3d\x20\x3e\x3e\x3e\x20','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x65\x78\x65\x63','\x74\x65\x73\x74','\x6d\x61\x74\x63\x68','\x63\x68\x61\x6e\x6e\x65\x6c','\x2c\x23\x67\x65\x6e\x72\x65\x23\x0a','\x75\x72\x6c\x73','\x64\x61\x74\x61','\x64\x61\x74\x61\x6c\x69\x73\x74','\x70\x72\x6f\x76','\x6c\x69\x73\x74','\x2d\x2d\x2d','\x6c\x69\x6e\x65','\x77\x65\x62\x50\x69\x63\x55\x72\x6c\x3a\x20','\x23\x45\x58\x54\x4d\x33\x55','\x22\x63\x68\x61\x6e\x6e\x65\x6c\x22','\x22\x75\x72\x6c\x73\x22','\x22\x64\x61\x74\x61\x6c\x69\x73\x74\x22','\x6c\x65\x6e\x67\x74\x68','\x23\x67\x65\x6e\x72\x65\x23','\x7b\x6e\x61\x6d\x65\x7d','\x7b\x63\x61\x74\x65\x7d','\u76f4\u64ad\u5217\u8868','\x6e\x75\x6c\x6c','\x74\x79\x70\x65\x5f\x69\x64','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x75\x72\x6c','\x68\x61\x73\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79','\x6a\x6f\x69\x6e','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x66\x72\x6f\x6d','\x6a\x43\x50\x73\x4e\x6a\x77\x69\x4a\x61\x51\x6d\x69\x2e\x63\x6f\x4e\x4f\x6d\x47\x72\x2e\x76\x56\x36\x41\x46\x67\x79\x74\x74\x3d\x3d'];function Ii1l1III(_0x3b13df,_0x346a54){_0x3b13df=~~'0x'['concat'](_0x3b13df['slice'](0x0));var _0x4db44b=lIIIl1ll[_0x3b13df];return _0x4db44b;};(function(_0x209161,_0x5eaa4a){var _0x42ecdf=0x0;for(_0x5eaa4a=_0x209161['shift'](_0x42ecdf>>0x2);_0x5eaa4a&&_0x5eaa4a!==(_0x209161['pop'](_0x42ecdf>>0x3)+'')['replace'](/[CPNwJQNOGrVAFgytt=]/g,'');_0x42ecdf++){_0x42ecdf=_0x42ecdf^0x127efd;}}(lIIIl1ll,Ii1l1III));let headers={'User-Agent':Ii1l1III('0')};let classes=[];let cates={};let picUrl='';let webPaths={};function init(IiIIi1i){let i1Ii11I1='';if(IiIIi1i[Ii1l1III('1')](Ii1l1III('2'))>0x0){i1Ii11I1=IiIIi1i[Ii1l1III('3')](Ii1l1III('2'))[0x0][Ii1l1III('4')]();IiIIi1i=IiIIi1i[Ii1l1III('3')](Ii1l1III('2'))[0x1][Ii1l1III('4')]();}if(IiIIi1i[Ii1l1III('1')](Ii1l1III('5'))>0x0){picUrl=IiIIi1i[Ii1l1III('3')](Ii1l1III('5'))[0x1][Ii1l1III('4')]();if(picUrl[Ii1l1III('1')](Ii1l1III('6'))<0x0){picUrl=i1Ii11I1+picUrl;}IiIIi1i=IiIIi1i[Ii1l1III('3')](Ii1l1III('5'))[0x0][Ii1l1III('4')]();}console[Ii1l1III('7')](Ii1l1III('8')+picUrl);let IIlIlI1I=IiIIi1i[Ii1l1III('3')]('\x23');for(const IlII1I1 of IIlIlI1I){if(IlII1I1[Ii1l1III('1')]('\x24')>0x0){let illIl111=IlII1I1;let Ill1iIi=IlII1I1[Ii1l1III('3')]('\x24')[0x0];if(illIl111[Ii1l1III('1')](Ii1l1III('6'))<0x0){illIl111=illIl111[Ii1l1III('9')]('\x24','\x24'+i1Ii11I1);}classes[Ii1l1III('a')]({'type_id':illIl111,'type_name':Ill1iIi[Ii1l1III('9')]('\x21\x21','')});}else{let II1lIlli=IlII1I1;if(II1lIlli[Ii1l1III('1')](Ii1l1III('6'))<0x0){II1lIlli=i1Ii11I1+II1lIlli;}II1lIlli=II1lIlli[Ii1l1III('9')](Ii1l1III('b'),Ii1l1III('c'));let Illi11ll=req(II1lIlli,{'\x6d\x65\x74\x68\x6f\x64':Ii1l1III('d'),'\x68\x65\x61\x64\x65\x72\x73':headers});try{let l1lIiill=JSON[Ii1l1III('e')](Illi11ll[Ii1l1III('f')]);let lillI11l=II1lIlli[Ii1l1III('10')](0x0,II1lIlli[Ii1l1III('11')]('\x2f')+0x1);for(const i1iilII1 of l1lIiill){let Iillil=i1iilII1[Ii1l1III('12')];let lI1iIl=i1iilII1[Ii1l1III('13')];let illIl111=Iillil+'\x24'+(lI1iIl[Ii1l1III('1')](Ii1l1III('6'))<0x0?lillI11l:'')+lI1iIl;classes[Ii1l1III('a')]({'type_id':illIl111,'type_name':Iillil[Ii1l1III('9')]('\x21\x21','')});webPaths[illIl111]=lillI11l;}}catch(Ii1Ii11){console[Ii1l1III('7')](Ii1l1III('14')+Ii1Ii11);}}}}function home(I1iiIiIl){return JSON[Ii1l1III('15')]({'class':classes,'filters':null});}function parseM3u(iIi1Ii1I,I1IlIIIi){let iI1iiIii={};let iiI11111=/(#EXTINF:.+?),([^,]+?)\s*\n(.+?)\s*\n/g;let ii1iilil=null;while((ii1iilil=iiI11111[Ii1l1III('16')](iIi1Ii1I))!=null){let lllli1iI=ii1iilil[0x1];let il1Ili1I=ii1iilil[0x2];let liIlll1l=ii1iilil[0x3];if(il1Ili1I==null||liIlll1l==null||il1Ili1I==''||liIlll1l==''){continue;}il1Ili1I=il1Ili1I[Ii1l1III('4')]();liIlll1l=liIlll1l[Ii1l1III('4')]();let IiI1lI1l=I1IlIIIi;let ilIl1i1i=/group-title="(.*?)"/;if(ilIl1i1i[Ii1l1III('17')](lllli1iI)){IiI1lI1l=lllli1iI[Ii1l1III('18')](ilIl1i1i)[0x1];}if(!iI1iiIii[IiI1lI1l]){iI1iiIii[IiI1lI1l]=[];}iI1iiIii[IiI1lI1l][Ii1l1III('a')](il1Ili1I+'\x2c'+liIlll1l);}let ll11III1='';for(const li1Ili in iI1iiIii){ll11III1+=li1Ili+'\x0a';let IlIil1ll=iI1iiIii[li1Ili];for(const li1iI11 of IlIil1ll){ll11III1+=li1iI11+'\x0a';}}return ll11III1;}function parseFm(IliiIl1I){let lliiI1i1='';let Iii1ll=JSON[Ii1l1III('e')](IliiIl1I);for(const i1lIlli1 of Iii1ll){let I111Il1l=i1lIlli1[Ii1l1III('12')];let ilI11li=i1lIlli1[Ii1l1III('19')];lliiI1i1+=I111Il1l+Ii1l1III('1a');for(const iiilI1iI of ilI11li){let I11111l1=iiilI1iI[Ii1l1III('12')];let IlI1l1I1=iiilI1iI[Ii1l1III('1b')];for(const l1II1lll of IlI1l1I1){lliiI1i1+=I11111l1+'\x2c'+l1II1lll+'\x0a';}}}return lliiI1i1;}function parseLu(iIliI1lI){let IIlilI1i='';let I11ilI1i=JSON[Ii1l1III('e')](iIliI1lI)[Ii1l1III('1c')];for(const i1Ii1l1 of I11ilI1i[Ii1l1III('1d')]){let I11111l=i1Ii1l1[Ii1l1III('1e')];let IiIiii1l=i1Ii1l1[Ii1l1III('1f')];IIlilI1i+=I11111l+Ii1l1III('1a');for(const l1111lI of IiIiii1l){let lIlI1iI=l1111lI[Ii1l1III('12')];let ll11i1II=l1111lI[Ii1l1III('1b')];for(const Iliilii of ll11i1II){IIlilI1i+=lIlI1iI+Ii1l1III('20')+Iliilii[Ii1l1III('21')]+'\x2c'+Iliilii[Ii1l1III('13')]+'\x0a';}}}return IIlilI1i;}function getCateData(IliI1i){let iI1I1I1I=picUrl;if(IliI1i[Ii1l1III('1')](Ii1l1III('5'))>0x0){iI1I1I1I=IliI1i[Ii1l1III('3')](Ii1l1III('5'))[0x1][Ii1l1III('4')]();if(iI1I1I1I[Ii1l1III('1')](Ii1l1III('6'))<0x0&&webPaths[IliI1i]){iI1I1I1I=webPaths[IliI1i]+iI1I1I1I;}IliI1i=IliI1i[Ii1l1III('3')](Ii1l1III('5'))[0x0][Ii1l1III('4')]();}console[Ii1l1III('7')](Ii1l1III('22')+iI1I1I1I);let ll1iIiiI=IliI1i[Ii1l1III('3')]('\x24')[0x1];let i1I1l1i=IliI1i[Ii1l1III('3')]('\x24')[0x0];if(!cates[IliI1i]){cates[IliI1i]=[];let iIl11Iii=headers;if(ll1iIiiI[Ii1l1III('1')]('\x7c')>0x0){let ii111I1I=decodeURIComponent(ll1iIiiI[Ii1l1III('3')]('\x7c')[0x1]);ll1iIiiI=ll1iIiiI[Ii1l1III('3')]('\x7c')[0x0];for(const II1Ii1l of ii111I1I[Ii1l1III('3')]('\x26')){if(II1Ii1l[Ii1l1III('1')]('\x3d')>0x0){let lI1lliii=II1Ii1l[Ii1l1III('3')]('\x3d')[0x0];let I11Iii1i=II1Ii1l[Ii1l1III('3')]('\x3d')[0x1];iIl11Iii[lI1lliii]=I11Iii1i;}}}let I111lilI=req(ll1iIiiI,{'\x6d\x65\x74\x68\x6f\x64':Ii1l1III('d'),'\x68\x65\x61\x64\x65\x72\x73':iIl11Iii});I111lilI=I111lilI[Ii1l1III('f')][Ii1l1III('4')]();if(I111lilI[Ii1l1III('1')](Ii1l1III('23'))>=0x0){I111lilI=parseM3u(I111lilI,i1I1l1i);}else if(I111lilI[Ii1l1III('1')](Ii1l1III('24'))>0x0&&I111lilI[Ii1l1III('1')](Ii1l1III('25'))>0x0){I111lilI=parseFm(I111lilI);}else if(I111lilI[Ii1l1III('1')](Ii1l1III('26'))>0x0&&I111lilI[Ii1l1III('1')](Ii1l1III('25'))>0x0){I111lilI=parseLu(I111lilI);}let li1IiiII=(i1I1l1i+'\x0a'+I111lilI[Ii1l1III('9')]('\x0d',''))[Ii1l1III('3')]('\x0a');let lli11iI=i1I1l1i;let IiiIIiIi=null;let iiiI1l='';for(let i1ii1IIl=0x0;i1ii1IIl<li1IiiII[Ii1l1III('27')];i1ii1IIl++){let lIliIii=li1IiiII[i1ii1IIl][Ii1l1III('9')](/\s+/g,'');if(lIliIii!=''&&lIliIii[Ii1l1III('1')](Ii1l1III('6'))<0x0&&(lIliIii[Ii1l1III('1')]('\x2c')<0x0||lIliIii[Ii1l1III('1')](Ii1l1III('28'))>0x0)){if(iiiI1l!=''){let ilIIIl=iI1I1I1I[Ii1l1III('9')](Ii1l1III('29'),encodeURIComponent(lli11iI))[Ii1l1III('9')](Ii1l1III('2a'),encodeURIComponent(i1I1l1i));let ilI1ilI=ilIIIl[Ii1l1III('1')]('\x3c');let iili1I1i=ilIIIl[Ii1l1III('11')]('\x3e');if(ilI1ilI>-0x1&&iili1I1i>ilI1ilI){let I11Ilili=ilIIIl[Ii1l1III('10')](ilI1ilI,iili1I1i+0x1);let I1liliII=new RegExp(I11Ilili[Ii1l1III('9')](/<|>/g,''));let lii11liI=lli11iI[Ii1l1III('9')](I1liliII,function(Ili1lIi1,iiliII1l){return iiliII1l;});ilIIIl=ilIIIl[Ii1l1III('9')](I11Ilili,lii11liI);console[Ii1l1III('7')](lli11iI+'\x2c\x20'+ilIIIl);}let IiiIIiIi={'vod_id':IliI1i+Ii1l1III('2')+cates[IliI1i][Ii1l1III('27')],'vod_name':lli11iI,'vod_pic':ilIIIl,'vod_remarks':'','type_name':Ii1l1III('2b'),'vod_year':'','vod_area':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':i1I1l1i,'vod_play_url':iiiI1l};cates[IliI1i][Ii1l1III('a')](IiiIIiIi);}lli11iI=lIliIii[Ii1l1III('3')]('\x2c')[0x0][Ii1l1III('4')]();iiiI1l='';}else if(lIliIii[Ii1l1III('1')]('\x2c')>0x0&&/http|rtmp|rtsp|rsp/[Ii1l1III('17')](lIliIii)){let l1iiI1ii=lIliIii[Ii1l1III('3')]('\x2c');if(iiiI1l!=''){iiiI1l+='\x23';}iiiI1l+=l1iiI1ii[0x0][Ii1l1III('4')]()+'\x24'+l1iiI1ii[0x1][Ii1l1III('4')]();}}if(iiiI1l!=''){let II1Iliil=iI1I1I1I[Ii1l1III('9')](Ii1l1III('29'),encodeURIComponent(lli11iI))[Ii1l1III('9')](Ii1l1III('2a'),encodeURIComponent(i1I1l1i));let ilI1ilI=II1Iliil[Ii1l1III('1')]('\x3c');let iili1I1i=II1Iliil[Ii1l1III('11')]('\x3e');if(ilI1ilI>-0x1&&iili1I1i>ilI1ilI){let I11Ilili=II1Iliil[Ii1l1III('10')](ilI1ilI,iili1I1i+0x1);let I1liliII=new RegExp(I11Ilili[Ii1l1III('9')](/<|>/g,''));let lii11liI=I1liliII[Ii1l1III('17')](lli11iI)?lli11iI[Ii1l1III('18')](I1liliII)[0x1]:Ii1l1III('2c');II1Iliil=II1Iliil[Ii1l1III('9')](I11Ilili,lii11liI);}let IiiIIiIi={'vod_id':IliI1i+Ii1l1III('2')+cates[IliI1i][Ii1l1III('27')],'vod_name':lli11iI,'vod_pic':II1Iliil,'vod_remarks':'','type_name':Ii1l1III('2b'),'vod_year':'','vod_area':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':i1I1l1i,'vod_play_url':iiiI1l};cates[IliI1i][Ii1l1III('a')](IiiIIiIi);}}return cates[IliI1i];}function homeVod(liIIlIl1){let iIl1IIii=getCateData(classes[0x0][Ii1l1III('2d')]);let I1l1iil=JSON[Ii1l1III('15')]({'list':iIl1IIii});return I1l1iil;}function category(I1l1i1Ii,l1IiiIli,IIi1Illi,lilIliIl){let IIi1i1ll=[];if(l1IiiIli==0x1){IIi1i1ll=getCateData(I1l1i1Ii);}let iIiiIi1i=JSON[Ii1l1III('15')]({'list':IIi1i1ll});return iIiiIi1i;}function detail(lIl11iii){let I1IIIil=lIl11iii[Ii1l1III('3')](Ii1l1III('2'));let liiiil1i=I1IIIil[0x0];let l1l111II=liiiil1i[Ii1l1III('3')]('\x24')[0x0];let Il1li11i=parseInt(I1IIIil[0x1]);let Iill11Ii=getCateData(liiiil1i)[Il1li11i];console[Ii1l1III('7')](JSON[Ii1l1III('15')](Iill11Ii));if(l1l111II[Ii1l1III('1')]('\x21\x21')>=0x0){l1l111II=l1l111II[Ii1l1III('9')]('\x21\x21','');const ii1l1iil=Iill11Ii[Ii1l1III('2e')][Ii1l1III('3')]('\x23');console[Ii1l1III('7')](JSON[Ii1l1III('15')](ii1l1iil));let i1Ili1I={};let IIIllli1={};for(const i1IiIlIl of ii1l1iil){let Ill1iii1=i1IiIlIl[Ii1l1III('3')]('\x24')[0x0];let IIiIII11=l1l111II;if(Ill1iii1[Ii1l1III('1')](Ii1l1III('20'))>0x0){IIiIII11=Ill1iii1[Ii1l1III('3')](Ii1l1III('20'))[0x1];Ill1iii1=Ill1iii1[Ii1l1III('3')](Ii1l1III('20'))[0x0];}if(!i1Ili1I[Ii1l1III('2f')](Ill1iii1)){i1Ili1I[Ill1iii1]=0x1;}else{i1Ili1I[Ill1iii1]++;}IIiIII11=l1l111II+(i1Ili1I[Ill1iii1]>0x1?'\x20'+i1Ili1I[Ill1iii1]:'');if(!IIIllli1[Ii1l1III('2f')](IIiIII11)){IIIllli1[IIiIII11]=[];}IIIllli1[IIiIII11][Ii1l1III('a')](Ill1iii1+'\x24'+i1IiIlIl[Ii1l1III('3')]('\x24')[0x1]);}let III1i1ii=[];let iii1lIIi=[];for(let iliI1I1i in IIIllli1){III1i1ii[Ii1l1III('a')](iliI1I1i);iii1lIIi[Ii1l1III('a')](IIIllli1[iliI1I1i][Ii1l1III('30')]('\x23'));}Iill11Ii[Ii1l1III('31')]=III1i1ii[Ii1l1III('30')](Ii1l1III('2'));Iill11Ii[Ii1l1III('2e')]=iii1lIIi[Ii1l1III('30')](Ii1l1III('2'));}return JSON[Ii1l1III('15')]({'list':[Iill11Ii]});}function play(l1llIIii,illiiIII,lIIIiIiI){return JSON[Ii1l1III('15')]({'parse':0x0,'url':illiiIII});}function search(I1lll,lI1iiIII){return null;}__JS_SPIDER__={'\x69\x6e\x69\x74':init,'\x68\x6f\x6d\x65':home,'\x68\x6f\x6d\x65\x56\x6f\x64':homeVod,'\x63\x61\x74\x65\x67\x6f\x72\x79':category,'\x64\x65\x74\x61\x69\x6c':detail,'\x70\x6c\x61\x79':play,'\x73\x65\x61\x72\x63\x68':search};;iil='jsjiami.com.v6';
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
const peq = new Uint32Array(0x10000);
|
||||
const myers_32 = (a, b) => {
|
||||
const n = a.length;
|
||||
const m = b.length;
|
||||
const lst = 1 << (n - 1);
|
||||
let pv = -1;
|
||||
let mv = 0;
|
||||
let sc = n;
|
||||
let i = n;
|
||||
while (i--) {
|
||||
peq[a.charCodeAt(i)] |= 1 << i;
|
||||
}
|
||||
for (i = 0; i < m; i++) {
|
||||
let eq = peq[b.charCodeAt(i)];
|
||||
const xv = eq | mv;
|
||||
eq |= ((eq & pv) + pv) ^ pv;
|
||||
mv |= ~(eq | pv);
|
||||
pv &= eq;
|
||||
if (mv & lst) {
|
||||
sc++;
|
||||
}
|
||||
if (pv & lst) {
|
||||
sc--;
|
||||
}
|
||||
mv = (mv << 1) | 1;
|
||||
pv = (pv << 1) | ~(xv | mv);
|
||||
mv &= xv;
|
||||
}
|
||||
i = n;
|
||||
while (i--) {
|
||||
peq[a.charCodeAt(i)] = 0;
|
||||
}
|
||||
return sc;
|
||||
};
|
||||
const myers_x = (b, a) => {
|
||||
const n = a.length;
|
||||
const m = b.length;
|
||||
const mhc = [];
|
||||
const phc = [];
|
||||
const hsize = Math.ceil(n / 32);
|
||||
const vsize = Math.ceil(m / 32);
|
||||
for (let i = 0; i < hsize; i++) {
|
||||
phc[i] = -1;
|
||||
mhc[i] = 0;
|
||||
}
|
||||
let j = 0;
|
||||
for (; j < vsize - 1; j++) {
|
||||
let mv = 0;
|
||||
let pv = -1;
|
||||
const start = j * 32;
|
||||
const vlen = Math.min(32, m) + start;
|
||||
for (let k = start; k < vlen; k++) {
|
||||
peq[b.charCodeAt(k)] |= 1 << k;
|
||||
}
|
||||
for (let i = 0; i < n; i++) {
|
||||
const eq = peq[a.charCodeAt(i)];
|
||||
const pb = (phc[(i / 32) | 0] >>> i) & 1;
|
||||
const mb = (mhc[(i / 32) | 0] >>> i) & 1;
|
||||
const xv = eq | mv;
|
||||
const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
|
||||
let ph = mv | ~(xh | pv);
|
||||
let mh = pv & xh;
|
||||
if ((ph >>> 31) ^ pb) {
|
||||
phc[(i / 32) | 0] ^= 1 << i;
|
||||
}
|
||||
if ((mh >>> 31) ^ mb) {
|
||||
mhc[(i / 32) | 0] ^= 1 << i;
|
||||
}
|
||||
ph = (ph << 1) | pb;
|
||||
mh = (mh << 1) | mb;
|
||||
pv = mh | ~(xv | ph);
|
||||
mv = ph & xv;
|
||||
}
|
||||
for (let k = start; k < vlen; k++) {
|
||||
peq[b.charCodeAt(k)] = 0;
|
||||
}
|
||||
}
|
||||
let mv = 0;
|
||||
let pv = -1;
|
||||
const start = j * 32;
|
||||
const vlen = Math.min(32, m - start) + start;
|
||||
for (let k = start; k < vlen; k++) {
|
||||
peq[b.charCodeAt(k)] |= 1 << k;
|
||||
}
|
||||
let score = m;
|
||||
for (let i = 0; i < n; i++) {
|
||||
const eq = peq[a.charCodeAt(i)];
|
||||
const pb = (phc[(i / 32) | 0] >>> i) & 1;
|
||||
const mb = (mhc[(i / 32) | 0] >>> i) & 1;
|
||||
const xv = eq | mv;
|
||||
const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
|
||||
let ph = mv | ~(xh | pv);
|
||||
let mh = pv & xh;
|
||||
score += (ph >>> (m - 1)) & 1;
|
||||
score -= (mh >>> (m - 1)) & 1;
|
||||
if ((ph >>> 31) ^ pb) {
|
||||
phc[(i / 32) | 0] ^= 1 << i;
|
||||
}
|
||||
if ((mh >>> 31) ^ mb) {
|
||||
mhc[(i / 32) | 0] ^= 1 << i;
|
||||
}
|
||||
ph = (ph << 1) | pb;
|
||||
mh = (mh << 1) | mb;
|
||||
pv = mh | ~(xv | ph);
|
||||
mv = ph & xv;
|
||||
}
|
||||
for (let k = start; k < vlen; k++) {
|
||||
peq[b.charCodeAt(k)] = 0;
|
||||
}
|
||||
return score;
|
||||
};
|
||||
const distance = (a, b) => {
|
||||
if (a.length < b.length) {
|
||||
const tmp = b;
|
||||
b = a;
|
||||
a = tmp;
|
||||
}
|
||||
if (b.length === 0) {
|
||||
return a.length;
|
||||
}
|
||||
if (a.length <= 32) {
|
||||
return myers_32(a, b);
|
||||
}
|
||||
return myers_x(a, b);
|
||||
};
|
||||
const closest = (str, arr) => {
|
||||
let min_distance = Infinity;
|
||||
let min_index = 0;
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
const dist = distance(str, arr[i]);
|
||||
if (dist < min_distance) {
|
||||
min_distance = dist;
|
||||
min_index = i;
|
||||
}
|
||||
}
|
||||
return arr[min_index];
|
||||
};
|
||||
export { closest, distance };
|
||||
+764
@@ -0,0 +1,764 @@
|
||||
{
|
||||
"1": [
|
||||
{
|
||||
"key": "0",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "5"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "6"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "7"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "8"
|
||||
},
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "9"
|
||||
},
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "10"
|
||||
},
|
||||
{
|
||||
"n": "纪录片",
|
||||
"v": "11"
|
||||
},
|
||||
{
|
||||
"n": "剧情",
|
||||
"v": "12"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "30"
|
||||
},
|
||||
{
|
||||
"n": "动画",
|
||||
"v": "32"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "1",
|
||||
"name": "剧情",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "战争"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "剧情",
|
||||
"v": "剧情"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "爱情"
|
||||
},
|
||||
{
|
||||
"n": "家庭",
|
||||
"v": "家庭"
|
||||
},
|
||||
{
|
||||
"n": "励志",
|
||||
"v": "励志"
|
||||
},
|
||||
{
|
||||
"n": "悬疑",
|
||||
"v": "悬疑"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "动作"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "冒险",
|
||||
"v": "冒险"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "惊悚",
|
||||
"v": "惊悚"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "犯罪"
|
||||
},
|
||||
{
|
||||
"n": "运动",
|
||||
"v": "运动"
|
||||
},
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "喜剧"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "中国",
|
||||
"v": "中国"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "3",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "4",
|
||||
"name": "状态",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "完结",
|
||||
"v": "w"
|
||||
},
|
||||
{
|
||||
"n": "连载中",
|
||||
"v": "l"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "douban"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"key": "0",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "2"
|
||||
},
|
||||
{
|
||||
"n": "美剧",
|
||||
"v": "15"
|
||||
},
|
||||
{
|
||||
"n": "韩剧",
|
||||
"v": "16"
|
||||
},
|
||||
{
|
||||
"n": "日剧",
|
||||
"v": "13"
|
||||
},
|
||||
{
|
||||
"n": "英剧",
|
||||
"v": "34"
|
||||
},
|
||||
{
|
||||
"n": "中国",
|
||||
"v": "14"
|
||||
},
|
||||
{
|
||||
"n": "泰剧",
|
||||
"v": "29"
|
||||
},
|
||||
{
|
||||
"n": "综艺",
|
||||
"v": "39"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "38"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "1",
|
||||
"name": "剧情",
|
||||
"value": [
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "战争"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "剧情",
|
||||
"v": "剧情"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "爱情"
|
||||
},
|
||||
{
|
||||
"n": "家庭",
|
||||
"v": "家庭"
|
||||
},
|
||||
{
|
||||
"n": "励志",
|
||||
"v": "励志"
|
||||
},
|
||||
{
|
||||
"n": "悬疑",
|
||||
"v": "悬疑"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "动作"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "冒险",
|
||||
"v": "冒险"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "惊悚",
|
||||
"v": "惊悚"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "犯罪"
|
||||
},
|
||||
{
|
||||
"n": "运动",
|
||||
"v": "运动"
|
||||
},
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "喜剧"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "中国",
|
||||
"v": "中国"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "3",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "4",
|
||||
"name": "状态",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "完结",
|
||||
"v": "w"
|
||||
},
|
||||
{
|
||||
"n": "连载中",
|
||||
"v": "l"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "douban"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"41": [
|
||||
{
|
||||
"key": "0",
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": "41"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "42"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "43"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "1",
|
||||
"name": "剧情",
|
||||
"value": [
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "战争"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "剧情",
|
||||
"v": "剧情"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "爱情"
|
||||
},
|
||||
{
|
||||
"n": "家庭",
|
||||
"v": "家庭"
|
||||
},
|
||||
{
|
||||
"n": "励志",
|
||||
"v": "励志"
|
||||
},
|
||||
{
|
||||
"n": "悬疑",
|
||||
"v": "悬疑"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "动作"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "冒险",
|
||||
"v": "冒险"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "惊悚",
|
||||
"v": "惊悚"
|
||||
},
|
||||
{
|
||||
"n": "音乐",
|
||||
"v": "音乐"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "犯罪"
|
||||
},
|
||||
{
|
||||
"n": "运动",
|
||||
"v": "运动"
|
||||
},
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "喜剧"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "中国",
|
||||
"v": "中国"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "3",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "4",
|
||||
"name": "状态",
|
||||
"value": [
|
||||
{
|
||||
"n": "全部",
|
||||
"v": ""
|
||||
},
|
||||
{
|
||||
"n": "完结",
|
||||
"v": "w"
|
||||
},
|
||||
{
|
||||
"n": "连载中",
|
||||
"v": "l"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "douban"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
[
|
||||
{"type_id":"https://mypikpak.com/s/self", "type_name":"我的PikPak網盤", "version":"20240301"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRT8Wr8BGyw1kt1HkijKR4Qo1","type_name":"高清劇集合集一二"},
|
||||
{"type_id":"https://mypikpak.com/s/VNThL9vJ7kj57e2Kr_dlOzc0o1","type_name":"每日更新" },
|
||||
{"type_id":"https://mypikpak.com/s/VNBG3CPruacfHy3KVrVR1Qbko1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧1"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBXQHEBywwEP48SYNoLGhg-o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧10"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCKGMKeL4KQWxNSeNl-aNK8o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧11"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCKIgIdXbeMUnS27Hc7ifoho1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧12"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCKK_lIL4KQWxNSeNl-b-Avo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧13"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCPyF1ibAmUFsTwcgPpV2RPo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧14"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCPyIV4bsikE1REQUzU3HAKo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧15"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCPyLg-XbeMUnS27Hc8e-evo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧16"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCPyOHZfY9FgjheL_s6tE0Eo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧17"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCdGBWsTsU_1xrcd7arNGkyo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧18"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCdGaN8bsik85HcYchTzGwpo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧19"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCdGlQdbAmU3kIGsTh-INYQo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧20"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCdGvg1QqH-jGYGfgcDoqWho1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧21"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCdHOhJTsU_1xrcd7arNWAuo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧22"},
|
||||
{"type_id":"https://mypikpak.com/s/VNCdHU8Xbsik85HcYchTzRlwo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧23"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDJ--9QP3sxqczyGV8n35pUo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧24"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDJ-2f3xeTB-N74vaHopsB8o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧25"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDJ-6m_P3sxqczyGV8n37Lso1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧26"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDJ-AxdxeTB-N74vaHoptVeo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧27"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDJ-F3_OLXqy_gd7t0qYPsTo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧28"},
|
||||
{"type_id":"https://mypikpak.com/s/VNJ-KE7EDnDGgthutL8stFDco1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧29"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBGhK25s795X1GmZKtAzarxo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧3"},
|
||||
{"type_id":"https://mypikpak.com/s/VNJ-KU-PpnUdNyThzczFHNY0o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧30"},
|
||||
{"type_id":"https://mypikpak.com/s/VNKX8Tmvg-_M2ALfxiCXcfbOo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧31"},
|
||||
{"type_id":"https://mypikpak.com/s/VNKX8k1cDAay6DoGUEtaSmGjo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧32"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLt5PTTTImas0d3tF0BaJ7Zo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧33"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLt5dq-vYqkqbIuRJRjLoiso1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧34"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLuwIBrvYqkY2pqZt625qhyo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧35"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLuwKtrvYqkY2pqZt625r-eo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧36"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLyAGr0Qwh14Yz40bSwR67do1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧37"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLyAJDMZAcORH2HWUMhsvGWo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧38"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLySlyJpr1J-y7W15G4N6xXo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧39"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBGjxzm-8JG74imIZI6qg8Do1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧4"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLySocLsRCm72XnqKv7pueto1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧40"},
|
||||
{"type_id":"https://mypikpak.com/s/VNLyXhUKwRiUO2berP7_qFoao1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧41"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBH3M6lJXuc4t0v-pqB0dFQo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧5"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBHRToB_DHT_nmBnwoud8QJo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧6"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBHSrWiCjrm4NxyIs_56cHpo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧7"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBXPhSLJktjoBJJe8ptXNbco1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧8"},
|
||||
{"type_id":"https://mypikpak.com/s/VNBXPwl3bA6kG0eqiyJI3ulOo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧9"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDb64cFhcn-yqNU5EWDgRZno1","type_name":"/🕸️我的PikPak分享/电影75T/电影1"},
|
||||
{"type_id":"https://mypikpak.com/s/VNM8-8Xlpr1JhKCjzr3hvs2Vo1","type_name":"/🕸️我的PikPak分享/电影75T/电影10"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDb67b3hcn-yqNU5EWDgUDWo1","type_name":"/🕸️我的PikPak分享/电影75T/电影2"},
|
||||
{"type_id":"https://mypikpak.com/s/VNDca2W6hcn-yqNU5EWE-PLOo1","type_name":"/🕸️我的PikPak分享/电影75T/电影3"},
|
||||
{"type_id":"https://mypikpak.com/s/VNE5x-MGTKDwgZ2rSxM1xhrNo1","type_name":"/🕸️我的PikPak分享/电影75T/电影4"},
|
||||
{"type_id":"https://mypikpak.com/s/VNEdL2CecnVliWDE0AMdROMzo1","type_name":"/🕸️我的PikPak分享/电影75T/电影5"},
|
||||
{"type_id":"https://mypikpak.com/s/VNF8bBfoU5Warn8hY_LZYs3Xo1","type_name":"/🕸️我的PikPak分享/电影75T/电影6"},
|
||||
{"type_id":"https://mypikpak.com/s/VNGGxkU4AYqxeOi-Ts-R_4koo1","type_name":"/🕸️我的PikPak分享/电影75T/电影7"},
|
||||
{"type_id":"https://mypikpak.com/s/VNGHC0J31cRSfFQDubOJoLCAo1","type_name":"/🕸️我的PikPak分享/电影75T/电影8"},
|
||||
{"type_id":"https://mypikpak.com/s/VNM7V9gdpr1JgySnCF-P07aJo1","type_name":"/🕸️我的PikPak分享/电影75T/电影9"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRnagBUCfOipBFoWCX8EGSdo1","type_name":"/🕸️我的PikPak分享/高清电影/合集10"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRR1cc0LmyyGDe21AoK6Ulho1","type_name":"/🕸️我的PikPak分享/高清电影/合集11"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRlVwQYQgqv395kxGBhPmDoo1","type_name":"/🕸️我的PikPak分享/高清电影/合集2"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRm3yZtBGywKa118vzvgAg6o1","type_name":"/🕸️我的PikPak分享/高清电影/合集3"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRmWOmQBGywKa118vzvlRiZo1","type_name":"/🕸️我的PikPak分享/高清电影/合集4"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRmoFmoroRROhEkho_8kY_1o1","type_name":"/🕸️我的PikPak分享/高清电影/合集5"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRn6HqiBGywKa118vzvuqFqo1","type_name":"/🕸️我的PikPak分享/高清电影/合集6"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRnJASUroRROhEkho_8tpGfo1","type_name":"/🕸️我的PikPak分享/高清电影/合集7"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRlg0pS7aWN3HWJGVGp2pZTo1","type_name":"/🕸️我的PikPak分享/高清电影/合集8"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRnQbMN7aWN3HWJGVGpSkxFo1","type_name":"/🕸️我的PikPak分享/高清电影/合集9"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTAMNvBGyw1kt1HkijL-n0o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集11"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTAhOZLmyyX7yiCb6t1jTuo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集14"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTBCKPLmyyX7yiCb6t1qEKo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集18"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRT8zZXg3b_VYsn0bCwlVh5o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集3"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRT9eYeBGyw1kt1HkijKmL_o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集5"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTA2HOg3b_VYsn0bCwlhKyo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集8"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTCK4Lg3b_VYsn0bCwmeWXo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集24"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTCmbnCfOi1Zl2Ft25Sjw8o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集30"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTD2ceyM2NQYlKo78MEzY0o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集32"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTDH_KBGyw1kt1HkijMHG5o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集34"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTDh9fQgqv_6lSY5Z75Z5Yo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集35"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTDyshQgqv_6lSY5Z75a42o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集37"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTEG11roRROhEkho_4qFPYo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集39"},
|
||||
{"type_id":"https://mypikpak.com/s/VNRTFVbPBGyw1kt1HkijMoBko1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集41"}
|
||||
|
||||
]
|
||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
||||
[
|
||||
{
|
||||
"type_id":"pikpak分享地址1",
|
||||
"type_name":"分享名稱1"
|
||||
},
|
||||
{
|
||||
"type_id":"pikpak分享地址2",
|
||||
"type_name":"分享名稱2"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
https://www.alipan.com/s/self 我的阿里云盘
|
||||
https://pan.quark.cn/s/self 我的夸克云盘
|
||||
https://drive.uc.cn/s/self 我的UC云盘
|
||||
https://115.com/s/self 我的115云盘
|
||||
https://pan.xunlei.com/s/self 我的迅雷云盘
|
||||
https://mypikpak.com/s/self 我的PikPak云盘
|
||||
https://docs.qq.com/sheet/DVXp5Q2dRTVRXb2VS?tab=ith4wt 阿里云资源每天更新
|
||||
https://docs.qq.com/sheet/DVHpJVmRhT3ViV09Q?tab=ppx5bp 资源大全3
|
||||
https://docs.qq.com/sheet/DVHpJVmRhT3ViV09Q?tab=qvnx1e 星火阿里云盘
|
||||
https://docs.qq.com/sheet/DVXFYSURJRG9qbWJi?tab=BB08J2 短剧更新1
|
||||
https://docs.qq.com/sheet/DVXFYSURJRG9qbWJi?tab=x5a2cy 短剧更新2
|
||||
magnet:?xt=urn:btih:448aa6f77f1c1a14eb233b1f06b614a8d3193c51 绝命毒师1-5季 pushset1
|
||||
magnet:?xt=urn:btih:6EF000064DC6402E00E65F3B2029226196CD55C1 权力的游戏第八季 pushset2
|
||||
@@ -0,0 +1,8 @@
|
||||
self 我的夸克网盘
|
||||
885fd4ba2d92 每日短剧更新
|
||||
432b5cd3a225 短剧162g
|
||||
c54a8e47f82f 短剧114g
|
||||
047991d5955e 经典剧集
|
||||
ecdf7d6ffaaa 经典港剧合集1
|
||||
187062318ebc 经典港剧合集2
|
||||
9ebb62b93194 2023-2024跨年晚会合集
|
||||
@@ -0,0 +1,7 @@
|
||||
user:[email protected]/share Samba分享 0 updated_at DESC
|
||||
user:[email protected]/share2 Samba分享2 0 updated_at DESC
|
||||
user:[email protected]/share8 Samba分享8 0 updated_at DESC
|
||||
user:[email protected]/share10 Samba分享10 0 updated_at DESC
|
||||
user:[email protected]/share11 Samba分享11 0 updated_at DESC
|
||||
user:[email protected]/share12 Samba分享12 0 updated_at DESC
|
||||
user:[email protected]/share13 Samba分享13 0 updated_at DESC
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
a13f87deb17cbb5201eae4b671e1209d
|
||||
@@ -0,0 +1,252 @@
|
||||
{
|
||||
"log": {
|
||||
"level": "debug",
|
||||
"timestamp": true
|
||||
},
|
||||
"dns": {
|
||||
"servers": [
|
||||
{
|
||||
"tag": "remote",
|
||||
"address": "https://8.8.8.8/dns-query",
|
||||
"detour": "select"
|
||||
},
|
||||
{
|
||||
"tag": "local",
|
||||
"address": "https://223.5.5.5/dns-query",
|
||||
"detour": "direct"
|
||||
},
|
||||
{
|
||||
"tag": "block",
|
||||
"address": "rcode://success"
|
||||
},
|
||||
{
|
||||
"tag": "fakeip",
|
||||
"address": "fakeip"
|
||||
}
|
||||
],
|
||||
"rules": [
|
||||
{
|
||||
"outbound": ["any"],
|
||||
"server": "local"
|
||||
},
|
||||
{
|
||||
"clash_mode": "Global",
|
||||
"server": "remote"
|
||||
},
|
||||
{
|
||||
"clash_mode": "Direct",
|
||||
"server": "local"
|
||||
},
|
||||
{
|
||||
"rule_set": "geosite-geolocation-cn",
|
||||
"server": "local"
|
||||
},
|
||||
{
|
||||
"type": "logical",
|
||||
"mode": "and",
|
||||
"rules": [
|
||||
{
|
||||
"rule_set": "geosite-geolocation-!cn",
|
||||
"invert": true
|
||||
},
|
||||
{
|
||||
"rule_set": "geoip-cn"
|
||||
}
|
||||
],
|
||||
"server": "local"
|
||||
},
|
||||
{
|
||||
"rule_set": "geosite-geolocation-!cn",
|
||||
"query_type":["A","AAAA"],
|
||||
"server": "fakeip",
|
||||
"rewrite_ttl": 1
|
||||
}
|
||||
],
|
||||
"fakeip": {
|
||||
"enabled": true,
|
||||
"inet4_range": "198.18.0.0/15",
|
||||
"inet6_range": "fc00::/18"
|
||||
},
|
||||
"strategy": "prefer_ipv4",
|
||||
"independent_cache": true,
|
||||
"reverse_mapping": true
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"type": "mixed",
|
||||
"tag": "mixed-in",
|
||||
"listen": "0.0.0.0",
|
||||
"listen_port": 10172,
|
||||
"tcp_fast_open":true,
|
||||
"sniff": false,
|
||||
"sniff_override_destination": false,
|
||||
"domain_strategy": "prefer_ipv4",
|
||||
"set_system_proxy": false
|
||||
},
|
||||
{
|
||||
"type": "socks",
|
||||
"tag": "socks-in",
|
||||
"listen": "0.0.0.0",
|
||||
"listen_port": 10173,
|
||||
"tcp_fast_open":true,
|
||||
"sniff": false,
|
||||
"sniff_override_destination": false,
|
||||
"domain_strategy": "prefer_ipv4"
|
||||
},
|
||||
{
|
||||
"type": "mixed",
|
||||
"tag": "mixed-in2",
|
||||
"listen": "0.0.0.0",
|
||||
"listen_port": 10174,
|
||||
"tcp_fast_open":true,
|
||||
"sniff": false,
|
||||
"sniff_override_destination": false,
|
||||
"domain_strategy": "prefer_ipv4",
|
||||
"set_system_proxy": false
|
||||
},
|
||||
{
|
||||
"type": "mixed",
|
||||
"tag": "mixed-in3",
|
||||
"listen": "0.0.0.0",
|
||||
"listen_port": 10175,
|
||||
"tcp_fast_open":true,
|
||||
"sniff": false,
|
||||
"sniff_override_destination": false,
|
||||
"domain_strategy": "prefer_ipv4",
|
||||
"set_system_proxy": false
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"type": "selector",
|
||||
"tag": "select",
|
||||
"outbounds": [
|
||||
"urltest"
|
||||
],
|
||||
"default": "urltest"
|
||||
},
|
||||
{
|
||||
"type": "urltest",
|
||||
"tag": "urltest",
|
||||
"interval": "30m",
|
||||
"idle_timeout": "60m",
|
||||
"interrupt_exist_connections": false,
|
||||
"outbounds": null
|
||||
},
|
||||
{
|
||||
"type": "direct",
|
||||
"tag": "direct"
|
||||
},
|
||||
{
|
||||
"type": "block",
|
||||
"tag": "block"
|
||||
},
|
||||
{
|
||||
"type": "dns",
|
||||
"tag": "dns-out"
|
||||
}
|
||||
],
|
||||
"route": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "logical",
|
||||
"mode": "or",
|
||||
"rules": [
|
||||
{
|
||||
"protocol": "dns"
|
||||
},
|
||||
{
|
||||
"port": 53
|
||||
}
|
||||
],
|
||||
"outbound": "dns-out"
|
||||
},
|
||||
{
|
||||
"ip_is_private": true,
|
||||
"outbound": "direct"
|
||||
},
|
||||
{
|
||||
"inbound":[
|
||||
"mixed-in2"
|
||||
],
|
||||
"outbound":"select2"
|
||||
},
|
||||
{
|
||||
"inbound":[
|
||||
"mixed-in3"
|
||||
],
|
||||
"outbound":"select3"
|
||||
},
|
||||
{
|
||||
"clash_mode": "Direct",
|
||||
"outbound": "direct"
|
||||
},
|
||||
{
|
||||
"clash_mode": "Global",
|
||||
"outbound": "select"
|
||||
},
|
||||
{
|
||||
"type": "logical",
|
||||
"mode": "or",
|
||||
"rules": [
|
||||
{
|
||||
"port": 853
|
||||
},
|
||||
{
|
||||
"network": "udp",
|
||||
"port": 443
|
||||
},
|
||||
{
|
||||
"protocol": "stun"
|
||||
}
|
||||
],
|
||||
"outbound": "block"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geoip-cn",
|
||||
"geosite-geolocation-cn"
|
||||
],
|
||||
"outbound": "direct"
|
||||
}
|
||||
],
|
||||
"rule_set": [
|
||||
{
|
||||
"type": "remote",
|
||||
"tag": "geoip-cn",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs",
|
||||
"download_detour": "select"
|
||||
},
|
||||
{
|
||||
"type": "remote",
|
||||
"tag": "geosite-geolocation-cn",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs",
|
||||
"download_detour": "select"
|
||||
},
|
||||
{
|
||||
"type": "remote",
|
||||
"tag": "geosite-geolocation-!cn",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs",
|
||||
"download_detour": "select"
|
||||
}
|
||||
],
|
||||
"auto_detect_interface": false
|
||||
},
|
||||
"experimental": {
|
||||
"cache_file": {
|
||||
"enabled": true,
|
||||
"store_rdrc": true
|
||||
},
|
||||
"clash_api": {
|
||||
"external_controller": "0.0.0.0:19090",
|
||||
"external_ui": "ui",
|
||||
"external_ui_download_url": "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip",
|
||||
"external_ui_download_detour": "select",
|
||||
"default_mode": "Rule"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+178
@@ -0,0 +1,178 @@
|
||||
var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY";
|
||||
//此处收录了375个多音字
|
||||
var oMultiDiff = { "19969": "DZ", "19975": "WM", "19988": "QJ", "20048": "YL", "20056": "SC", "20060": "NM", "20094": "QG", "20127": "QJ", "20167": "QC", "20193": "YG", "20250": "KH", "20256": "ZC", "20282": "SC", "20285": "QJG", "20291": "TD", "20314": "YD", "20340": "NE", "20375": "TD", "20389": "YJ", "20391": "CZ", "20415": "PB", "20446": "YS", "20447": "SQ", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20985": "AW", "21032": "PB", "21048": "XQ", "21049": "SC", "21089": "YS", "21119": "JC", "21242": "SB", "21273": "SC", "21305": "YP", "21306": "QO", "21330": "ZC", "21333": "SDC", "21345": "QK", "21378": "CA", "21397": "SC", "21414": "XS", "21442": "SC", "21477": "JG", "21480": "TD", "21484": "ZS", "21494": "YX", "21505": "YX", "21512": "HG", "21523": "XH", "21537": "PB", "21542": "PF", "21549": "KH", "21571": "E", "21574": "DA", "21588": "TD", "21589": "O", "21618": "ZC", "21621": "KHA", "21632": "ZJ", "21654": "KG", "21679": "LKG", "21683": "KH", "21710": "A", "21719": "YH", "21734": "WOE", "21769": "A", "21780": "WN", "21804": "XH", "21834": "A", "21899": "ZD", "21903": "RN", "21908": "WO", "21939": "ZC", "21956": "SA", "21964": "YA", "21970": "TD", "22003": "A", "22031": "JG", "22040": "XS", "22060": "ZC", "22066": "ZC", "22079": "MH", "22129": "XJ", "22179": "XA", "22237": "NJ", "22244": "TD", "22280": "JQ", "22300": "YH", "22313": "XW", "22331": "YQ", "22343": "YJ", "22351": "PH", "22395": "DC", "22412": "TD", "22484": "PB", "22500": "PB", "22534": "ZD", "22549": "DH", "22561": "PB", "22612": "TD", "22771": "KQ", "22831": "HB", "22841": "JG", "22855": "QJ", "22865": "XQ", "23013": "ML", "23081": "WM", "23487": "SX", "23558": "QJ", "23561": "YW", "23586": "YW", "23614": "YW", "23615": "SN", "23631": "PB", "23646": "ZS", "23663": "ZT", "23673": "YG", "23762": "TD", "23769": "ZS", "23780": "QJ", "23884": "QK", "24055": "XH", "24113": "DC", "24162": "ZC", "24191": "GA", "24273": "QJ", "24324": "NL", "24377": "TD", "24378": "QJ", "24439": "PF", "24554": "ZS", "24683": "TD", "24694": "WE", "24733": "LK", "24925": "TN", "25094": "ZG", "25100": "XQ", "25103": "XH", "25153": "PB", "25170": "PB", "25179": "KG", "25203": "PB", "25240": "ZS", "25282": "FB", "25303": "NA", "25324": "KG", "25341": "ZY", "25373": "WZ", "25375": "XJ", "25384": "A", "25457": "A", "25528": "SD", "25530": "SC", "25552": "TD", "25774": "ZC", "25874": "ZC", "26044": "YW", "26080": "WM", "26292": "PB", "26333": "PB", "26355": "ZY", "26366": "CZ", "26397": "ZC", "26399": "QJ", "26415": "ZS", "26451": "SB", "26526": "ZC", "26552": "JG", "26561": "TD", "26588": "JG", "26597": "CZ", "26629": "ZS", "26638": "YL", "26646": "XQ", "26653": "KG", "26657": "XJ", "26727": "HG", "26894": "ZC", "26937": "ZS", "26946": "ZC", "26999": "KJ", "27099": "KJ", "27449": "YQ", "27481": "XS", "27542": "ZS", "27663": "ZS", "27748": "TS", "27784": "SC", "27788": "ZD", "27795": "TD", "27812": "O", "27850": "PB", "27852": "MB", "27895": "SL", "27898": "PL", "27973": "QJ", "27981": "KH", "27986": "HX", "27994": "XJ", "28044": "YC", "28065": "WG", "28177": "SM", "28267": "QJ", "28291": "KH", "28337": "ZQ", "28463": "TL", "28548": "DC", "28601": "TD", "28689": "PB", "28805": "JG", "28820": "QG", "28846": "PB", "28952": "TD", "28975": "ZC", "29100": "A", "29325": "QJ", "29575": "SL", "29602": "FB", "30010": "TD", "30044": "CX", "30058": "PF", "30091": "YSP", "30111": "YN", "30229": "XJ", "30427": "SC", "30465": "SX", "30631": "YQ", "30655": "QJ", "30684": "QJG", "30707": "SD", "30729": "XH", "30796": "LG", "30917": "PB", "31074": "NM", "31085": "JZ", "31109": "SC", "31181": "ZC", "31192": "MLB", "31293": "JQ", "31400": "YX", "31584": "YJ", "31896": "ZN", "31909": "ZY", "31995": "XJ", "32321": "PF", "32327": "ZY", "32418": "HG", "32420": "XQ", "32421": "HG", "32438": "LG", "32473": "GJ", "32488": "TD", "32521": "QJ", "32527": "PB", "32562": "ZSQ", "32564": "JZ", "32735": "ZD", "32793": "PB", "33071": "PF", "33098": "XL", "33100": "YA", "33152": "PB", "33261": "CX", "33324": "BP", "33333": "TD", "33406": "YA", "33426": "WM", "33432": "PB", "33445": "JG", "33486": "ZN", "33493": "TS", "33507": "QJ", "33540": "QJ", "33544": "ZC", "33564": "XQ", "33617": "YT", "33632": "QJ", "33636": "XH", "33637": "YX", "33694": "WG", "33705": "PF", "33728": "YW", "33882": "SR", "34067": "WM", "34074": "YW", "34121": "QJ", "34255": "ZC", "34259": "XL", "34425": "JH", "34430": "XH", "34485": "KH", "34503": "YS", "34532": "HG", "34552": "XS", "34558": "YE", "34593": "ZL", "34660": "YQ", "34892": "XH", "34928": "SC", "34999": "QJ", "35048": "PB", "35059": "SC", "35098": "ZC", "35203": "TQ", "35265": "JX", "35299": "JX", "35782": "SZ", "35828": "YS", "35830": "E", "35843": "TD", "35895": "YG", "35977": "MH", "36158": "JG", "36228": "QJ", "36426": "XQ", "36466": "DC", "36710": "JC", "36711": "ZYG", "36767": "PB", "36866": "SK", "36951": "YW", "37034": "YX", "37063": "XH", "37218": "ZC", "37325": "ZC", "38063": "PB", "38079": "TD", "38085": "QY", "38107": "DC", "38116": "TD", "38123": "YD", "38224": "HG", "38241": "XTC", "38271": "ZC", "38415": "YE", "38426": "KH", "38461": "YD", "38463": "AE", "38466": "PB", "38477": "XJ", "38518": "YT", "38551": "WK", "38585": "ZC", "38704": "XS", "38739": "LJ", "38761": "GJ", "38808": "SQ", "39048": "JG", "39049": "XJ", "39052": "HG", "39076": "CZ", "39271": "XT", "39534": "TD", "39552": "TD", "39584": "PB", "39647": "SB", "39730": "LG", "39748": "TPB", "40109": "ZQ", "40479": "ND", "40516": "HG", "40536": "HG", "40583": "QJ", "40765": "YQ", "40784": "QJ", "40840": "YK", "40863": "QJG" };
|
||||
|
||||
|
||||
function checkCh(ch) {
|
||||
var uni = ch.charCodeAt(0);
|
||||
//如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数
|
||||
if (uni > 40869 || uni < 19968)
|
||||
return ch; //dealWithOthers(ch);
|
||||
//检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母
|
||||
return (oMultiDiff[uni] ? oMultiDiff[uni] : (strChineseFirstPY.charAt(uni - 19968)));
|
||||
}
|
||||
|
||||
function mkRslt(arr) {
|
||||
var arrRslt = [""];
|
||||
for (var i = 0, len = arr.length; i < len; i++) {
|
||||
var str = arr[i];
|
||||
var strlen = str.length;
|
||||
if (strlen == 1) {
|
||||
for (var k = 0; k < arrRslt.length; k++) {
|
||||
arrRslt[k] += str;
|
||||
}
|
||||
} else {
|
||||
var tmpArr = arrRslt.slice(0);
|
||||
arrRslt = [];
|
||||
for (k = 0; k < strlen; k++) {
|
||||
//复制一个相同的arrRslt
|
||||
var tmp = tmpArr.slice(0);
|
||||
//把当前字符str[k]添加到每个元素末尾
|
||||
for (var j = 0; j < tmp.length; j++) {
|
||||
tmp[j] += str.charAt(k);
|
||||
}
|
||||
//把复制并修改后的数组连接到arrRslt上
|
||||
arrRslt = arrRslt.concat(tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
return arrRslt;
|
||||
}
|
||||
//两端去空格函数
|
||||
String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }
|
||||
|
||||
//参数——中文字符串
|
||||
//返回值——拼音首字母串数组
|
||||
export function getFirstLetterList(str) {
|
||||
if (typeof(str) != "string")
|
||||
throw new Error(-1, "请传入字符串类型的参数!");
|
||||
var arrResult = new Array(); //保存中间结果的数组
|
||||
for (var i = 0, len = str.length; i < len; i++) {
|
||||
//获得unicode码
|
||||
var ch = str.charAt(i);
|
||||
//检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理
|
||||
arrResult.push(checkCh(ch));
|
||||
}
|
||||
//处理arrResult,返回所有可能的拼音首字母串数组
|
||||
return mkRslt(arrResult);
|
||||
}
|
||||
|
||||
// 判断字符串是否全是中文
|
||||
function isAllChinese(str) {
|
||||
return /^[\u4E00-\u9FA5]+$/.test(str);
|
||||
}
|
||||
|
||||
// 判断字符是否为中文
|
||||
function isChinese(char) {
|
||||
return /^[\u4E00-\u9FA5]$/.test(char);
|
||||
}
|
||||
|
||||
// 中文拼音名称排序
|
||||
export const sortListByCN = (vodList,key,order) => {
|
||||
if(!key){
|
||||
return vodList
|
||||
}
|
||||
order = order||'asc'; // 默认正序
|
||||
let ASCarr = vodList.sort((a, b) => {
|
||||
a = a[key];
|
||||
b = b[key];
|
||||
// 数字排在字符串前面
|
||||
if (typeof a === 'number' && typeof b === 'string') {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (typeof a === 'string' && typeof b === 'number') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 当存在非数字时
|
||||
if (isNaN(a) || isNaN(b)) {
|
||||
|
||||
// 全汉字的排在非全汉字的后面
|
||||
if (isAllChinese(a) && !isAllChinese(b)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!isAllChinese(a) && isAllChinese(b)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 存在非数字的数据时,都转为字符串进行比较
|
||||
a = a.toString();
|
||||
b = b.toString();
|
||||
|
||||
let result = 0;
|
||||
|
||||
// 依次比较两个字符串的各项字符
|
||||
for (let index = 0; index < ((a.length - b.length) ? b.length : a.length); index++) {
|
||||
|
||||
// 汉字排在非汉字的后面
|
||||
if (!isChinese(a[index]) && isChinese(b[index])) {
|
||||
result = -1;
|
||||
}
|
||||
|
||||
if (isChinese(a[index]) && !isChinese(b[index])) {
|
||||
result = 1;
|
||||
}
|
||||
|
||||
// 若两个汉字进行比较,则比较他们的拼音首字母
|
||||
if (isChinese(a[index]) && isChinese(b[index])) {
|
||||
let pinyinA = getFirstLetterList(a[index]).toString();
|
||||
let pinyinB = getFirstLetterList(b[index]).toString();
|
||||
|
||||
result = pinyinA.localeCompare(pinyinB, 'zh-Hans-CN', { sensitivity: 'accent' });
|
||||
}
|
||||
|
||||
// 若已经比较出结果,则跳出循环,不再继续比较剩余字符
|
||||
if (result !== 0) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// 只要有一个无法转换为数字——转换为字符串进行比较——先按字符排序,然后按照数字排序
|
||||
return result || a.toString().localeCompare(b.toString(), 'zh-Hans-CN', { sensitivity: 'accent' });
|
||||
} else {
|
||||
// 都能转换为数字——转换为数字进行比较——从小到大排序
|
||||
return Number(a) - Number(b);
|
||||
}
|
||||
});
|
||||
if(order==='desc'){
|
||||
ASCarr.reverse();
|
||||
}
|
||||
return ASCarr
|
||||
};
|
||||
|
||||
// 首字母开头排序
|
||||
export const sortListByFirst = (vodList,key) => {
|
||||
key = key||'vod_name';
|
||||
// 名字以特殊符号开头的应用列表
|
||||
const symbol_list = [];
|
||||
// 名字以中文开头的应用列表
|
||||
const cn_list = [];
|
||||
// 名字以英文开头的应用列表
|
||||
const en_list = [];
|
||||
// 名字以数字开头的应用列表
|
||||
const num_list = [];
|
||||
|
||||
vodList.forEach((vod) => {
|
||||
const { vod_name } = vod;
|
||||
//通过正则进行数据分类
|
||||
if (/[\u4e00-\u9fa5]/.test(vod_name[0])) {
|
||||
cn_list.push(vod);
|
||||
} else if (/[a-zA-Z]/.test(vod_name[0])) {
|
||||
en_list.push(vod);
|
||||
} else if (/[\d]/.test(vod_name[0])) {
|
||||
num_list.push(vod);
|
||||
} else {
|
||||
symbol_list.push(vod);
|
||||
}
|
||||
});
|
||||
//按照要求的方式进行数据排序重组
|
||||
const newList = [
|
||||
...cn_list.sort((a, b) => a.vod_name[0]?.localeCompare(b.vod_name[0])),
|
||||
...en_list.sort((a, b) => a.vod_name[0].localeCompare(b.vod_name[0])),//localeCompare可以不区分大小写的进行排序
|
||||
...num_list.sort((a, b) => a.vod_name[0] - b.vod_name[0]),
|
||||
...symbol_list.sort((a, b) => a.vod_name[0] - b.vod_name[0])
|
||||
];
|
||||
return newList
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
self 我的迅雷雲盤
|
||||
VNg6eg34ncoRGHp98SBeYRUmA1?pwd=ywp2 刘德华高清电影电视剧全集
|
||||
VNg6YRPKiFWtWRrEfTcmpo4nA1?pwd=3dk6 李连杰电影合集
|
||||
VNg6af5Yu4IVpCplLZEXpTCHA1?pwd=e3tk 周星驰电影合集
|
||||
VNg6ZDjEu4IVpCplLZEXovZMA1?pwd=i83r 成龙电影合集
|
||||
VNg6aYN6S67q560x6uBmiTxGA1?pwd=vcff 金庸武侠作品电视剧版合集
|
||||
VNgOl6jLwFWEAL3PSyCmyc9vA1?pwd=z3jn 邵氏电影合集中文字幕
|
||||
VNfYsaHU3GXpR3Wc6X2vLDRXA1?pwd=k327 1962-2015[欧美][动作][007系列4K][24部][409GB]
|
||||
VNgOliKdkJeHX8To1KuRhkabA1?pwd=8dfq 中国大陆老电影合集
|
||||
VNgOnbo2VGbPDhR48Bgvh0GMA1?pwd=n59u TVB香港电视剧
|
||||
VNgOkmDE9KxEdCnfuqBq-nh6A1?pwd=nr2b 豆瓣top电影合集
|
||||
VNfGhoL9ptGD3gtENXxflDZ6A1?pwd=4a3t 5TB精选迅雷云盘资源
|
||||
VNgOlIg5E5iq61_VnPABvO3BA1?pwd=bxix 港台大陆三级影片
|
||||
VNg9Y19oPimZP2d2xRhFUkQ6A1?pwd=nr2c 中国电视剧合集
|
||||
VNjwyIJVrUPzmOwSA07z6EP1A1?pwd=a84q 抖音短剧合集
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"token":"",
|
||||
"open_token":"",
|
||||
"open_api_url":"postparam|http://api.extscreen.com/aliyundrive/token",
|
||||
"oauth_client_id":"",
|
||||
"oauth_client_secret":"",
|
||||
"oauth_auth_url":"",
|
||||
"oauth_refresh_url":"",
|
||||
"thread_limit":32,
|
||||
"is_vip":true,
|
||||
"vip_thread_limit":32,
|
||||
"vod_flags":"4kz|auto",
|
||||
"quark_thread_limit":32,
|
||||
"quark_is_vip":false,
|
||||
"quark_is_guest":true,
|
||||
"quark_vip_thread_limit":32,
|
||||
"quark_flags":"4kz|auto",
|
||||
"uc_thread_limit":0,
|
||||
"uc_is_vip":false,
|
||||
"uc_vip_thread_limit":0,
|
||||
"uc_flags":"4kz|auto",
|
||||
"thunder_thread_limit":2,
|
||||
"thunder_is_vip":false,
|
||||
"thunder_vip_thread_limit":2,
|
||||
"thunder_flags":"4k|4kz|auto",
|
||||
"aliproxy":"",
|
||||
"aliproxy_url":"",
|
||||
"proxy":"socks5://127.0.0.1:10172",
|
||||
"danmu":true,
|
||||
"quark_danmu":true,
|
||||
"quark_cookie":"",
|
||||
"uc_cookie":"",
|
||||
"thunder_username":"",
|
||||
"thunder_password":"",
|
||||
"thunder_captchatoken":"",
|
||||
"yd_auth":"",
|
||||
"yd_thread_limit":4,
|
||||
"yd_flags":"auto|4kz",
|
||||
"yd_danmu":true,
|
||||
"pikpak_username":"",
|
||||
"pikpak_password":"",
|
||||
"pikpak_flags":"4k|auto",
|
||||
"pikpak_thread_limit":2,
|
||||
"pikpak_vip_thread_limit":2,
|
||||
"pikpak_proxy":"socks5://127.0.0.1:10172",
|
||||
"pikpak_proxy_onlyapi":false,
|
||||
"pikpak_danmu":true,
|
||||
"wgcf_key":"",
|
||||
"wgcf_key2":"",
|
||||
"wgcf_ipport":"",
|
||||
"wgcf_xray_url":"./xray.gz",
|
||||
"wgcf_geoip_url":"./geoip.dat.gz",
|
||||
"wgcf_json_url":"./wgcf.json",
|
||||
"wgcf_vless_id":"",
|
||||
"wgcf_vless_optname":"singapore.com:443",
|
||||
"wgcf_vless_worker":"",
|
||||
"wgcf_vless_path":"/?ed=2048",
|
||||
"wgcf_vless_protocol":"vless",
|
||||
"wgcf_vless_network":"ws",
|
||||
"wgcf_vless_tls":false,
|
||||
"libxl_url":"./libxl_thunder_sdk.so",
|
||||
"youtube_proxy":"socks5://127.0.0.1:10172",
|
||||
"singbox_url":"./sing-box.gz",
|
||||
"singbox_subscribe_url":"",
|
||||
"singbox_clash2singbox_url":"./clash2singbox.gz",
|
||||
"singbox_template_url":"./singbox.json",
|
||||
"pan115_cookie":"",
|
||||
"pan115_thread_limit":0,
|
||||
"pan115_vip_thread_limit":0,
|
||||
"pan115_is_vip":false,
|
||||
"pan115_flags":"4kz",
|
||||
"pan115_auto_delete":true,
|
||||
"pan115_delete_code":"",
|
||||
"pan_order":"ali|quark|uc|115|yd|thunder|pikpak"
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"token":"",
|
||||
"open_token":"",
|
||||
"open_api_url":"postparam|http://api.extscreen.com/aliyundrive/token",
|
||||
"oauth_client_id":"",
|
||||
"oauth_client_secret":"",
|
||||
"oauth_auth_url":"",
|
||||
"oauth_refresh_url":"",
|
||||
"thread_limit":32,
|
||||
"is_vip":true,
|
||||
"vip_thread_limit":32,
|
||||
"vod_flags":"4kz|auto",
|
||||
"quark_thread_limit":32,
|
||||
"quark_is_vip":false,
|
||||
"quark_vip_thread_limit":32,
|
||||
"quark_flags":"4kz|auto",
|
||||
"uc_thread_limit":0,
|
||||
"uc_is_vip":false,
|
||||
"uc_vip_thread_limit":0,
|
||||
"uc_flags":"4kz|auto",
|
||||
"thunder_thread_limit":2,
|
||||
"thunder_is_vip":false,
|
||||
"thunder_vip_thread_limit":2,
|
||||
"thunder_flags":"4k|4kz|auto",
|
||||
"aliproxy":"",
|
||||
"aliproxy_url":"",
|
||||
"proxy":"",
|
||||
"danmu":true,
|
||||
"quark_danmu":true,
|
||||
"quark_cookie":"",
|
||||
"uc_cookie":"",
|
||||
"thunder_username":"",
|
||||
"thunder_password":"",
|
||||
"thunder_captchatoken":"",
|
||||
"yd_auth":"",
|
||||
"yd_thread_limit":4,
|
||||
"yd_flags":"auto|4kz",
|
||||
"yd_danmu":true,
|
||||
"pikpak_username":"[email protected]",
|
||||
"pikpak_password":"Aa123123",
|
||||
"pikpak_flags":"4k|auto",
|
||||
"pikpak_thread_limit":2,
|
||||
"pikpak_vip_thread_limit":2,
|
||||
"pikpak_proxy":"",
|
||||
"pikpak_proxy_onlyapi":false,
|
||||
"pikpak_danmu":true,
|
||||
"wgcf_key":"",
|
||||
"wgcf_key2":"",
|
||||
"wgcf_ipport":"",
|
||||
"wgcf_xray_url":"./xray.gz",
|
||||
"wgcf_geoip_url":"./geoip.dat.gz",
|
||||
"wgcf_json_url":"./wgcf.json",
|
||||
"wgcf_vless_id":"",
|
||||
"wgcf_vless_optname":"singapore.com:443",
|
||||
"wgcf_vless_worker":"",
|
||||
"wgcf_vless_path":"/?ed=2048",
|
||||
"wgcf_vless_protocol":"vless",
|
||||
"wgcf_vless_network":"ws",
|
||||
"wgcf_vless_tls":false,
|
||||
"libxl_url":"./libxl_thunder_sdk.so",
|
||||
"youtube_proxy":"proxy",
|
||||
"singbox_url":"./sing-box.gz",
|
||||
"singbox_subscribe_url":"",
|
||||
"singbox_clash2singbox_url":"./clash2singbox.gz",
|
||||
"singbox_template_url":"./singbox.json",
|
||||
"pan115_cookie":"",
|
||||
"pan115_thread_limit":0,
|
||||
"pan115_vip_thread_limit":0,
|
||||
"pan115_is_vip":false,
|
||||
"pan115_flags":"4kz",
|
||||
"pan115_auto_delete":true,
|
||||
"pan115_delete_code":"",
|
||||
"pan_order":"ali|quark|uc|115|yd|thunder|pikpak"
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"token":"",
|
||||
"open_token":"",
|
||||
"open_api_url":"postparam|http://api.extscreen.com/aliyundrive/token",
|
||||
"oauth_client_id":"",
|
||||
"oauth_client_secret":"",
|
||||
"oauth_auth_url":"",
|
||||
"oauth_refresh_url":"",
|
||||
"thread_limit":32,
|
||||
"is_vip":true,
|
||||
"vip_thread_limit":32,
|
||||
"vod_flags":"4kz|auto",
|
||||
"quark_thread_limit":32,
|
||||
"quark_is_vip":true,
|
||||
"quark_is_guest":false,
|
||||
"quark_vip_thread_limit":32,
|
||||
"quark_flags":"4kz|auto",
|
||||
"uc_thread_limit":0,
|
||||
"uc_is_vip":false,
|
||||
"uc_vip_thread_limit":0,
|
||||
"uc_flags":"4kz|auto",
|
||||
"thunder_thread_limit":2,
|
||||
"thunder_is_vip":false,
|
||||
"thunder_vip_thread_limit":2,
|
||||
"thunder_flags":"4k|4kz|auto",
|
||||
"aliproxy":"",
|
||||
"aliproxy_url":"",
|
||||
"proxy":"",
|
||||
"danmu":true,
|
||||
"quark_danmu":true,
|
||||
"quark_cookie":"",
|
||||
"uc_cookie":"",
|
||||
"thunder_username":"",
|
||||
"thunder_password":"",
|
||||
"thunder_captchatoken":"",
|
||||
"yd_auth":"",
|
||||
"yd_thread_limit":4,
|
||||
"yd_flags":"auto|4kz",
|
||||
"yd_danmu":true,
|
||||
"pikpak_username":"",
|
||||
"pikpak_password":"",
|
||||
"pikpak_flags":"4k|auto",
|
||||
"pikpak_thread_limit":2,
|
||||
"pikpak_vip_thread_limit":2,
|
||||
"pikpak_proxy":"",
|
||||
"pikpak_proxy_onlyapi":false,
|
||||
"pikpak_danmu":true,
|
||||
"wgcf_key":"",
|
||||
"wgcf_key2":"",
|
||||
"wgcf_ipport":"",
|
||||
"wgcf_xray_url":"./xray.gz",
|
||||
"wgcf_geoip_url":"./geoip.dat.gz",
|
||||
"wgcf_json_url":"./wgcf.json",
|
||||
"wgcf_vless_id":"",
|
||||
"wgcf_vless_optname":"singapore.com:443",
|
||||
"wgcf_vless_worker":"",
|
||||
"wgcf_vless_path":"/?ed=2048",
|
||||
"wgcf_vless_protocol":"vless",
|
||||
"wgcf_vless_network":"ws",
|
||||
"wgcf_vless_tls":false,
|
||||
"libxl_url":"./libxl_thunder_sdk.so",
|
||||
"youtube_proxy":"proxy",
|
||||
"singbox_url":"./sing-box.gz",
|
||||
"singbox_subscribe_url":"",
|
||||
"singbox_clash2singbox_url":"./clash2singbox.gz",
|
||||
"singbox_template_url":"./singbox.json",
|
||||
"pan115_cookie":"",
|
||||
"pan115_thread_limit":0,
|
||||
"pan115_vip_thread_limit":0,
|
||||
"pan115_is_vip":false,
|
||||
"pan115_flags":"4kz",
|
||||
"pan115_auto_delete":true,
|
||||
"pan115_delete_code":"",
|
||||
"pan_order":"ali|quark|uc|115|yd|thunder|pikpak"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
self 我的UC网盘
|
||||
c0503fdee6644 2024最新精整豆瓣TOP250部
|
||||
369e30038dae4 音乐
|
||||
5e0c900955654 完美世界
|
||||
d695231313ba4 沧元图-东宁府番外篇(2024)
|
||||
db80b739256e4 诛仙2
|
||||
cdbc974cf3c14 斗罗大陆2-绝世唐门4K
|
||||
714a0d7f921b4 七夕之国-2024
|
||||
9cca54e72e7e4 遮天4K
|
||||
42e08284433b4?pwd=NZQb 影视ziyuan每日更新
|
||||
391b86c09cd24 2023日剧
|
||||
21f04a22052f4 2023韩剧
|
||||
+262
@@ -0,0 +1,262 @@
|
||||
{
|
||||
"log": {
|
||||
"loglevel": "debug"
|
||||
},
|
||||
"dns": {
|
||||
"disableFallbackIfMatch": true,
|
||||
"hosts": {},
|
||||
"queryStrategy": "UseIP",
|
||||
"servers": [
|
||||
{
|
||||
"address": "tcp://1.1.1.1",
|
||||
"concurrency": true
|
||||
},
|
||||
{
|
||||
"address": "tcp+local://223.5.5.5:53",
|
||||
"concurrency": true,
|
||||
"domains": [
|
||||
"full:cdn-all.xn--b6gac.eu.org"
|
||||
],
|
||||
"skipFallback": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"outbounds": [
|
||||
{
|
||||
"settings": {
|
||||
"secretKey": "KEY",
|
||||
"mtu": 1400,
|
||||
"peers": [
|
||||
{
|
||||
"publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
|
||||
"endpoint" : "engage.cloudflareclient.com:2408",
|
||||
"keepAlive": 30
|
||||
}
|
||||
],
|
||||
"address": [
|
||||
"172.16.0.2/32",
|
||||
"2606:4700:110:893c:845c:536b:5565:8106/128"
|
||||
],
|
||||
"kernelMode": false,
|
||||
"worker":16
|
||||
},
|
||||
"protocol": "wireguard",
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
},
|
||||
"tag":"directwarp"
|
||||
},
|
||||
{
|
||||
"settings": {
|
||||
"secretKey": "KEY",
|
||||
"mtu": 1280,
|
||||
"peers": [
|
||||
{
|
||||
"publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
|
||||
"endpoint" : "engage.cloudflareclient.com:2408",
|
||||
"keepAlive": 30
|
||||
}
|
||||
],
|
||||
"address": [
|
||||
"172.16.0.2/32",
|
||||
"2606:4700:110:893c:845c:536b:5565:8106/128"
|
||||
],
|
||||
"kernelMode": false,
|
||||
"worker":16
|
||||
},
|
||||
"protocol": "wireguard",
|
||||
"streamSettings": {
|
||||
"network": "tcp"
|
||||
},
|
||||
"tag":"warpoverwarp",
|
||||
"proxySettings": {
|
||||
"tag": "directwarp",
|
||||
"transportLayer": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "cdn-all.xn--b6gac.eu.org",
|
||||
"port": 443,
|
||||
"users": [
|
||||
{
|
||||
"id": "VLESSID",
|
||||
"encryption": "none",
|
||||
"level":0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "ws",
|
||||
"security": "tls",
|
||||
"tlsSettings": {
|
||||
"serverName": "VLESSCFWORKERNAME",
|
||||
"allowInsecure": true
|
||||
},
|
||||
"wsSettings": {
|
||||
"headers": {
|
||||
"Host": "VLESSCFWORKERNAME"
|
||||
},
|
||||
"path": "/?ed=2048"
|
||||
}
|
||||
},
|
||||
"tag":"vlesscf",
|
||||
"proxySettings": {
|
||||
"tag": "directfragment",
|
||||
"transportLayer": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "cdn-all.xn--b6gac.eu.org",
|
||||
"port": 443,
|
||||
"users": [
|
||||
{
|
||||
"id": "VLESSID",
|
||||
"encryption": "none",
|
||||
"level":0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "ws",
|
||||
"security": "tls",
|
||||
"tlsSettings": {
|
||||
"serverName": "VLESSCFWORKERNAME",
|
||||
"allowInsecure": true
|
||||
},
|
||||
"wsSettings": {
|
||||
"headers": {
|
||||
"Host": "VLESSCFWORKERNAME"
|
||||
},
|
||||
"path": "/?ed=2048"
|
||||
}
|
||||
},
|
||||
"tag":"vlesscfoverwarp",
|
||||
"proxySettings": {
|
||||
"tag": "directwarp",
|
||||
"transportLayer": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"tag": "direct"
|
||||
},
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"settings":{
|
||||
"fragment": {
|
||||
"packets": "tlshello",
|
||||
"length": "40-60",
|
||||
"interval": "30-50"
|
||||
}
|
||||
},
|
||||
"tag": "directfragment"
|
||||
}
|
||||
]
|
||||
,
|
||||
"inbounds":[
|
||||
{
|
||||
"listen": "0.0.0.0",
|
||||
"port": 10070,
|
||||
"protocol": "http",
|
||||
"settings": {
|
||||
"allowTransparent": true
|
||||
},
|
||||
"tag": "http"
|
||||
},
|
||||
{
|
||||
"port": 10071,
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"udp": true,
|
||||
"auth": "noauth"
|
||||
},
|
||||
"tag":"socks5"
|
||||
},
|
||||
{
|
||||
"port": 10072,
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"udp": true,
|
||||
"auth": "noauth"
|
||||
},
|
||||
"tag":"socks5overvless"
|
||||
},
|
||||
{
|
||||
"port": 10073,
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"udp": true,
|
||||
"auth": "noauth"
|
||||
},
|
||||
"tag":"socks5overwarpoverwarp"
|
||||
},
|
||||
{
|
||||
"port": 10074,
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"udp": true,
|
||||
"auth": "noauth"
|
||||
},
|
||||
"tag":"socks5overvlessoverwarp"
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"domainStrategy": "AsIs",
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"ip": [
|
||||
"127.0.0.1"
|
||||
],
|
||||
"outboundTag": "direct"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"socks5"
|
||||
],
|
||||
"outboundTag": "directwarp"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"socks5overvless"
|
||||
],
|
||||
"outboundTag": "vlesscf"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"http"
|
||||
],
|
||||
"outboundTag": "vlesscf"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"socks5overwarpoverwarp"
|
||||
],
|
||||
"outboundTag": "warpoverwarp"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"socks5overvlessoverwarp"
|
||||
],
|
||||
"outboundTag": "vlesscfoverwarp"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+1558
@@ -0,0 +1,1558 @@
|
||||
{
|
||||
"1": [
|
||||
{
|
||||
"key": "3",
|
||||
"name": "剧情",
|
||||
"value": [
|
||||
{
|
||||
"n": "喜剧",
|
||||
"v": "喜剧"
|
||||
},
|
||||
{
|
||||
"n": "爱情",
|
||||
"v": "爱情"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "动作",
|
||||
"v": "动作"
|
||||
},
|
||||
{
|
||||
"n": "科幻",
|
||||
"v": "科幻"
|
||||
},
|
||||
{
|
||||
"n": "剧情",
|
||||
"v": "剧情"
|
||||
},
|
||||
{
|
||||
"n": "战争",
|
||||
"v": "战争"
|
||||
},
|
||||
{
|
||||
"n": "警匪",
|
||||
"v": "警匪"
|
||||
},
|
||||
{
|
||||
"n": "犯罪",
|
||||
"v": "犯罪"
|
||||
},
|
||||
{
|
||||
"n": "动画",
|
||||
"v": "动画"
|
||||
},
|
||||
{
|
||||
"n": "奇幻",
|
||||
"v": "奇幻"
|
||||
},
|
||||
{
|
||||
"n": "武侠",
|
||||
"v": "武侠"
|
||||
},
|
||||
{
|
||||
"n": "冒险",
|
||||
"v": "冒险"
|
||||
},
|
||||
{
|
||||
"n": "枪战",
|
||||
"v": "枪战"
|
||||
},
|
||||
{
|
||||
"n": "恐怖",
|
||||
"v": "恐怖"
|
||||
},
|
||||
{
|
||||
"n": "悬疑",
|
||||
"v": "悬疑"
|
||||
},
|
||||
{
|
||||
"n": "惊悚",
|
||||
"v": "惊悚"
|
||||
},
|
||||
{
|
||||
"n": "经典",
|
||||
"v": "经典"
|
||||
},
|
||||
{
|
||||
"n": "青春",
|
||||
"v": "青春"
|
||||
},
|
||||
{
|
||||
"n": "文艺",
|
||||
"v": "文艺"
|
||||
},
|
||||
{
|
||||
"n": "古装",
|
||||
"v": "古装"
|
||||
},
|
||||
{
|
||||
"n": "历史",
|
||||
"v": "历史"
|
||||
},
|
||||
{
|
||||
"n": "微电影",
|
||||
"v": "微电影"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "1",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "大陆",
|
||||
"v": "大陆"
|
||||
},
|
||||
{
|
||||
"n": "香港",
|
||||
"v": "香港"
|
||||
},
|
||||
{
|
||||
"n": "台湾",
|
||||
"v": "台湾"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "印度",
|
||||
"v": "印度"
|
||||
},
|
||||
{
|
||||
"n": "意大利",
|
||||
"v": "意大利"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "加拿大",
|
||||
"v": "加拿大"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "11",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "字母",
|
||||
"value": [
|
||||
{
|
||||
"n": "A",
|
||||
"v": "A"
|
||||
},
|
||||
{
|
||||
"n": "B",
|
||||
"v": "B"
|
||||
},
|
||||
{
|
||||
"n": "C",
|
||||
"v": "C"
|
||||
},
|
||||
{
|
||||
"n": "D",
|
||||
"v": "D"
|
||||
},
|
||||
{
|
||||
"n": "E",
|
||||
"v": "E"
|
||||
},
|
||||
{
|
||||
"n": "F",
|
||||
"v": "F"
|
||||
},
|
||||
{
|
||||
"n": "G",
|
||||
"v": "G"
|
||||
},
|
||||
{
|
||||
"n": "H",
|
||||
"v": "H"
|
||||
},
|
||||
{
|
||||
"n": "I",
|
||||
"v": "I"
|
||||
},
|
||||
{
|
||||
"n": "J",
|
||||
"v": "J"
|
||||
},
|
||||
{
|
||||
"n": "K",
|
||||
"v": "K"
|
||||
},
|
||||
{
|
||||
"n": "L",
|
||||
"v": "L"
|
||||
},
|
||||
{
|
||||
"n": "M",
|
||||
"v": "M"
|
||||
},
|
||||
{
|
||||
"n": "N",
|
||||
"v": "N"
|
||||
},
|
||||
{
|
||||
"n": "O",
|
||||
"v": "O"
|
||||
},
|
||||
{
|
||||
"n": "P",
|
||||
"v": "P"
|
||||
},
|
||||
{
|
||||
"n": "Q",
|
||||
"v": "Q"
|
||||
},
|
||||
{
|
||||
"n": "R",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "S",
|
||||
"v": "S"
|
||||
},
|
||||
{
|
||||
"n": "T",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "U",
|
||||
"v": "U"
|
||||
},
|
||||
{
|
||||
"n": "V",
|
||||
"v": "V"
|
||||
},
|
||||
{
|
||||
"n": "W",
|
||||
"v": "W"
|
||||
},
|
||||
{
|
||||
"n": "X",
|
||||
"v": "X"
|
||||
},
|
||||
{
|
||||
"n": "Y",
|
||||
"v": "Y"
|
||||
},
|
||||
{
|
||||
"n": "Z",
|
||||
"v": "Z"
|
||||
},
|
||||
{
|
||||
"n": "0-9",
|
||||
"v": "0-9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"key": "1",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "大陆",
|
||||
"v": "大陆"
|
||||
},
|
||||
{
|
||||
"n": "香港",
|
||||
"v": "香港"
|
||||
},
|
||||
{
|
||||
"n": "台湾",
|
||||
"v": "台湾"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "印度",
|
||||
"v": "印度"
|
||||
},
|
||||
{
|
||||
"n": "意大利",
|
||||
"v": "意大利"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "加拿大",
|
||||
"v": "加拿大"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "4",
|
||||
"name": "语言",
|
||||
"value": [
|
||||
{
|
||||
"n": "国语",
|
||||
"v": "国语"
|
||||
},
|
||||
{
|
||||
"n": "英语",
|
||||
"v": "英语"
|
||||
},
|
||||
{
|
||||
"n": "粤语",
|
||||
"v": "粤语"
|
||||
},
|
||||
{
|
||||
"n": "闽南语",
|
||||
"v": "闽南语"
|
||||
},
|
||||
{
|
||||
"n": "韩语",
|
||||
"v": "韩语"
|
||||
},
|
||||
{
|
||||
"n": "日语",
|
||||
"v": "日语"
|
||||
},
|
||||
{
|
||||
"n": "法语",
|
||||
"v": "法语"
|
||||
},
|
||||
{
|
||||
"n": "德语",
|
||||
"v": "德语"
|
||||
},
|
||||
{
|
||||
"n": "其它",
|
||||
"v": "其它"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "11",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "字母",
|
||||
"value": [
|
||||
{
|
||||
"n": "A",
|
||||
"v": "A"
|
||||
},
|
||||
{
|
||||
"n": "B",
|
||||
"v": "B"
|
||||
},
|
||||
{
|
||||
"n": "C",
|
||||
"v": "C"
|
||||
},
|
||||
{
|
||||
"n": "D",
|
||||
"v": "D"
|
||||
},
|
||||
{
|
||||
"n": "E",
|
||||
"v": "E"
|
||||
},
|
||||
{
|
||||
"n": "F",
|
||||
"v": "F"
|
||||
},
|
||||
{
|
||||
"n": "G",
|
||||
"v": "G"
|
||||
},
|
||||
{
|
||||
"n": "H",
|
||||
"v": "H"
|
||||
},
|
||||
{
|
||||
"n": "I",
|
||||
"v": "I"
|
||||
},
|
||||
{
|
||||
"n": "J",
|
||||
"v": "J"
|
||||
},
|
||||
{
|
||||
"n": "K",
|
||||
"v": "K"
|
||||
},
|
||||
{
|
||||
"n": "L",
|
||||
"v": "L"
|
||||
},
|
||||
{
|
||||
"n": "M",
|
||||
"v": "M"
|
||||
},
|
||||
{
|
||||
"n": "N",
|
||||
"v": "N"
|
||||
},
|
||||
{
|
||||
"n": "O",
|
||||
"v": "O"
|
||||
},
|
||||
{
|
||||
"n": "P",
|
||||
"v": "P"
|
||||
},
|
||||
{
|
||||
"n": "Q",
|
||||
"v": "Q"
|
||||
},
|
||||
{
|
||||
"n": "R",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "S",
|
||||
"v": "S"
|
||||
},
|
||||
{
|
||||
"n": "T",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "U",
|
||||
"v": "U"
|
||||
},
|
||||
{
|
||||
"n": "V",
|
||||
"v": "V"
|
||||
},
|
||||
{
|
||||
"n": "W",
|
||||
"v": "W"
|
||||
},
|
||||
{
|
||||
"n": "X",
|
||||
"v": "X"
|
||||
},
|
||||
{
|
||||
"n": "Y",
|
||||
"v": "Y"
|
||||
},
|
||||
{
|
||||
"n": "Z",
|
||||
"v": "Z"
|
||||
},
|
||||
{
|
||||
"n": "0-9",
|
||||
"v": "0-9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3": [
|
||||
{
|
||||
"key": "1",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "大陆",
|
||||
"v": "大陆"
|
||||
},
|
||||
{
|
||||
"n": "香港",
|
||||
"v": "香港"
|
||||
},
|
||||
{
|
||||
"n": "台湾",
|
||||
"v": "台湾"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "印度",
|
||||
"v": "印度"
|
||||
},
|
||||
{
|
||||
"n": "意大利",
|
||||
"v": "意大利"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "加拿大",
|
||||
"v": "加拿大"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "4",
|
||||
"name": "语言",
|
||||
"value": [
|
||||
{
|
||||
"n": "国语",
|
||||
"v": "国语"
|
||||
},
|
||||
{
|
||||
"n": "英语",
|
||||
"v": "英语"
|
||||
},
|
||||
{
|
||||
"n": "粤语",
|
||||
"v": "粤语"
|
||||
},
|
||||
{
|
||||
"n": "闽南语",
|
||||
"v": "闽南语"
|
||||
},
|
||||
{
|
||||
"n": "韩语",
|
||||
"v": "韩语"
|
||||
},
|
||||
{
|
||||
"n": "日语",
|
||||
"v": "日语"
|
||||
},
|
||||
{
|
||||
"n": "法语",
|
||||
"v": "法语"
|
||||
},
|
||||
{
|
||||
"n": "德语",
|
||||
"v": "德语"
|
||||
},
|
||||
{
|
||||
"n": "其它",
|
||||
"v": "其它"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "11",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "字母",
|
||||
"value": [
|
||||
{
|
||||
"n": "A",
|
||||
"v": "A"
|
||||
},
|
||||
{
|
||||
"n": "B",
|
||||
"v": "B"
|
||||
},
|
||||
{
|
||||
"n": "C",
|
||||
"v": "C"
|
||||
},
|
||||
{
|
||||
"n": "D",
|
||||
"v": "D"
|
||||
},
|
||||
{
|
||||
"n": "E",
|
||||
"v": "E"
|
||||
},
|
||||
{
|
||||
"n": "F",
|
||||
"v": "F"
|
||||
},
|
||||
{
|
||||
"n": "G",
|
||||
"v": "G"
|
||||
},
|
||||
{
|
||||
"n": "H",
|
||||
"v": "H"
|
||||
},
|
||||
{
|
||||
"n": "I",
|
||||
"v": "I"
|
||||
},
|
||||
{
|
||||
"n": "J",
|
||||
"v": "J"
|
||||
},
|
||||
{
|
||||
"n": "K",
|
||||
"v": "K"
|
||||
},
|
||||
{
|
||||
"n": "L",
|
||||
"v": "L"
|
||||
},
|
||||
{
|
||||
"n": "M",
|
||||
"v": "M"
|
||||
},
|
||||
{
|
||||
"n": "N",
|
||||
"v": "N"
|
||||
},
|
||||
{
|
||||
"n": "O",
|
||||
"v": "O"
|
||||
},
|
||||
{
|
||||
"n": "P",
|
||||
"v": "P"
|
||||
},
|
||||
{
|
||||
"n": "Q",
|
||||
"v": "Q"
|
||||
},
|
||||
{
|
||||
"n": "R",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "S",
|
||||
"v": "S"
|
||||
},
|
||||
{
|
||||
"n": "T",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "U",
|
||||
"v": "U"
|
||||
},
|
||||
{
|
||||
"n": "V",
|
||||
"v": "V"
|
||||
},
|
||||
{
|
||||
"n": "W",
|
||||
"v": "W"
|
||||
},
|
||||
{
|
||||
"n": "X",
|
||||
"v": "X"
|
||||
},
|
||||
{
|
||||
"n": "Y",
|
||||
"v": "Y"
|
||||
},
|
||||
{
|
||||
"n": "Z",
|
||||
"v": "Z"
|
||||
},
|
||||
{
|
||||
"n": "0-9",
|
||||
"v": "0-9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4": [
|
||||
{
|
||||
"key": "1",
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"n": "大陆",
|
||||
"v": "大陆"
|
||||
},
|
||||
{
|
||||
"n": "香港",
|
||||
"v": "香港"
|
||||
},
|
||||
{
|
||||
"n": "台湾",
|
||||
"v": "台湾"
|
||||
},
|
||||
{
|
||||
"n": "美国",
|
||||
"v": "美国"
|
||||
},
|
||||
{
|
||||
"n": "法国",
|
||||
"v": "法国"
|
||||
},
|
||||
{
|
||||
"n": "英国",
|
||||
"v": "英国"
|
||||
},
|
||||
{
|
||||
"n": "日本",
|
||||
"v": "日本"
|
||||
},
|
||||
{
|
||||
"n": "韩国",
|
||||
"v": "韩国"
|
||||
},
|
||||
{
|
||||
"n": "德国",
|
||||
"v": "德国"
|
||||
},
|
||||
{
|
||||
"n": "泰国",
|
||||
"v": "泰国"
|
||||
},
|
||||
{
|
||||
"n": "印度",
|
||||
"v": "印度"
|
||||
},
|
||||
{
|
||||
"n": "意大利",
|
||||
"v": "意大利"
|
||||
},
|
||||
{
|
||||
"n": "西班牙",
|
||||
"v": "西班牙"
|
||||
},
|
||||
{
|
||||
"n": "加拿大",
|
||||
"v": "加拿大"
|
||||
},
|
||||
{
|
||||
"n": "其他",
|
||||
"v": "其他"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "4",
|
||||
"name": "语言",
|
||||
"value": [
|
||||
{
|
||||
"n": "国语",
|
||||
"v": "国语"
|
||||
},
|
||||
{
|
||||
"n": "英语",
|
||||
"v": "英语"
|
||||
},
|
||||
{
|
||||
"n": "粤语",
|
||||
"v": "粤语"
|
||||
},
|
||||
{
|
||||
"n": "闽南语",
|
||||
"v": "闽南语"
|
||||
},
|
||||
{
|
||||
"n": "韩语",
|
||||
"v": "韩语"
|
||||
},
|
||||
{
|
||||
"n": "日语",
|
||||
"v": "日语"
|
||||
},
|
||||
{
|
||||
"n": "法语",
|
||||
"v": "法语"
|
||||
},
|
||||
{
|
||||
"n": "德语",
|
||||
"v": "德语"
|
||||
},
|
||||
{
|
||||
"n": "其它",
|
||||
"v": "其它"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "11",
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"n": "2024",
|
||||
"v": "2024"
|
||||
},
|
||||
{
|
||||
"n": "2023",
|
||||
"v": "2023"
|
||||
},
|
||||
{
|
||||
"n": "2022",
|
||||
"v": "2022"
|
||||
},
|
||||
{
|
||||
"n": "2021",
|
||||
"v": "2021"
|
||||
},
|
||||
{
|
||||
"n": "2020",
|
||||
"v": "2020"
|
||||
},
|
||||
{
|
||||
"n": "2019",
|
||||
"v": "2019"
|
||||
},
|
||||
{
|
||||
"n": "2018",
|
||||
"v": "2018"
|
||||
},
|
||||
{
|
||||
"n": "2017",
|
||||
"v": "2017"
|
||||
},
|
||||
{
|
||||
"n": "2016",
|
||||
"v": "2016"
|
||||
},
|
||||
{
|
||||
"n": "2015",
|
||||
"v": "2015"
|
||||
},
|
||||
{
|
||||
"n": "2014",
|
||||
"v": "2014"
|
||||
},
|
||||
{
|
||||
"n": "2013",
|
||||
"v": "2013"
|
||||
},
|
||||
{
|
||||
"n": "2012",
|
||||
"v": "2012"
|
||||
},
|
||||
{
|
||||
"n": "2011",
|
||||
"v": "2011"
|
||||
},
|
||||
{
|
||||
"n": "2010",
|
||||
"v": "2010"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "5",
|
||||
"name": "字母",
|
||||
"value": [
|
||||
{
|
||||
"n": "A",
|
||||
"v": "A"
|
||||
},
|
||||
{
|
||||
"n": "B",
|
||||
"v": "B"
|
||||
},
|
||||
{
|
||||
"n": "C",
|
||||
"v": "C"
|
||||
},
|
||||
{
|
||||
"n": "D",
|
||||
"v": "D"
|
||||
},
|
||||
{
|
||||
"n": "E",
|
||||
"v": "E"
|
||||
},
|
||||
{
|
||||
"n": "F",
|
||||
"v": "F"
|
||||
},
|
||||
{
|
||||
"n": "G",
|
||||
"v": "G"
|
||||
},
|
||||
{
|
||||
"n": "H",
|
||||
"v": "H"
|
||||
},
|
||||
{
|
||||
"n": "I",
|
||||
"v": "I"
|
||||
},
|
||||
{
|
||||
"n": "J",
|
||||
"v": "J"
|
||||
},
|
||||
{
|
||||
"n": "K",
|
||||
"v": "K"
|
||||
},
|
||||
{
|
||||
"n": "L",
|
||||
"v": "L"
|
||||
},
|
||||
{
|
||||
"n": "M",
|
||||
"v": "M"
|
||||
},
|
||||
{
|
||||
"n": "N",
|
||||
"v": "N"
|
||||
},
|
||||
{
|
||||
"n": "O",
|
||||
"v": "O"
|
||||
},
|
||||
{
|
||||
"n": "P",
|
||||
"v": "P"
|
||||
},
|
||||
{
|
||||
"n": "Q",
|
||||
"v": "Q"
|
||||
},
|
||||
{
|
||||
"n": "R",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "S",
|
||||
"v": "S"
|
||||
},
|
||||
{
|
||||
"n": "T",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "U",
|
||||
"v": "U"
|
||||
},
|
||||
{
|
||||
"n": "V",
|
||||
"v": "V"
|
||||
},
|
||||
{
|
||||
"n": "W",
|
||||
"v": "W"
|
||||
},
|
||||
{
|
||||
"n": "X",
|
||||
"v": "X"
|
||||
},
|
||||
{
|
||||
"n": "Y",
|
||||
"v": "Y"
|
||||
},
|
||||
{
|
||||
"n": "Z",
|
||||
"v": "Z"
|
||||
},
|
||||
{
|
||||
"n": "0-9",
|
||||
"v": "0-9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"5": [
|
||||
{
|
||||
"key": "5",
|
||||
"name": "字母",
|
||||
"value": [
|
||||
{
|
||||
"n": "A",
|
||||
"v": "A"
|
||||
},
|
||||
{
|
||||
"n": "B",
|
||||
"v": "B"
|
||||
},
|
||||
{
|
||||
"n": "C",
|
||||
"v": "C"
|
||||
},
|
||||
{
|
||||
"n": "D",
|
||||
"v": "D"
|
||||
},
|
||||
{
|
||||
"n": "E",
|
||||
"v": "E"
|
||||
},
|
||||
{
|
||||
"n": "F",
|
||||
"v": "F"
|
||||
},
|
||||
{
|
||||
"n": "G",
|
||||
"v": "G"
|
||||
},
|
||||
{
|
||||
"n": "H",
|
||||
"v": "H"
|
||||
},
|
||||
{
|
||||
"n": "I",
|
||||
"v": "I"
|
||||
},
|
||||
{
|
||||
"n": "J",
|
||||
"v": "J"
|
||||
},
|
||||
{
|
||||
"n": "K",
|
||||
"v": "K"
|
||||
},
|
||||
{
|
||||
"n": "L",
|
||||
"v": "L"
|
||||
},
|
||||
{
|
||||
"n": "M",
|
||||
"v": "M"
|
||||
},
|
||||
{
|
||||
"n": "N",
|
||||
"v": "N"
|
||||
},
|
||||
{
|
||||
"n": "O",
|
||||
"v": "O"
|
||||
},
|
||||
{
|
||||
"n": "P",
|
||||
"v": "P"
|
||||
},
|
||||
{
|
||||
"n": "Q",
|
||||
"v": "Q"
|
||||
},
|
||||
{
|
||||
"n": "R",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "S",
|
||||
"v": "S"
|
||||
},
|
||||
{
|
||||
"n": "T",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "U",
|
||||
"v": "U"
|
||||
},
|
||||
{
|
||||
"n": "V",
|
||||
"v": "V"
|
||||
},
|
||||
{
|
||||
"n": "W",
|
||||
"v": "W"
|
||||
},
|
||||
{
|
||||
"n": "X",
|
||||
"v": "X"
|
||||
},
|
||||
{
|
||||
"n": "Y",
|
||||
"v": "Y"
|
||||
},
|
||||
{
|
||||
"n": "Z",
|
||||
"v": "Z"
|
||||
},
|
||||
{
|
||||
"n": "0-9",
|
||||
"v": "0-9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"6": [
|
||||
{
|
||||
"key": "5",
|
||||
"name": "字母",
|
||||
"value": [
|
||||
{
|
||||
"n": "A",
|
||||
"v": "A"
|
||||
},
|
||||
{
|
||||
"n": "B",
|
||||
"v": "B"
|
||||
},
|
||||
{
|
||||
"n": "C",
|
||||
"v": "C"
|
||||
},
|
||||
{
|
||||
"n": "D",
|
||||
"v": "D"
|
||||
},
|
||||
{
|
||||
"n": "E",
|
||||
"v": "E"
|
||||
},
|
||||
{
|
||||
"n": "F",
|
||||
"v": "F"
|
||||
},
|
||||
{
|
||||
"n": "G",
|
||||
"v": "G"
|
||||
},
|
||||
{
|
||||
"n": "H",
|
||||
"v": "H"
|
||||
},
|
||||
{
|
||||
"n": "I",
|
||||
"v": "I"
|
||||
},
|
||||
{
|
||||
"n": "J",
|
||||
"v": "J"
|
||||
},
|
||||
{
|
||||
"n": "K",
|
||||
"v": "K"
|
||||
},
|
||||
{
|
||||
"n": "L",
|
||||
"v": "L"
|
||||
},
|
||||
{
|
||||
"n": "M",
|
||||
"v": "M"
|
||||
},
|
||||
{
|
||||
"n": "N",
|
||||
"v": "N"
|
||||
},
|
||||
{
|
||||
"n": "O",
|
||||
"v": "O"
|
||||
},
|
||||
{
|
||||
"n": "P",
|
||||
"v": "P"
|
||||
},
|
||||
{
|
||||
"n": "Q",
|
||||
"v": "Q"
|
||||
},
|
||||
{
|
||||
"n": "R",
|
||||
"v": "R"
|
||||
},
|
||||
{
|
||||
"n": "S",
|
||||
"v": "S"
|
||||
},
|
||||
{
|
||||
"n": "T",
|
||||
"v": "T"
|
||||
},
|
||||
{
|
||||
"n": "U",
|
||||
"v": "U"
|
||||
},
|
||||
{
|
||||
"n": "V",
|
||||
"v": "V"
|
||||
},
|
||||
{
|
||||
"n": "W",
|
||||
"v": "W"
|
||||
},
|
||||
{
|
||||
"n": "X",
|
||||
"v": "X"
|
||||
},
|
||||
{
|
||||
"n": "Y",
|
||||
"v": "Y"
|
||||
},
|
||||
{
|
||||
"n": "Z",
|
||||
"v": "Z"
|
||||
},
|
||||
{
|
||||
"n": "0-9",
|
||||
"v": "0-9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "2",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "时间",
|
||||
"v": "time"
|
||||
},
|
||||
{
|
||||
"n": "人气",
|
||||
"v": "hits"
|
||||
},
|
||||
{
|
||||
"n": "评分",
|
||||
"v": "score"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Binary file not shown.
@@ -0,0 +1 @@
|
||||
61391714926a9636e7d75a81c7cd0a14
|
||||
@@ -0,0 +1,42 @@
|
||||
鳳凰資訊,http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=http://www.youtube.com/watch?v=if6yQq_JJyY
|
||||
凤凰卫视,http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=http://www.youtube.com/watch?v=dmDg7NfUoSw
|
||||
寰宇新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=B7Zp3d6xXWw
|
||||
鏡新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=5n0y6b0Q25o
|
||||
東森Live, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=R2iMq5LKXco
|
||||
中天新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=oIgbl7t0S_w
|
||||
中天新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/live/oIgbl7t0S_w?feature=share
|
||||
中天新聞2, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=WPfPjbOLNfE
|
||||
三立live, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=FoBfXvlOR6I
|
||||
三立inews, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=CKjSm5ZeehE
|
||||
三立NEWS+, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=oZdzzvxTfUY
|
||||
|
||||
TVBS新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=2mCSYvcfhtc
|
||||
TVBS NEWS LIVE, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=m_dhMSvUCIc
|
||||
民視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=ylYJSBUgaMA
|
||||
華視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=wM0g8EoUZ_E
|
||||
中視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=TCnaIE_SAtM
|
||||
台視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=xL0ch83RAK8
|
||||
|
||||
EBC東森財經, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=WHEPzbFA3hw
|
||||
三立財經, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=CKjSm5ZeehE
|
||||
NHK WORLD, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=f0lYkdA-Gtw
|
||||
NHK WORLD,https://nhkwlive-xjp.akamaized.net/hls/live/2003458/nhkwlive-xjp-en/index_1M.m3u8?zshijd
|
||||
|
||||
Sky News, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=9Auq9mYxFEE
|
||||
FRANCE 24, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=h3MuIUNCCzI
|
||||
ABC News, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=w_Ma8oQLmSM
|
||||
Euronews English, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=pykpO5kQJ98
|
||||
DW, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=pqabxBKzZ6M
|
||||
ANN News, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=coYw-eVU0Ks
|
||||
KBS KOREA, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=HnfpTMtfFk8
|
||||
|
||||
NBC NEW, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=0IUbD_4ytuo
|
||||
鳳凰資訊, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=sUISafvOieY
|
||||
凤凰卫视, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=dmDg7NfUoSw
|
||||
CCTV中文国际, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=9sE12tg3CmA
|
||||
东森财经股市, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=LbS-xQ67fos
|
||||
公視直播, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=4Uc00FPs27M
|
||||
KOMPASTV, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=4rmf-lk3ito
|
||||
东京新宿, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=DjdUEyjx8GM
|
||||
台灣地震監視, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=Owke6Quk7T0
|
||||
|
||||
+1248
@@ -0,0 +1,1248 @@
|
||||
{
|
||||
"recommend":"LIST:最新|推薦,官方頻道",
|
||||
"class":[
|
||||
{
|
||||
"type_id":"GETTRENDS",
|
||||
"type_name":"Youtube Trends"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:自媒體 We Media,老高與小茉 @laogao,脑洞乌托邦 @NDWTB,自说自话的总裁 @STBoss,纪实说 @C-Documentary,老肉雜談 @老肉雜談,李永樂老師 @TchLiyongle,滇西小哥 @dianxixiaoge,李子柒 Liziqi @cnliziqi,老饭骨 @LaoFanGu,小高姐的 Magic Ingredients @MagicIngredients,小穎美食 @XiaoYingFood,primitivetechnology9550 @primitivetechnology9550,Mr Beast@MrBeast,Airforceproud95 @Airforceproud95,TheGreatWar @TheGreatWar,Mark Rober @MarkRober,不良林,涌哥侃侃 @ygkkk,悟空的日常",
|
||||
"type_name":"自媒體"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:HDR,Girls HDR,Landscape HDR,Walk HDR",
|
||||
"type_name":"HDR"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:华语音乐,华语MV,点击率最高",
|
||||
"type_name":"音樂"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:综艺,芒果综艺,腾讯综艺,爱奇艺综艺,优酷综艺,卫视综艺",
|
||||
"type_name":"綜藝"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:紀錄片,历史纪录片,自然纪录片,宇宙纪录片",
|
||||
"type_name":"紀錄片"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:新闻 Live,体育直播,赛事直播",
|
||||
"type_name":"新聞直播"
|
||||
},
|
||||
{
|
||||
"type_id":"短劇",
|
||||
"type_name":"短劇"
|
||||
},
|
||||
{
|
||||
"type_id":"LIST:剧集,腾讯剧集,爱奇艺剧集,优酷剧集,芒果剧集,TVB",
|
||||
"type_name":"劇集"
|
||||
},
|
||||
{
|
||||
"type_id":"電影",
|
||||
"type_name":"電影"
|
||||
},
|
||||
{
|
||||
"type_id":"體育",
|
||||
"type_name":"體育"
|
||||
},
|
||||
{
|
||||
"type_id":"時尚潮流",
|
||||
"type_name":"時尚潮流"
|
||||
},
|
||||
{
|
||||
"type_id":"放松",
|
||||
"type_name":"放松"
|
||||
},
|
||||
{
|
||||
"type_id":"4K",
|
||||
"type_name":"4K"
|
||||
},
|
||||
{
|
||||
"type_id":"宇宙",
|
||||
"type_name":"科普知識"
|
||||
},
|
||||
{
|
||||
"type_id":"科技",
|
||||
"type_name":"科技"
|
||||
},
|
||||
{
|
||||
"type_id":"解說",
|
||||
"type_name":"解說"
|
||||
},
|
||||
{
|
||||
"type_id":"神秘",
|
||||
"type_name":"神秘"
|
||||
},
|
||||
{
|
||||
"type_id":"动画片",
|
||||
"type_name":"动画片"
|
||||
}
|
||||
],
|
||||
"filters":{
|
||||
"短劇":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"短劇",
|
||||
"value":[
|
||||
{"n":"抖音","v":"抖音 短剧"},
|
||||
{"n":"快手","v":"快手 短剧"},
|
||||
{"n":"大陆","v":"大陆 短剧"},
|
||||
{"n":"香港","v":"香港 短剧"},
|
||||
{"n":"澳門","v":"澳門 短剧"},
|
||||
{"n":"台湾","v":"台湾 短剧"},
|
||||
{"n":"新加坡","v":"新加坡 短剧"},
|
||||
{"n":"馬來西亞","v":"馬來西亞 短剧"},
|
||||
{"n":"泰國","v":"泰國 短剧"},
|
||||
{"n":"越南","v":"越南 短剧"},
|
||||
{"n":"印度","v":"印度 短剧"},
|
||||
{"n":"韩国","v":"韩国 短剧"},
|
||||
{"n":"日本","v":"日本 短剧"},
|
||||
{"n":"欧美","v":"欧美 短剧"},
|
||||
{"n":"腾讯","v":"腾讯 短剧"},
|
||||
{"n":"爱奇艺","v":"爱奇艺 短剧"},
|
||||
{"n":"优酷","v":"优酷 短剧"},
|
||||
{"n":"芒果","v":"芒果TV 短剧"},
|
||||
{"n":"搜狐","v":"搜狐 短剧"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"短劇",
|
||||
"value":[
|
||||
{"n":"都市","v":"@Urbanshort-TV 都市 短劇"},
|
||||
{"n":"爱情","v":"爱情 短劇"},
|
||||
{"n":"复仇","v":"复仇 短劇"},
|
||||
{"n":"穿越","v":"穿越 短劇"},
|
||||
{"n":"喜剧","v":"喜剧 短劇"},
|
||||
{"n":"奇幻","v":"奇幻 短劇"},
|
||||
{"n":"九酱爱追剧","v":"@NineSauceDramaTV"},
|
||||
{"n":"百万好剧场","v":"@1-pw5ox"},
|
||||
{"n":"咖啡追剧","v":"@@coffeedrama605"},
|
||||
{"n":"斗罗短剧","v":"@DouluoDrama123 斗羅短劇"},
|
||||
{"n":"嘟嘟剧场","v":"@DUDUJUCHANG"},
|
||||
{"n":"牛牛短剧","v":"@niuniuduanju"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"動畫片":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默认中文国漫","v":"國漫 劇集 3D"},
|
||||
{"n":"默认","v":"animation"},
|
||||
{"n":"儿童早教","v":"儿童早教"},
|
||||
{"n":"儿童歌曲","v":"儿童歌曲"},
|
||||
{"n":"儿童音乐","v":"儿童音乐"},
|
||||
{"n":"儿童绘画","v":"儿童绘画"},
|
||||
{"n":"宝宝巴士","v":"宝宝巴士"},
|
||||
{"n":"儿歌多多","v":"儿歌多多"},
|
||||
{"n":"儿童英语启蒙","v":"儿童英语启蒙"},
|
||||
{"n":"儿童启蒙故事","v":"儿童启蒙故事"},
|
||||
{"n":"儿童安全教育","v":"儿童安全教育"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"默认英文国漫","v":"3D Chinese cartoon"},
|
||||
{"n":"小猪佩奇","v":"@PeppaPigChineseOfficial 小猪佩奇 中文官方 - Peppa Pig"},
|
||||
{"n":"CoComelon","v":"@CoComelon"},
|
||||
{"n":"合集","v":"Anime ENG SUB 合集"},
|
||||
{"n":"国漫社","v":"@Animation 次元 苍穹动漫 PP看动漫 公馆"},
|
||||
{"n":"国漫工厂","v":"@3DGuoman SUB"},
|
||||
{"n":"阅文动漫","v":"@yuewenanimation SUB"},
|
||||
{"n":"哔哩","v":"@madebybilibili 哔哩动漫"},
|
||||
{"n":"腾讯","v":"@TencentVideoAnimation SUB"},
|
||||
{"n":"优酷","v":"@youkuanimation 优酷动漫"},
|
||||
{"n":"爱奇艺","v":"@iQIYIAnime 爱奇艺动漫"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"LIST:新闻 Live,体育直播,赛事直播":[
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默认","v":"fully YouTube 新聞 Live"},
|
||||
{"n":"赛事","v":"直播 赛事"},
|
||||
{"n":"CCTV","v":"直播 CCTV"},
|
||||
{"n":"港台","v":"直播 港台"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"Live","v":"live"},
|
||||
{"n":"CNN","v":"live CNN"},
|
||||
{"n":"BBC","v":"live BBC"},
|
||||
{"n":"games","v":"live games"},
|
||||
{"n":"印度電視台","v":"@SETIndia"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默认","v":"News"},
|
||||
{"n":"时政","v":"时政 新闻"},
|
||||
{"n":"体育","v":"体育 新闻"},
|
||||
{"n":"娱乐","v":"娱乐 新闻"},
|
||||
{"n":"大陆","v":"大陆 新闻"},
|
||||
{"n":"港台","v":"港台 新闻"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"科技與發展","v":"閱兵 奧運會 航母 航空母艦 潛水艇 核武器 坦克 武器 卫星 火箭 輪船 飛機 飛碟"},
|
||||
{"n":"法治与社会","v":"法治 法制 社会 卖淫 淫秽 污蔑 赌博 毒品 裸聊 诈骗 拐卖 强奸 勒索"},
|
||||
{"n":"News","v":"News"},
|
||||
{"n":"CNN","v":"CNN news"},
|
||||
{"n":"BBC","v":"BBC news"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"LIST:剧集,腾讯剧集,爱奇艺剧集,优酷剧集,芒果剧集,TVB":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默認","v":""},
|
||||
{"n":"華語熱播電視劇官方頻道","v":"華語熱播電視劇官方頻道"},
|
||||
{"n":"粵劇","v":"粵劇 劇集"},
|
||||
{"n":"TVB","v":"@TVB"},
|
||||
{"n":"国剧放映社","v":"国剧放映社"},
|
||||
{"n":"大陆","v":"大陆 剧集"},
|
||||
{"n":"腾讯","v":"腾讯 剧集"},
|
||||
{"n":"爱奇艺","v":"爱奇艺 剧集"},
|
||||
{"n":"优酷","v":"优酷 剧集"},
|
||||
{"n":"芒果","v":"芒果TV 剧集"},
|
||||
{"n":"搜狐","v":"搜狐 剧集"},
|
||||
{"n":"华数","v":"华数 剧集"},
|
||||
{"n":"港台","v":"港台 剧集"},
|
||||
{"n":"美国","v":"美国 Full Episode 完整剧集"},
|
||||
{"n":"Netflix","v":"Netflix Full Episode 完整剧集"},
|
||||
{"n":"Disney","v":"disney Full Episode 完整剧集"},
|
||||
{"n":"Apple","v":"apple Full Episode 完整剧集"},
|
||||
{"n":"Amazon","v":"amazon Full Episode 完整剧集"},
|
||||
{"n":"HBO","v":"hbo Full Episode 完整剧集"},
|
||||
{"n":"韩国","v":"韩国 剧集"},
|
||||
{"n":"日本","v":"日本 剧集"},
|
||||
{"n":"英国","v":"英国 Full Episode 完整剧集"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"Drama","v":"Full Episode drama"},
|
||||
{"n":"US","v":"drama Full Episode US"},
|
||||
{"n":"Netflix","v":"netflix Full Episode drama"},
|
||||
{"n":"Disney","v":"disney Full Episode drama"},
|
||||
{"n":"Apple","v":"apple Full Episode drama"},
|
||||
{"n":"Amazon","v":"amazon Full Episode drama"},
|
||||
{"n":"HBO","v":"hbo Full Episode drama"},
|
||||
{"n":"Korea","v":"korea Full Episode drama"},
|
||||
{"n":"Japan","v":"japan Full Episode drama"},
|
||||
{"n":"UK","v":"uk Full Episode drama"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"電影":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默認","v":""},
|
||||
{"n":"大陆","v":"大陆 电影"},
|
||||
{"n":"腾讯","v":"腾讯 电影"},
|
||||
{"n":"爱奇艺","v":"爱奇艺 电影"},
|
||||
{"n":"优酷","v":"优酷 电影"},
|
||||
{"n":"芒果","v":"芒果TV 电影"},
|
||||
{"n":"搜狐","v":"搜狐 电影"},
|
||||
{"n":"港台","v":"港台 电影"},
|
||||
{"n":"美国","v":"美国 电影"},
|
||||
{"n":"Netflix","v":"netflix Full movie 电影"},
|
||||
{"n":"Disney","v":"disney Full movie 电影"},
|
||||
{"n":"Apple","v":"apple Full movie 电影"},
|
||||
{"n":"Amazon","v":"amazon Full movie 电影"},
|
||||
{"n":"HBO","v":"hbo Full movie 电影"},
|
||||
{"n":"韩国","v":"韩国 Full movie 电影"},
|
||||
{"n":"日本","v":"日本 Full movie 电影"},
|
||||
{"n":"英国","v":"英国 Full movie 电影"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"movie","v":"youtube movies Full movie"},
|
||||
{"n":"US","v":"us Full movie movie"},
|
||||
{"n":"Netflix movie","v":"netflix Full movie movie"},
|
||||
{"n":"Disney","v":"disney Full movie movie"},
|
||||
{"n":"Apple","v":"apple Full movie movie"},
|
||||
{"n":"Amazon","v":"amazon Full movie movie"},
|
||||
{"n":"HBO","v":"hbo Full movie movie"},
|
||||
{"n":"Koera","v":"korea Full movie movie"},
|
||||
{"n":"Japan","v":"japan Full movie movie"},
|
||||
{"n":"UK","v":"uk Full movie movie"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"LIST:综艺,芒果综艺,腾讯综艺,爱奇艺综艺,优酷综艺,卫视综艺":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默认","v":"Variety show"},
|
||||
{"n":"大陆","v":"大陆 综艺"},
|
||||
{"n":"芒果","v":"芒果 综艺"},
|
||||
{"n":"腾讯","v":"腾讯 综艺"},
|
||||
{"n":"爱奇艺","v":"爱奇艺 综艺"},
|
||||
{"n":"优酷","v":"优酷 综艺"},
|
||||
{"n":"港台","v":"港台 综艺"},
|
||||
{"n":"美国","v":"美国 综艺"},
|
||||
{"n":"Netflix","v":"Netflix 综艺"},
|
||||
{"n":"韩国","v":"CRAVITY on Variety Shows 韩国 综艺"},
|
||||
{"n":"日本","v":"日本 综艺"},
|
||||
{"n":"英国","v":"英国 综艺"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"Variety","v":"variety"},
|
||||
{"n":"Netflix variety","v":"netflix variety"},
|
||||
{"n":"Korea","v":"korea variety"},
|
||||
{"n":"Japan","v":"japan variety"},
|
||||
{"n":"UK","v":"uk variety"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"小品",
|
||||
"value":[
|
||||
{"n":"春晚小品","v":"春晚小品"},
|
||||
{"n":"开心麻花","v":"开心麻花"},
|
||||
{"n":"屌丝男士","v":"屌丝男士"},
|
||||
{"n":"喜剧综艺","v":"喜剧综艺"},
|
||||
{"n":"单口","v":"单口 相声"},
|
||||
{"n":"群口","v":"群口 相声"},
|
||||
{"n":"德云社","v":"德云社"},
|
||||
{"n":"青曲社","v":"青曲社"},
|
||||
{"n":"郭德纲","v":"郭德纲"},
|
||||
{"n":"岳云鹏","v":"岳云鹏"},
|
||||
{"n":"曹云金","v":"曹云金"},
|
||||
{"n":"评书","v":"评书"},
|
||||
{"n":"小曲","v":"小曲"},
|
||||
{"n":"赵本山","v":"赵本山"},
|
||||
{"n":"陈佩斯","v":"陈佩斯"},
|
||||
{"n":"冯巩","v":"冯巩"},
|
||||
{"n":"宋小宝","v":"宋小宝"},
|
||||
{"n":"赵丽蓉","v":"赵丽蓉"},
|
||||
{"n":"潘长江","v":"潘长江"},
|
||||
{"n":"郭冬临","v":"郭冬临"},
|
||||
{"n":"严顺开","v":"严顺开"},
|
||||
{"n":"文松","v":"文松"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"LIST:紀錄片,历史纪录片,自然纪录片,宇宙纪录片":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"地區🎶排序","v":"歷史記錄片 地球記錄片 宇宙記錄片 海洋記錄片 戰爭記錄片 大自然生存記錄片"},
|
||||
{"n":"默认","v":"documentary"},
|
||||
{"n":"CCTV纪录片","v":"CCTV 纪录片"},
|
||||
{"n":"BBC纪录片","v":"BBC 纪录片"},
|
||||
{"n":"国家地理","v":"国家地理 纪录片"},
|
||||
{"n":"Netflix纪录片","v":"netflix 纪录片"},
|
||||
{"n":"BBC","v":"BBC documentary"},
|
||||
{"n":"National Geographic","v":"National Geographic documentary"},
|
||||
{"n":"Netflix","v":"netflix documentary"},
|
||||
{"n":"历史","v":"历史 纪录片"},
|
||||
{"n":"野性","v":"野性 纪录片"},
|
||||
{"n":"地球","v":"地球 纪录片"},
|
||||
{"n":"宇宙","v":"宇宙 纪录片"},
|
||||
{"n":"海洋","v":"海洋 纪录片"},
|
||||
{"n":"人文","v":"人文 纪录片"},
|
||||
{"n":"战争","v":"战争 纪录片"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"History","v":"Full history documentary"},
|
||||
{"n":"WILD","v":"Full wild documentary"},
|
||||
{"n":"Earch","v":"Full earth documentary"},
|
||||
{"n":"Universe","v":"Full universe documentary"},
|
||||
{"n":"Oceans","v":"Full oceans documentary"},
|
||||
{"n":"Humanism","v":"Full humanism documentary"},
|
||||
{"n":"Wars","v":"Full war documentary"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"LIST:华语音乐,华语MV,点击率最高":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"地區",
|
||||
"value":[
|
||||
{"n":"華語音樂","v":"華語音樂"},
|
||||
{"n":"華語MV","v":"華語MV"},
|
||||
{"n":"环球视听","v":"环球视听1980 @RippleOfficialEvent"},
|
||||
{"n":"YouTube 點閱率最高","v":"YouTube 點閱率最高觀看次數最多華語歌曲"},
|
||||
{"n":"海外抖音","v":"TikTok 翻唱 抖音 音樂"},
|
||||
{"n":"粵語","v":"粵語 音樂"},
|
||||
{"n":"國語","v":"國語 音樂"},
|
||||
{"n":"大陆","v":"大陆 音乐"},
|
||||
{"n":"香港","v":"香港 音乐"},
|
||||
{"n":"台湾","v":"台湾 音乐"},
|
||||
{"n":"新加坡","v":"新加坡 音乐"},
|
||||
{"n":"馬來西亞","v":"馬來西亞 音乐"},
|
||||
{"n":"泰國","v":"泰國 音乐"},
|
||||
{"n":"越南","v":"越南 音乐"},
|
||||
{"n":"印度","v":"印度 音乐"},
|
||||
{"n":"韩国","v":"韩国 音乐"},
|
||||
{"n":"日本","v":"日本 音乐"},
|
||||
{"n":"欧美","v":"欧美 音乐"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"愛好",
|
||||
"value":[
|
||||
{"n":"舞曲","v":"慢搖 夜店 低音 女聲 "},
|
||||
{"n":"80-90","v":"80 90 音樂"},
|
||||
{"n":"人聲","v":"人聲 音樂"},
|
||||
{"n":"A8製造","v":"A8製造 工體音樂"},
|
||||
{"n":"硬歌","v":"深水炸彈 音樂"},
|
||||
{"n":"失傳已久","v":"嗨音雷虎 失傳 嗨音會所 音樂"},
|
||||
{"n":"重低音DJ","v":"3D 8D 慢搖 重低音 音樂"},
|
||||
{"n":"車載舞曲","v":"車載慢搖DJ歌曲串燒 深水炸彈DJ歌曲串燒 越南鼓DJ歌曲串燒 音樂"},
|
||||
{"n":"超級女聲","v":"超級女聲"},
|
||||
{"n":"tseries","v":"@tseries"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"歌手",
|
||||
"value":[
|
||||
{"n":"邁克爾傑克遜","v":"邁克爾傑克遜 演唱會,巡演 音樂"},
|
||||
{"n":"張瑋伽","v":"張瑋伽 演唱會 巡演 音樂"},
|
||||
{"n":"孫露","v":"孫露 演唱會 巡演 音樂"},
|
||||
{"n":"鳳凰傳奇","v":"鳳凰傳奇 演 巡演 音樂"},
|
||||
{"n":"龍梅子","v":"龍梅子 演唱會 巡演 音樂"},
|
||||
{"n":"刀郎","v":"刀郎 演唱會 巡演 音樂"},
|
||||
{"n":"S.H.E","v":"S.H.E 演唱會 巡演 音樂"},
|
||||
{"n":"慕容曉曉","v":"慕容曉曉 演唱會 巡演 音樂"},
|
||||
{"n":"東方紅豔","v":"東方紅豔 演唱會 巡演 音樂"},
|
||||
{"n":"孟庭葦","v":"孟庭葦 演唱會 巡演 音樂"},
|
||||
{"n":"斯琴高麗","v":"斯琴高麗 演唱會 巡演 音樂"},
|
||||
{"n":"程響","v":"程響 演唱會 巡演 音樂"},
|
||||
{"n":"蔣雪兒","v":"蔣雪兒 演唱會 巡演 音樂"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"體育":[
|
||||
{
|
||||
"key":"time",
|
||||
"name":"時間",
|
||||
"value":[
|
||||
{"n":"時間全選","v":""},
|
||||
{"n":"2024","v":"2024"},
|
||||
{"n":"2023","v":"2023"},
|
||||
{"n":"2022","v":"2022"},
|
||||
{"n":"2021","v":"2021"},
|
||||
{"n":"2020","v":"2020"},
|
||||
{"n":"2019","v":"2019"},
|
||||
{"n":"2018","v":"2018"},
|
||||
{"n":"2017","v":"2017"},
|
||||
{"n":"2016","v":"2016"},
|
||||
{"n":"2015","v":"2015"},
|
||||
{"n":"2014","v":"2014"},
|
||||
{"n":"2013","v":"2013"},
|
||||
{"n":"2012","v":"2012"},
|
||||
{"n":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"2009","v":"2009"},
|
||||
{"n":"2008","v":"2008"},
|
||||
{"n":"2007","v":"2007"},
|
||||
{"n":"2006","v":"2006"},
|
||||
{"n":"2005","v":"2005"},
|
||||
{"n":"2004","v":"2004"},
|
||||
{"n":"2003","v":"2003"},
|
||||
{"n":"2002","v":"2002"},
|
||||
{"n":"2001","v":"2001"},
|
||||
{"n":"2000","v":"2000"},
|
||||
{"n":"1999","v":"1999"},
|
||||
{"n":"1998","v":"1998"},
|
||||
{"n":"1997","v":"1997"},
|
||||
{"n":"1996","v":"1996"},
|
||||
{"n":"1995","v":"1995"},
|
||||
{"n":"1994","v":"1994"},
|
||||
{"n":"1993","v":"1993"},
|
||||
{"n":"1992","v":"1992"},
|
||||
{"n":"1991","v":"1991"},
|
||||
{"n":"1990","v":"1990"},
|
||||
{"n":"1989","v":"1989"},
|
||||
{"n":"1988","v":"1988"},
|
||||
{"n":"1987","v":"1987"},
|
||||
{"n":"1986","v":"1986"},
|
||||
{"n":"1985","v":"1985"},
|
||||
{"n":"1984","v":"1984"},
|
||||
{"n":"1983","v":"1983"},
|
||||
{"n":"1982","v":"1982"},
|
||||
{"n":"1981","v":"1981"},
|
||||
{"n":"1980","v":"1980"},
|
||||
{"n":"1979","v":"1979"},
|
||||
{"n":"1978","v":"1978"},
|
||||
{"n":"1977","v":"1977"},
|
||||
{"n":"1976","v":"1976"},
|
||||
{"n":"1975","v":"1975"},
|
||||
{"n":"1974","v":"1974"},
|
||||
{"n":"1973","v":"1973"},
|
||||
{"n":"1972","v":"1972"},
|
||||
{"n":"1971","v":"1971"},
|
||||
{"n":"1970","v":"1970"},
|
||||
{"n":"1969","v":"1969"},
|
||||
{"n":"1968","v":"1968"},
|
||||
{"n":"1967","v":"1967"},
|
||||
{"n":"1966","v":"1966"},
|
||||
{"n":"1965","v":"1965"},
|
||||
{"n":"1964","v":"1964"},
|
||||
{"n":"1963","v":"1963"},
|
||||
{"n":"1962","v":"1962"},
|
||||
{"n":"1961","v":"1961"},
|
||||
{"n":"1960","v":"1960"},
|
||||
{"n":"1959","v":"1959"},
|
||||
{"n":"1958","v":"1958"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"中文",
|
||||
"value":[
|
||||
{"n":"默认","v":""},
|
||||
{"n":"體育直播","v":"体育直播"},
|
||||
{"n":"體育赛事","v":"体育赛事"},
|
||||
{"n":"足球比賽","v":"足球賽事"},
|
||||
{"n":"篮球比賽","v":"篮球賽事"},
|
||||
{"n":"极限運動","v":"极限運動"},
|
||||
{"n":"室内運動","v":"室内运动"},
|
||||
{"n":"户外運動","v":"户外运动"},
|
||||
{"n":"健身運動","v":"健身運動"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"Live","v":"live sports"},
|
||||
{"n":"Games","v":"live games"},
|
||||
{"n":"Soccer","v":"live soccer"},
|
||||
{"n":"NBA","v":"NBA"},
|
||||
{"n":"Extreme","v":"extreme sports"},
|
||||
{"n":"InDoor","v":"indoor sports"},
|
||||
{"n":"OutDoor","v":"outdoor sports"},
|
||||
{"n":"Workout","v":"workout"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"體育",
|
||||
"value":[
|
||||
{"n":"女足港場","v":"女足港場 @Hong KongWomensStadium"},
|
||||
{"n":"全國校運動會","v":"全國大專 校院運動會 全中運 女子組賽事 全國中等 學校運動會"},
|
||||
{"n":"女中儀隊","v":"北一女中樂儀旗隊永續發展協會 北一女中家長會樂儀旗家長後援會 北一女中儀隊校友隊 台灣 学校运动会 景美女中儀隊 北一女樂儀旗隊 full樂儀隊 "},
|
||||
{"n":"校園熱舞","v":"full 校園熱舞 開南熱無 開南大學課外活動組 女生熱舞社 南寶熱舞社 寶踐熱舞社 NTDC 熱舞社 STUST"},
|
||||
{"n":"红星体育官方频道","v":"红星体育官方频道【高清直播】"},
|
||||
{"n":"中國體育比賽傳奇","v":"中國體育比賽傳奇"},
|
||||
{"n":"愛爾達體育家族","v":"愛爾達體育家族 ELTA Sports"},
|
||||
{"n":"公視體育","v":"公視體育"},
|
||||
{"n":"體育之光","v":"體育之光"},
|
||||
{"n":"偶然體育賽事","v":"偶然體育賽事"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"時尚潮流":[
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"時裝秀",
|
||||
"value":[
|
||||
{"n":"街舞","v":"脫衣舞 丁字褲 街舞 太空步 機械舞 舞 裸體舞蹈 霹靂舞 魔性舞蹈 鬼步舞 木偶舞 女性藝術舞蹈"},
|
||||
{"n":"時尚走秀","v":"T台走秀 lingerie show"},
|
||||
{"n":"時裝秀","v":"hdr ASM lingerieTV 東京ファッションショー 下着ショー"},
|
||||
{"n":"潮流秀","v":"FASHION IN UHD"},
|
||||
{"n":"時裝模特","v":"FASHION Runway"},
|
||||
{"n":"模特","v":"比基尼 泳裝 頂級車模 空姐 寫真 Car model Stewardess Portrait"},
|
||||
{"n":"裸体秀","v":"hdr 人體藝術 裸体秀 Nude show"},
|
||||
{"n":"無限亂鬥","v":"hdr 廟會秀 無限HD 公廟 鋼管舞 脫衣舞 舞女 清純 寫真"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"小姐姐",
|
||||
"value":[
|
||||
{"n":"小姐姐超清","v":"小姐姐超清"},
|
||||
{"n":"国内小姐姐","v":"快手模特 抖音模特 国内小姐姐"},
|
||||
{"n":"韩国小姐姐","v":"韩国小姐姐"},
|
||||
{"n":"日本小姐姐","v":"日本小姐姐"},
|
||||
{"n":"俄罗斯小姐姐","v":"俄罗斯小姐姐"},
|
||||
{"n":"混血小姐姐","v":"混血小姐姐"},
|
||||
{"n":"越南小姐姐","v":"越南小姐姐"},
|
||||
{"n":"Al小姐姐","v":"Al美女超清"},
|
||||
{"n":"抖音热门小姐姐","v":"抖音热门小姐姐"},
|
||||
{"n":"快手热门美女","v":"快手热门美女"},
|
||||
{"n":"打碟小姐姐","v":"打碟小姐姐"},
|
||||
{"n":"冲浪小姐姐","v":"冲浪小姐姐"},
|
||||
{"n":"蹦迪小姐姐","v":"蹦迪小姐姐"},
|
||||
{"n":"艺校小姐姐","v":"艺校小姐姐"},
|
||||
{"n":"环球小姐","v":"环球小姐"},
|
||||
{"n":"泰国人妖","v":"泰国人妖"},
|
||||
{"n":"人间胸器","v":"人间胸器"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"English",
|
||||
"value":[
|
||||
{"n":"sexy Miss","v":"sexy Miss"},
|
||||
{"n":"Hot sexy Girl","v":"Hot sexy Girl"},
|
||||
{"n":"Korean Girl","v":"Korean sexy Girl"},
|
||||
{"n":"Japanese Girl","v":"Japanese sexy Girl"},
|
||||
{"n":"Russian Girl","v":"Russian sexy Girl"},
|
||||
{"n":"Vietnamese Girl","v":"Vietnamese sexy Girl"},
|
||||
{"n":"AI Girl","v":"AI Girl"},
|
||||
{"n":"TikTok Hot Siste","v":"TikTok Hot sexy Girl"},
|
||||
{"n":"Cute Girl","v":"sexy Cute Girl"},
|
||||
{"n":"Girl Dj","v":"sexy Girl Dj"},
|
||||
{"n":"Girl Surfer","v":"sexy Girl Surfer"},
|
||||
{"n":"Dance Girl","v":"Dance sexy Girl"},
|
||||
{"n":"Miss Universe","v":"Miss Universe"},
|
||||
{"n":"Thai Shemale","v":"Thai Shemale"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"解說":[
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"頻道主",
|
||||
"value":[
|
||||
{"n":"宇哥侃故事","v":"@yuge"},
|
||||
{"n":"零度解说","v":"@lingdujieshuo"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"LIST:HDR,Girls HDR,Landscape HDR,Walk HDR":[
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"風景",
|
||||
"value":[
|
||||
{"n":"運動","v":"GoPro 女翼裝飛行 極限自行車運動"},
|
||||
{"n":"風景","v":"hdr 大自然"},
|
||||
{"n":"Links TV頻道主","v":"@linksphotograph Links TV hdr"},
|
||||
{"n":"放鬆","v":"hdr 放鬆"},
|
||||
{"n":"動物世界","v":"hdr Carnivorous Animals 動物世界"},
|
||||
{"n":"深海世界","v":"hdr Invertebrate Fish 深海世界"},
|
||||
{"n":"飛禽走獸","v":"hdr Birds of Prey Columbiform Birds Passerine Birds"},
|
||||
{"n":"生物世界","v":"hdr Amphibians Reptiles 生物世界"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Full YouTube":[
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"頻道主",
|
||||
"value":[
|
||||
{"n":"李子柒","v":"李子柒 Liziqi @cnliziqi"},
|
||||
{"n":"滇西小哥","v":"滇西小哥 @dianxixiaoge"},
|
||||
{"n":"老高與小茉","v":"老高與小茉 @laogao"},
|
||||
{"n":"李永樂老師","v":"李永樂老師 @TchLiyongle"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"美食頻道主",
|
||||
"value":[
|
||||
{"n":"美食作家王刚","v":"美食作家王刚 @chefwang"},
|
||||
{"n":"小高姐的 Magic Ingredients","v":"小高姐的 Magic Ingredients @MagicIngredients"},
|
||||
{"n":"小穎美食","v":"小穎美食 @XiaoYingFood"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"野外頻道主",
|
||||
"value":[
|
||||
{"n":"野外求生","v":"primitivetechnology9550 @primitivetechnology9550"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"科普頻道主",
|
||||
"value":[
|
||||
{"n":"科普","v":"Mr Beast@MrBeast"},
|
||||
{"n":"航天大學","v":"Airforceproud95 @Airforceproud95"},
|
||||
{"n":"世界大戰","v":"TheGreatWar @TheGreatWar"},
|
||||
{"n":"MarkRober","v":"Mark Rober @MarkRober"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"教材",
|
||||
"value":[
|
||||
{"n":"不良林","v":"不良林"},
|
||||
{"n":"涌哥侃侃","v":"涌哥侃侃 @ygkkk"},
|
||||
{"n":"悟空的日常","v":"悟空的日常"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"宇宙":[
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"科普知識",
|
||||
"value":[
|
||||
{"n":"宇宙","v":"光年 黑洞 銀河系 空間站 太空技術"},
|
||||
{"n":"粒子","v":"空間粒子 宇宙磁場 四維空間 元素 量子 光波 光源 靈魂"},
|
||||
{"n":"靠蒙","v":"microorganism"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key":"tid",
|
||||
"name":"歷史科普",
|
||||
"value":[
|
||||
{"n":"世界大戰","v":"世界大戰 二戰 日侵 八國聯軍"},
|
||||
{"n":"人物","v":"古代名人 歷史名人 歷代祖先"},
|
||||
{"n":"生物進化史","v":"人類進化 微生物進化 動物進化 地球進化"},
|
||||
{"n":"靠蒙","v":"歷史 History"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jx":0,
|
||||
"parse":0
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"20": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "喜剧","v": "喜剧"}, {"n": "爱情","v": "爱情"}, {"n": "恐怖","v": "恐怖"}, {"n": "动作","v": "动作"}, {"n": "科幻","v": "科幻"}, {"n": "剧情","v": "剧情"}, {"n": "战争","v": "战争"}, {"n": "警匪","v": "警匪"}, {"n": "犯罪","v": "犯罪"}, {"n": "武侠","v": "武侠"}, {"n": "冒险","v": "冒险"}, {"n": "枪战","v": "枪战"}, {"n": "恐怖","v": "恐怖"}, {"n": "悬疑","v": "悬疑"}, {"n": "惊悚","v": "惊悚"}, {"n": "青春","v": "青春"}, {"n": "文艺","v": "文艺"}, {"n": "古装","v": "古装"}, {"n": "历史","v": "历史"}, {"n": "运动","v": "运动"}, {"n": "农村","v": "农村"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "印度","v": "印度"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"21": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "古装","v": "古装"}, {"n": "战争","v": "战争"}, {"n": "青春偶像","v": "青春偶像"}, {"n": "喜剧","v": "喜剧"}, {"n": "家庭","v": "家庭"}, {"n": "犯罪","v": "犯罪"}, {"n": "动作","v": "动作"}, {"n": "奇幻","v": "奇幻"}, {"n": "剧情","v": "剧情"}, {"n": "历史","v": "历史"}, {"n": "经典","v": "经典"}, {"n": "乡村","v": "乡村"}, {"n": "情景","v": "情景"}, {"n": "商战","v": "商战"}, {"n": "网剧","v": "网剧"}, {"n": "其他","v": "其他"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "内地","v": "内地"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "美国","v": "美国"},{"n": "英国","v": "英国"},{"n": "新加坡","v": "新加坡"},{"n": "其他","v": "其他"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"47": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "喜剧","v": "喜剧"}, {"n": "爱情","v": "爱情"}, {"n": "恐怖","v": "恐怖"}, {"n": "动作","v": "动作"}, {"n": "科幻","v": "科幻"}, {"n": "剧情","v": "剧情"}, {"n": "战争","v": "战争"}, {"n": "警匪","v": "警匪"}, {"n": "犯罪","v": "犯罪"}, {"n": "武侠","v": "武侠"}, {"n": "冒险","v": "冒险"}, {"n": "枪战","v": "枪战"}, {"n": "恐怖","v": "恐怖"}, {"n": "悬疑","v": "悬疑"}, {"n": "惊悚","v": "惊悚"}, {"n": "青春","v": "青春"}, {"n": "文艺","v": "文艺"}, {"n": "古装","v": "古装"}, {"n": "历史","v": "历史"}, {"n": "运动","v": "运动"}, {"n": "农村","v": "农村"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "印度","v": "印度"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"48": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "喜剧","v": "喜剧"}, {"n": "爱情","v": "爱情"}, {"n": "恐怖","v": "恐怖"}, {"n": "动作","v": "动作"}, {"n": "科幻","v": "科幻"}, {"n": "剧情","v": "剧情"}, {"n": "战争","v": "战争"}, {"n": "警匪","v": "警匪"}, {"n": "犯罪","v": "犯罪"}, {"n": "武侠","v": "武侠"}, {"n": "冒险","v": "冒险"}, {"n": "枪战","v": "枪战"}, {"n": "恐怖","v": "恐怖"}, {"n": "悬疑","v": "悬疑"}, {"n": "惊悚","v": "惊悚"}, {"n": "青春","v": "青春"}, {"n": "文艺","v": "文艺"}, {"n": "古装","v": "古装"}, {"n": "历史","v": "历史"}, {"n": "运动","v": "运动"}, {"n": "农村","v": "农村"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "印度","v": "印度"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"58": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "情感","v": "情感"}, {"n": "科幻","v": "科幻"}, {"n": "热血","v": "热血"}, {"n": "推理","v": "推理"}, {"n": "搞笑","v": "搞笑"}, {"n": "冒险","v": "冒险"}, {"n": "萝莉","v": "萝莉"}, {"n": "校园","v": "校园"}, {"n": "动作","v": "动作"}, {"n": "机战","v": "机战"}, {"n": "运动","v": "运动"}, {"n": "战争","v": "战争"}, {"n": "少年","v": "少年"}, {"n": "少女","v": "少女"}, {"n": "社会","v": "社会"}, {"n": "原创","v": "原创"}, {"n": "亲子","v": "亲子"}, {"n": "益智","v": "益智"}, {"n": "励志","v": "励志"}, {"n": "其他","v": "其他"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "内地","v": "内地"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "美国","v": "美国"},{"n": "英国","v": "英国"},{"n": "新加坡","v": "新加坡"},{"n": "其他","v": "其他"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"n": "2024","v": "2024"} ,{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"46": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "古装","v": "古装"}, {"n": "战争","v": "战争"}, {"n": "青春偶像","v": "青春偶像"}, {"n": "家庭","v": "家庭"}, {"n": "犯罪","v": "犯罪"}, {"n": "奇幻","v": "奇幻"}, {"n": "历史","v": "历史"}, {"n": "商战","v": "商战"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"53": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "古装","v": "古装"}, {"n": "战争","v": "战争"}, {"n": "青春偶像","v": "青春偶像"}, {"n": "喜剧","v": "喜剧"}, {"n": "家庭","v": "家庭"}, {"n": "犯罪","v": "犯罪"}, {"n": "动作","v": "动作"}, {"n": "奇幻","v": "奇幻"}, {"n": "剧情","v": "剧情"}, {"n": "历史","v": "历史"}, {"n": "经典","v": "经典"}, {"n": "乡村","v": "乡村"}, {"n": "情景","v": "情景"}, {"n": "商战","v": "商战"}, {"n": "网剧","v": "网剧"},{"n": "其他","v": "其他"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "内地","v": "内地"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "美国","v": "美国"},{"n": "英国","v": "英国"},{"n": "新加坡","v": "新加坡"},{"n": "其他","v": "其他"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"n": "2024","v": "2024"} ,{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"5": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "喜剧","v": "喜剧"}, {"n": "爱情","v": "爱情"}, {"n": "恐怖","v": "恐怖"}, {"n": "动作","v": "动作"}, {"n": "科幻","v": "科幻"}, {"n": "剧情","v": "剧情"}, {"n": "战争","v": "战争"}, {"n": "警匪","v": "警匪"}, {"n": "犯罪","v": "犯罪"}, {"n": "武侠","v": "武侠"}, {"n": "冒险","v": "冒险"}, {"n": "枪战","v": "枪战"}, {"n": "恐怖","v": "恐怖"}, {"n": "悬疑","v": "悬疑"}, {"n": "惊悚","v": "惊悚"}, {"n": "青春","v": "青春"}, {"n": "文艺","v": "文艺"}, {"n": "古装","v": "古装"}, {"n": "历史","v": "历史"}, {"n": "运动","v": "运动"}, {"n": "农村","v": "农村"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "印度","v": "印度"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"51": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "喜剧","v": "喜剧"}, {"n": "爱情","v": "爱情"}, {"n": "恐怖","v": "恐怖"}, {"n": "动作","v": "动作"}, {"n": "科幻","v": "科幻"}, {"n": "剧情","v": "剧情"}, {"n": "战争","v": "战争"}, {"n": "警匪","v": "警匪"}, {"n": "犯罪","v": "犯罪"}, {"n": "武侠","v": "武侠"}, {"n": "冒险","v": "冒险"}, {"n": "枪战","v": "枪战"}, {"n": "恐怖","v": "恐怖"}, {"n": "悬疑","v": "悬疑"}, {"n": "惊悚","v": "惊悚"}, {"n": "青春","v": "青春"}, {"n": "文艺","v": "文艺"}, {"n": "古装","v": "古装"}, {"n": "历史","v": "历史"}, {"n": "运动","v": "运动"}, {"n": "农村","v": "农村"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "印度","v": "印度"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}],"45": [{"key": "class","name": "剧情","value": [{"n": "全部","v": ""}, {"n": "喜剧","v": "喜剧"}, {"n": "爱情","v": "爱情"}, {"n": "恐怖","v": "恐怖"}, {"n": "动作","v": "动作"}, {"n": "科幻","v": "科幻"}, {"n": "剧情","v": "剧情"}, {"n": "战争","v": "战争"}, {"n": "警匪","v": "警匪"}, {"n": "犯罪","v": "犯罪"}, {"n": "武侠","v": "武侠"}, {"n": "冒险","v": "冒险"}, {"n": "枪战","v": "枪战"}, {"n": "恐怖","v": "恐怖"}, {"n": "悬疑","v": "悬疑"}, {"n": "惊悚","v": "惊悚"}, {"n": "青春","v": "青春"}, {"n": "文艺","v": "文艺"}, {"n": "古装","v": "古装"}, {"n": "历史","v": "历史"}, {"n": "运动","v": "运动"}, {"n": "农村","v": "农村"}]}, {"key": "area","name": "地区","value": [{"n": "全部","v": ""}, {"n": "大陆","v": "大陆"}, {"n": "香港","v": "香港"}, {"n": "台湾","v": "台湾"},{"n": "日本","v": "日本"},{"n": "韩国","v": "韩国"},{"n": "泰国","v": "泰国"},{"n": "印度","v": "印度"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}, {"n": "英语","v": "英语"}, {"n": "粤语","v": "粤语"}, {"n": "闽南语","v": "闽南语"}, {"n": "韩语","v": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"n": "2024","v": "2024"},{"n": "2023","v": "2023"}, {"n": "2022","v": "2022"}, {"n": "2021","v": "2021"}, {"n": "2020","v": "2020"}, {"n": "2019","v": "2019"}, {"n": "2018","v": "2018"}, {"n": "2017","v": "2017"}, {"n": "2016","v": "2016"}, {"n": "2015","v": "2015"}, {"n": "2014","v": "2014"}, {"n": "2013","v": "2013"}, {"n": "2012","v": "2012"}, {"n": "2011","v": "2011"}, {"n": "2010","v": "2010"}]}]}
|
||||
@@ -0,0 +1,301 @@
|
||||
if (typeof Object.assign != 'function') {
|
||||
Object.assign = function () {
|
||||
var target = arguments[0];
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
}
|
||||
function getMubans() {
|
||||
var mubanDict = { // 模板字典
|
||||
mxpro: {
|
||||
title: '',
|
||||
host: '',
|
||||
// homeUrl:'/',
|
||||
url: '/vodshow/fyclass--------fypage---.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
// "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1&&Text;.module-info-tag&&Text",
|
||||
"img": ".lazyload&&data-original",
|
||||
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
|
||||
"content": ".module-info-introduction&&Text",
|
||||
"tabs": ".module-tab-item",
|
||||
"lists": ".module-play-list:eq(#id) a"
|
||||
},
|
||||
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
||||
},
|
||||
mxone5: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/show/fyclass--------fypage---.html',
|
||||
searchUrl: '/search/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1&&Text;.tag-link&&Text",
|
||||
"img": ".module-item-pic&&img&&data-src",
|
||||
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
|
||||
"content": ".vod_content&&Text",
|
||||
"tabs": ".module-tab-item",
|
||||
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
|
||||
},
|
||||
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||
},
|
||||
首图: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/vodshow/fyclass--------fypage---/',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
// "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
二级: {
|
||||
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
|
||||
"img": ".myui-content__thumb .lazyload&&data-original",
|
||||
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
|
||||
"content": ".content&&Text",
|
||||
"tabs": ".nav-tabs:eq(0) li",
|
||||
"lists": ".myui-content__list:eq(#id) li"
|
||||
},
|
||||
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
},
|
||||
首图2: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/list/fyclass-fypage.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'UC_UA',
|
||||
// "Cookie": ""
|
||||
},
|
||||
// class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
||||
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
二级: {
|
||||
"title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
|
||||
"img": ".stui-content__thumb .lazyload&&data-original",
|
||||
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
|
||||
"content": ".detail&&Text",
|
||||
"tabs": ".stui-vodlist__head h3",
|
||||
"lists": ".stui-content__playlist:eq(#id) li"
|
||||
},
|
||||
搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
},
|
||||
默认: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/vodshow/fyclass--------fypage---.html',
|
||||
searchUrl: '/vodsearch/-------------.html?wd=**',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
},
|
||||
vfed: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'UC_UA',
|
||||
},
|
||||
// class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
|
||||
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
|
||||
"img": ".fed-list-info&&a&&data-original",
|
||||
"desc": ".fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text",
|
||||
"content": ".fed-part-esan&&Text",
|
||||
"tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
|
||||
"lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
|
||||
},
|
||||
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
||||
},
|
||||
海螺3: {
|
||||
title: '',
|
||||
host: '',
|
||||
searchUrl: '/v_search/**----------fypage---.html',
|
||||
url: '/vod_____show/fyclass--------fypage---.html',
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA'
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
||||
cate_exclude: '明星|专题|最新|排行',
|
||||
limit: 40,
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
double: true,
|
||||
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
二级: {
|
||||
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
|
||||
"img": ".hl-lazy&&data-original",
|
||||
"desc": ".hl-infos-content&&.hl-text-conch&&Text",
|
||||
"content": ".hl-content-text&&Text",
|
||||
"tabs": ".hl-tabs&&a",
|
||||
"lists": ".hl-plays-list:eq(#id)&&li"
|
||||
},
|
||||
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
},
|
||||
海螺2: {
|
||||
title: '',
|
||||
host: '',
|
||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
||||
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA'
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
||||
limit: 40,
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
||||
double: true,
|
||||
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h2&&Text;.deployment&&Text",
|
||||
"img": ".lazy&&data-original",
|
||||
"desc": ".deployment&&Text",
|
||||
"content": ".ec-show&&Text",
|
||||
"tabs": "#tag&&a",
|
||||
"lists": ".play_list_box:eq(#id)&&li"
|
||||
},
|
||||
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
},
|
||||
短视: {
|
||||
title: '',
|
||||
host: '',
|
||||
// homeUrl:'/',
|
||||
url: '/channel/fyclass-fypage.html',
|
||||
searchUrl: '/search.html?wd=**',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
// "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
||||
cate_exclude: '解析|动态',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
|
||||
"img": ".img&&img&&data-src",
|
||||
"desc": ".content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text",
|
||||
"content": ".zkjj_a&&Text",
|
||||
"tabs": ".py-tabs&&option",
|
||||
"lists": ".player:eq(#id) li"
|
||||
},
|
||||
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
||||
},
|
||||
短视2:{
|
||||
title: '',
|
||||
host: '',
|
||||
class_name:'电影&电视剧&综艺&动漫',
|
||||
class_url:'1&2&3&4',
|
||||
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
headers:{'User-Agent':'MOBILE_UA'},
|
||||
url: '/index.php/api/vod#type=fyclass&page=fypage',
|
||||
filterable:0,//是否启用分类筛选,
|
||||
filter_url:'',
|
||||
filter: {},
|
||||
filter_def:{},
|
||||
detailUrl:'/index.php/vod/detail/id/fyid.html',
|
||||
推荐:'.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
|
||||
一级:'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list.map(function(it){it.vod_pic=urljoin2(input.split("/i")[0],it.vod_pic);return it});',
|
||||
二级:{
|
||||
"title":".slide-info-title&&Text;.slide-info:eq(3)--strong&&Text",
|
||||
"img":".detail-pic&&data-original",
|
||||
"desc":".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text",
|
||||
"content":"#height_limit&&Text",
|
||||
"tabs":".anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a",
|
||||
"tab_text":".swiper-slide&&Text",
|
||||
"lists":".anthology-list-box:eq(#id) li"
|
||||
},
|
||||
搜索:'json:list;name;pic;;id',
|
||||
}
|
||||
};
|
||||
return JSON.parse(JSON.stringify(mubanDict));
|
||||
}
|
||||
var mubanDict = getMubans();
|
||||
var muban = getMubans();
|
||||
export default {muban,getMubans};
|
||||
Reference in New Issue
Block a user