Files
legado-source-debugger/rule-content.txt
2025-11-30 14:21:16 +08:00

2 lines
44 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
涔︽簮瑙勫垯锛氫粠鍏ラ棬鍒板叆鍦?/title> Legado涔︽簮瑙勫垯璇存槑 鍘熶綔鑰? Celeter 鐜颁綔鑰? 鍠靛叕瀛?/span> 鏇存柊鏃堕棿: 2024-02-27 鎻忚堪: 鏈鏄庢槸 legado 鐨勮鍒欒鏄庯紝绂佹鍏朵粬鏈幏寰楁湰浜烘巿鏉冪殑绗笁鏂硅蒋浠朵娇鐢?/span> 姒傚喌 1銆佽娉曡鏄?/span> 2銆丩egado鐨勭壒娈婅鍒?/span> 3銆佷功婧愪箣銆屽熀鏈€?/span> 4銆佷功婧愪箣銆屾悳绱€?/span> 5銆佷功婧愪箣銆屽彂鐜般€?/span> 6銆佷功婧愪箣銆岃鎯呴〉銆?/span> 7銆佷功婧愪箣銆岀洰褰曘€?/span> 8銆佷功婧愪箣銆屾鏂囥€?/span> 9銆佽ˉ鍏呰鏄?/span> 1銆佽娉曡鏄?/span> JSOUP涔婦efault 璇硶濡備笅锛?/span> xxxxxxxxxx 鈻?@涓哄垎闅旂,鐢ㄦ潵鍒嗛殧鑾峰彇瑙勫垯 路姣忔瑙勫垯鍙垎涓?娈?/span> 路绗竴娈垫槸绫诲瀷,濡俢lass,id,tag,text,children绛? children鑾峰彇鎵€鏈夊瓙鏍囩,涓嶉渶瑕佺浜屾鍜岀涓夋,text鍙互鏍规嵁鏂囨湰鍐呭鑾峰彇 路绗簩娈垫槸鍚嶇О,text. 绗簩娈典负鏂囨湰鍐呭鐨勪竴閮ㄥ垎 路绗笁娈垫槸浣嶇疆,class,tag,id绛変細鑾峰彇鍒板涓?鎵€浠ヨ鍔犱綅缃?/span> 路濡備笉鍔犱綅缃細鑾峰彇鎵€鏈?/span> 路浣嶇疆姝潃鏁颁粠0寮€濮?0鏄涓€涓?濡備负璐熸暟鍒欐槸鍙栧€掔潃鏁扮殑鍊?-1涓哄€掓暟绗竴涓?-2涓哄€掓暟绗簩涓?/span> 路!鏄帓闄?鏈変簺浣嶇疆涓嶇鍚堥渶瑕佹帓闄ょ敤!,鍚庨潰鐨勫簭鍙风敤:闅斿紑0鏄1涓?璐熸暟涓哄€掓暟搴忓彿,-1鏈€鍚庝竴涓?-2鍊掓暟绗?涓?渚濇 路鑾峰彇鍒楄〃鐨勬渶鍓嶉潰鍔犱笂璐熷彿- 鍙互浣垮垪琛ㄥ€掔疆,鏈変簺缃戠珯鐩綍鍒楄〃鏄€掔殑,鍓嶉潰鍔犱釜璐熷彿鍙彉涓烘鐨?/span> 路@鐨勬渶鍚庝竴娈典负鑾峰彇鍐呭,濡倀ext,textNodes,ownText,href,src,html,all绛?/span> 路濡傞渶瑕佹鍒欐浛鎹㈠湪鏈€鍚庡姞涓?##姝e垯琛ㄨ揪寮?#鏇挎崲鍐呭锛屾浛鎹㈠唴瀹逛负绌烘椂锛岀浜屼釜##鍙互鐪佺暐 路渚?class.odd.0@tag.a.0@text||tag.dd.0@tag.h1@text##鍏ㄦ枃闃呰 路渚?class.odd.0@tag.a.0@text&&tag.dd.0@tag.h1@text##鍏ㄦ枃闃呰 鈻?澧炲姞鏀寔绫讳技鏁扮粍鐨勫啓娉?/span> 路鏍煎紡濡?[index,index, ...]鎴朳!index,index, ...],鍏朵腑[!`寮€澶磋〃绀虹瓫閫夋柟寮忎负鎺掗櫎,index鍙互鏄崟涓储寮?涔熷彲浠ユ槸鍖洪棿 路鍖洪棿鏍煎紡涓篬start:end]鎴朳start:end:step]锛屽叾涓璼tart涓?鏃跺彲鐪佺暐锛宔nd涓?1鏃跺彲鐪佺暐 路绱㈠紩(index)銆佸尯闂翠袱绔?start鍜宔nd)銆佸尯闂撮棿闅?step)閮芥敮鎸佽礋鏁?/span> 路鐗规畩鐢ㄦ硶tag.div[-1:0],鍙湪浠绘剰鍦版柟璁╁垪琛ㄥ弽鍚?/span> 鈻?鍏佽绱㈠紩浣滀负@鍒嗘鍚庢瘡涓儴鍒嗙殑棣栬鍒欙紝姝ゆ椂鐩稿綋浜庡墠闈㈡槸children 路head@.1@text涓巋ead@[1]@text涓巋ead@children[1]@text绛変环 鏍囧噯瑙勮寖涓庡疄鐜板簱 Package org.jsoup.select, CSS-like element selector JSOUP涔婥SS 璇硶瑙?/span> https://blog.csdn.net/hou_angela/article/details/80519718 蹇呴』浠? @css: 寮€澶?/span> 鏍囧噯瑙勮寖涓庡疄鐜板簱 Package org.jsoup.select 鍦ㄧ嚎娴嬭瘯 Try jsoup online 娉ㄦ剰锛氳幏鍙栧唴瀹瑰彲鐢╰ext,textNodes,ownText,html,all,href,src绛?/span> 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪竴銆戠殑鎼滅储椤靛拰姝f枃椤佃鍒?/span> JSONPath 璇硶瑙? JsonPath鏁欑▼ 鏈€濂戒互 @json: 鎴? $. 寮€澶达紝鍏朵粬褰㈠紡涓嶅彲闈?/span> 鏍囧噯瑙勮寖 goessner JSONPath - XPath for JSON 瀹炵幇搴? json-path/JsonPath 鍦ㄧ嚎娴嬭瘯 Jayway JsonPath Evaluator 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪笁銆戠殑鎼滅储椤点€佺洰褰曢〉鍜屾鏂囬〉瑙勫垯 XPath 璇硶瑙? XPath鏁欑▼-鍏ラ棬 銆?/span> XPath鏁欑▼-鍩虹 銆?/span> XPath鏁欑▼-楂樼骇 銆?/span> XPath搴撶殑璇存槑 蹇呴』浠? @XPath: 鎴? // 寮€澶?/span> 鏍囧噯瑙勮寖 W3C XPATH 1.0 瀹炵幇搴? zhegexiaohuozi/JsoupXpath 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪簩銆戠殑鎼滅储椤点€佽鎯呴〉鍜屾鏂囬〉瑙勫垯锛屼互鍙婄洰褰曢〉鐨勪笅涓€椤佃鍒?/span> JavaScript 鍙互鍦? <js></js> 銆?/span> @js: 涓娇鐢紝缁撴灉瀛樺湪result涓?/span> @js: 鍙兘鏀惧湪鍏朵粬瑙勫垯鐨勬渶鍚庝娇鐢?/span> <js></js> 鍙互鍦ㄤ换鎰忎綅缃娇鐢紝杩樿兘浣滀负鍏朵粬瑙勫垯鐨勫垎闅旂锛屼緥锛?/span> tag.li<js></js>//a 鍦ㄦ悳绱㈠垪琛ㄣ€佸彂鐜板垪琛ㄥ拰鐩綍涓娇鐢ㄥ彲浠ョ敤 + 寮€澶达紝浣跨敤AllInOne瑙勫垯 姝垯涔婣llInOne 鍙兘鍦ㄦ悳绱㈠垪琛ㄣ€佸彂鐜板垪琛ㄣ€佽鎯呴〉棰勫姞杞藉拰鐩綍鍒楄〃涓娇鐢?/span> 蹇呴』浠? : 寮€澶?/span> 鏁欑▼ Regex涓撻 锛堝凡404锛?/p> 璇硶 锛堝凡404锛?span>銆?/span> 鏂规硶 锛堝凡404锛?span>銆?/span> 寮曟搸 锛堝凡404锛?/p> 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪竴銆戠殑鐩綍椤佃鍒欙紝鏈€鍓嶉潰鐨?/span> - 琛ㄧず鐩綍鍊掑簭锛屼互鍙娿€愪功婧愪簩銆戠殑鐩綍椤佃鍒?/span> 姝垯涔婳nlyOne 褰㈠紡 ##姝e垯琛ㄨ揪寮?#鏇挎崲鍐呭### 鍙兘鍦ㄦ悳绱㈠垪琛ㄣ€佸彂鐜板垪琛ㄣ€佽鎯呴〉棰勫姞杞姐€佺洰褰曞垪琛ㄤ箣澶栦娇鐢?/span> 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪竴銆戠殑璇︽儏椤佃鍒?/span> 娉ㄦ剰鐐癸細璇ヨ鍒欏彧鑳借幏鍙栫涓€涓尮閰嶅埌鐨勭粨鏋滃苟杩涜鏇挎崲 姝e垯涔嬪噣鍖?/span> 褰㈠紡 ##姝e垯琛ㄨ揪寮?#鏇挎崲鍐呭 鍙兘璺熷湪鍏朵粬瑙勫垯鍚庨潰锛岀嫭绔嬩娇鐢ㄧ浉褰撲簬 all##姝e垯琛ㄨ揪寮?#鏇挎崲鍐呭 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪竴銆戠殑姝f枃椤佃鍒?/span> 娉ㄦ剰鐐癸細璇ヨ鍒欎负寰幆鍖归厤鏇挎崲 鑷畾涔変笁绉嶈繛鎺ョ鍙?/span> 绗﹀彿锛?/span> && 銆?/span> || 銆?/span> %% 鍙兘鍦ㄥ悓绉嶈鍒欓棿浣跨敤锛屼笉鍖呮嫭js鍜屾鍒?/span> && 浼氬悎骞舵墍鏈夊彇鍒扮殑鍊? || 浼氫互绗竴涓彇鍒板€肩殑涓哄噯 %% 浼氫緷娆″彇鏁帮紝濡備笁涓垪琛紝 鍏堝彇鍒楄〃1鐨勭涓€涓紝鍐嶅彇鍒楄〃2鐨勭涓€涓紝鍐嶅彇鍒楄〃3鐨勭涓€涓紝 鍐嶅彇鍒楄〃1鐨勭浜屼釜锛屽啀鍙栧垪琛?鐨勭浜屼釜... 2銆丩egado鐨勭壒娈婅鍒?/span> URL蹇呯煡蹇呬細 璇锋眰澶?/span> 涓€鑸舰寮忥紝濡備笅鎵€绀?/span> xxxxxxxxxx {     "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" ,     "Accept-Language" : "zh-CN,zh;q=0.9" }   澶嶆潅鎯呭喌鍙娇鐢╦s xxxxxxxxxx (() => { var ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" ; var headers = { "User-Agent" : ua }; return JSON . stringify ( headers ); })() 鈥诲叾涓紝 ua 蹇呴』淇濊瘉鏄?/span> JavaScript 鐨?/span> String 绫诲瀷锛?/span> JSON.stringify() 鎵嶈兘灏?/span> header 杞崲涓哄瓧绗︿覆銆?/span> 鑾峰彇鐧诲綍鍚庣殑cookie xxxxxxxxxx java . getCookie ( "http://baidu.com" , null ) => userid = 1234 ; pwd = adbcd java . getCookie ( "http://baidu.com" , "userid" ) => 1234 璇锋眰澶翠腑鏀寔http浠悊,socks4 socks5浠悊璁剧疆 xxxxxxxxxx // socks5浠悊 {   "proxy" : "socks5://127.0.0.1:1080" } // http浠悊 {   "proxy" : "http://127.0.0.1:1080" } // 鏀寔浠g悊鏈嶅姟鍣ㄩ獙璇?/span> {   "proxy" : "socks5://127.0.0.1:1080@鐢ㄦ埛鍚岪瀵嗙爜" } // 娉ㄦ剰:杩欎簺璇锋眰澶存槸鏃犳剰涔夌殑,浼氳蹇界暐鎺?/span>   GET璇锋眰 涓€鑸舰寮忓涓嬶紝charset涓簎tf-8鏃跺彲鐪佺暐锛屾棤鐗规畩鎯呭喌涓嶉渶瑕佽姹傚ご鍜寃ebView锛屽弬鏁皐ebView闈炵┖鏃堕噰鐢ebView鍔犺浇 xxxxxxxxxx https : //www.baidu.com,{ "charset" : "gbk" , "headers" : { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, "webView" : true } 澶嶆潅鎯呭喌鍙娇鐢╦s xxxxxxxxxx var ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" ; var headers = { "User-Agent" : ua }; var option = { "charset" : "gbk" , "headers" : headers , "webView" : true }; "https://www.baidu.com," + JSON . stringify ( option )   POST璇锋眰 涓€鑸舰寮忓涓嬶紝body鏄姹備綋锛宑harset涓簎tf-8鏃跺彲鐪佺暐锛屾棤鐗规畩鎯呭喌涓嶉渶瑕佽姹傚ご鍜寃ebView锛屽弬鏁皐ebView闈炵┖鏃堕噰鐢ebView鍔犺浇 xxxxxxxxxx https : //www.baidu.com,{ "charset" : "gbk" , "method" : "POST" , "body" : "bid=10086" , "headers" : { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, "webView" : true } 澶嶆潅鎯呭喌鍙娇鐢╦s xxxxxxxxxx var ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" ; var headers = { "User-Agent" : ua }; var body = "bid=" + "10086" ; var option = { "charset" : "gbk" , "method" : "POST" , "body" : String ( body ), "headers" : headers , "webView" : true }; "https://www.baidu.com," + JSON . stringify ( option ) 鈥诲叾涓紝 body 蹇呴』淇濊瘉鏄?/span> JavaScript 鐨?/span> String 绫诲瀷锛屽彉閲忔槸璁$畻寰楀埌鐨勫敖閲忛兘鐢?/span> String() 寮鸿浆涓€涓嬬被鍨嬨€?/span>   鍙橀噺鐨刾ut涓巊et @put 涓?/span> @get 鍙兘鐢ㄤ簬js浠ュ鐨勮鍒欎腑锛孈put閲屼娇鐢↗SONPath涓嶉渶瑕佸姞寮曞彿锛屽叾浠栬鍒欓渶瑕佸姞寮曞彿锛?/span> 渚嬶細@put:{bid:"//*[@bid-data]/@bid-data"} java.put 涓?/span> java.get 鍙兘鐢ㄤ簬js涓紝鍦╦s涓棤娉曚娇鐢ˊget {{}} 涓?/span> {} 瑙勫垯 鍦ㄦ悳绱RL涓庡彂鐜癠RL涓殑 {{}} 鍦▄{}}閲屽彧鑳戒娇鐢╦s 鍦ㄦ悳绱RL涓庡彂鐜癠RL浠ュ鐨?/span> {{}} 鍙湪 {{}} 涓娇鐢ㄤ换鎰忚鍒欙紙姝垯闄ゅ锛燂級锛岄粯璁や负js锛屼娇鐢ㄥ叾浠栬鍒欓渶瑕佹湁鏄庢樉鐨勬爣蹇楀ご锛?/span> 濡傦細Default瑙勫垯闇€瑕佷互 @@ 寮€澶达紝XPath闇€瑕佷互 @xpath: 鎴?/span> // 寮€澶达紝JSONPath闇€瑕佷互 @json: 鎴?/span> $. 寮€澶达紝CSS闇€瑕佷互 @css: 寮€澶?/span> {} 瑙勫垯 鐣欑敤浜嗛槄璇?.0鐨勮鍒欙紝鍙兘浣跨敤JSONPath锛屽敖閲忛伩鍏嶄娇鐢?/span> 鑷畾涔塲s 鍦╦s涓皟鐢╦ava鐨勫父瑙勬柟娉曪細鐢变簬java杩欎釜鍏抽敭瀛楀凡缁忚浣跨敤锛岃皟鐢╦ava寮€澶寸殑鍖呭悕鏃堕渶浣跨敤鍏ㄥ眬鍙橀噺Packages 鍙傝€冭剼鏈箣瀹?/span> 鍙皟鐢ㄦ煇涓猵ublic鍑芥暟锛氾紝渚嬶細 io.legado.app.utils.htmlFormat(str) 銆?/span> org.jsoup.Jsoup.parse(str) 鐩存帴寮曞叆java绫伙紝濡備笅鎵€绀猴紝寮曞叆浜嗕袱涓猨ava鍖咃紝java鍖呯殑浣滅敤鍩熸槸鍦?/span> with 鐨勮寖鍥村唴锛屽叾鍐呬娇鐢╦ava鐩稿叧璇硶锛屾渶鍚庡湪浣滅敤鍩熷琚玧s璋冪敤浜嗕綔鐢ㄥ煙鍐呯殑鍑芥暟 xxxxxxxxxx var javaImport = new JavaImporter (); javaImport . importPackage ( Packages . java . lang , Packages . java . security ); with ( javaImport ){ function strToMd5By32 ( str ) { var reStr = null ; var md5 = MessageDigest . getInstance ( "MD5" ); var bytes = md5 . digest ( String ( str ). getBytes ()); var stringBuffer = new StringBuilder (); bytes . forEach ( a => { var bt = a & 0xff ; if ( bt < 16 ) { stringBuffer . append ( "0" ); } stringBuffer . append ( Integer . toHexString ( bt )); }); reStr = stringBuffer . toString (); return reStr ; } } strToMd5By32 ( '123' )   鍙橀噺 xxxxxxxxxx baseUrl // 鍙橀噺-褰撳墠url,String result // 鍙橀噺-涓婁竴姝ョ殑缁撴灉 book // 鍙橀噺-涔︾睄绫?鏂规硶瑙?io.legado.app.data.entities.Book cookie // 鍙橀噺-cookie鎿嶄綔绫?鏂规硶瑙?io.legado.app.help.http.CookieStore cache // 鍙橀噺-缂撳瓨鎿嶄綔绫?鏂规硶瑙?io.legado.app.help.CacheManager chapter // 鍙橀噺-褰撳墠鐩綍绫?鏂规硶瑙?io.legado.app.data.entities.BookChapter title // 鍙橀噺-褰撳墠鏍囬,String src // 鍐呭,婧愮爜   涓嬮潰鏄竴浜涘父鐢ㄧ殑鍑芥暟锛岃瑙?/span> JsExtensions.kt 鈥?/span>x //璁块棶缃戠粶锛寀rlStr涓簎rl瀛楃涓诧紝杩斿洖绫诲瀷String? java . ajax ( urlStr : String ) 鈥?/span> //骞跺彂璁块棶缃戠粶锛寀rlList涓簎rl鏁扮粍锛岃繑鍥濻trResponse?鐨勬暟缁勶紝鑻ヨ鑾峰彇body锛岄渶浣跨敤.body() java . ajaxAll ( urlList : Array < String > ): Array < StrResponse ?> 鈥?/span> //璁块棶缃戠粶锛寀rlStr涓簎rl瀛楃涓诧紝杩斿洖Response<String>锛屽凡搴熷純 java . connect ( urlStr : String ) 鈥?/span> //鏂囦欢涓嬭浇锛宑ontent涓哄崄鍏繘鍒跺瓧绗︿覆锛寀rl鐢ㄤ簬鐢熸垚鏂囦欢鍚嶏紝杩斿洖String鏂囦欢鐩稿璺緞 java . downloadFile ( content : String , url : String ) 鈥?/span> //瀹炵幇閲嶅畾鍚戞嫤鎴紝杩斿洖[Connection.Response](https://jsoup.org/apidocs/org/jsoup/Connection.Response.html) java . get ( url : String , headers : Map < String , String > ) java . post ( urlStr : String , body : String , headers : Map < String , String > ) 鈥?/span> //瀹炵幇cookie璇诲彇锛岃繑鍥濻tring java . getCookie ( tag : String , key : String ? ) 鈥?/span> //base64瑙爜锛岃繑鍥炵被鍨婼tring java . base64Decode ( str : String ) java . base64Decode ( str : String , flags : Int ) 鈥?/span> //base64瑙爜锛岃繑鍥炵被鍨婤yteArray? java . base64DecodeToByteArray ( str : String ? ) java . base64DecodeToByteArray ( str : String ? , flags : Int ) 鈥?/span> //base64缂栫爜锛岃繑鍥炵被鍨婼tring? java . base64Encode ( str : String ) java . base64Encode ( str : String , flags : Int )     //md5缂栫爜锛岃繑鍥炵被鍨婼tring? java . md5Encode ( str : String ) java . md5Encode16 ( str : String ) 鈥?/span> //鏍煎紡鍖栨椂闂存埑锛岃繑鍥炵被鍨婼tring java . timeFormat ( timestamp : Long ) java . timeFormat ( time : String ) 鈥?/span> //utf8缂栫爜杞琯bk缂栫爜锛岃繑鍥濻tring java . utf8ToGbk ( str : String ) 鈥?/span> //瀹炵幇瀛楃涓茬殑URI缂栫爜锛宔nc涓虹紪鐮佹牸寮忥紝杩斿洖String java . encodeURI ( str : String ) //榛樿enc="UTF-8" java . encodeURI ( str : String , enc : String ) 鈥?/span> //html鏍煎紡鍖栵紝杩斿洖String java . htmlFormat ( str : String ) 鈥?/span> //鑾峰彇鏈湴鏂囦欢,path涓烘枃浠剁殑鐩稿璺緞,杩斿洖File java . getFile ( path : String ) 鈥?/span> //璇诲彇鏈湴鏂囦欢锛岃繑鍥濨yteArray? java . readFile ( path : String ) 鈥?/span> //璇诲彇鏈湴鏂囨湰鏂囦欢锛宑harsetName涓虹紪鐮佹牸寮?/span> java . readTxtFile ( path : String ) //鑷姩璇嗗埆charsetName涓嶄竴瀹氬噯锛屼贡鐮佹椂璇锋墜鍔ㄦ寚瀹?/span> java . readTxtFile ( path : String , charsetName : String ) 鈥?/span> //鍒犻櫎鏂囦欢鎴栨枃浠跺す deleteFile ( path : String ) 鈥?/span> //zip鏂囦欢瑙帇锛寊ipPath涓哄帇缂╂枃浠惰矾寰勶紝杩斿洖String瑙帇鐩稿璺緞锛屼細鍒犻櫎鍘熸枃浠跺彧淇濈暀瑙帇鍚庣殑鏂囦欢 java . unzipFile ( zipPath : String ) 鈥?/span> //鏂囦欢澶瑰唴鎵€鏈夋枃鏈枃浠惰鍙栵紝杩斿洖鍐呭String锛屼細鍒犻櫎鏂囦欢澶?/span> java . getTxtInFolder ( unzipPath : String ) 鈥?/span> //鑾峰彇缃戠粶zip鏂囦欢涓殑鏁版嵁锛寀rl涓簔ip鏂囦欢閾炬帴锛宲ath涓烘墍闇€鑾峰彇鏂囦欢鍦▃ip鍐呯殑璺緞锛岃繑鍥炴枃浠舵暟鎹甋tring java . getZipStringContent ( url : String , path : String ) 鈥?/span> //鑾峰彇缃戠粶zip鏂囦欢涓殑鏁版嵁锛寀rl涓簔ip鏂囦欢閾炬帴锛宲ath涓烘墍闇€鑾峰彇鏂囦欢鍦▃ip鍐呯殑璺緞锛岃繑鍥炴枃浠舵暟鎹瓸yteArray? java . getZipByteArrayContent ( url : String , path : String ) 鈥?/span> //瑙f瀽瀛椾綋,杩斿洖瀛椾綋瑙瀽绫籕ueryTTF? java . queryBase64TTF ( base64 : String ? ) 鈥?/span> //str鏀寔url,鏈湴鏂囦欢,base64,鑷姩鍒ゆ柇,鑷姩缂撳瓨,杩斿洖瀛椾綋瑙瀽绫籕ueryTTF? java . queryTTF ( str : String ? ) 鈥?/span> //text涓哄寘鍚敊璇瓧浣撶殑鍐呭锛宖ont1涓洪敊璇殑瀛椾綋锛宖ont2涓烘纭殑瀛椾綋锛岃繑鍥炲瓧浣撳搴旂殑瀛?/span> java . replaceFont ( text : String , font1 : QueryTTF ? , font2 : QueryTTF ? ) 鈥?/span> //杈撳嚭璋冭瘯鏃ュ織 java . log ( msg : String ) 鈥?/span> //AES瑙爜涓築yteArray?,str涓轰紶鍏ョ殑AES鍔犲瘑鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesDecodeToByteArray ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //AES瑙爜涓篠tring?,str涓轰紶鍏ョ殑AES鍔犲瘑鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesDecodeToString ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //宸茬粡base64鐨凙ES瑙爜涓築yteArray?,str涓築ase64缂栫爜鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesBase64DecodeToByteArray ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //宸茬粡base64鐨凙ES瑙爜涓篠tring?,str涓築ase64缂栫爜鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesBase64DecodeToString ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes涓築yteArray?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToByteArray ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes涓篠tring?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToString ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes鍚嶣ase64鍖栫殑ByteArray?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToBase64ByteArray ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes鍚嶣ase64鍖栫殑String?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToBase64String ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> /**************浠ヤ笅閮ㄥ垎鏂规硶鐢变簬JAVA涓嶆敮鎸佸弬鏁伴粯璁ゅ€硷紝璋冪敤鏃朵笉鑳界渷鐣?**************/ //璁剧疆闇€瑙瀽鐨勫唴瀹筩ontent鍜宐aseUrl锛岃繑鍥炵被鍨婣nalyzeRule java . setContent ( content : Any ? , baseUrl : String ? = this . baseUrl ) 鈥?/span> //杈撳叆瑙勫垯rule鍜孶RL鏍囧織isUrl鑾峰彇鏂囨湰鍒楄〃锛岃繑鍥炵被鍨婰ist<String>? java . getStringList ( rule : String , isUrl : Boolean = false ) 鈥?/span> //杈撳叆瑙勫垯rule鍜孶RL鏍囧織isUrl鑾峰彇鏂囨湰锛岃繑鍥炵被鍨婼tring java . getString ( ruleStr : String ? , isUrl : Boolean = false ) 鈥?/span> //杈撳叆瑙勫垯ruleStr鑾峰彇鑺傜偣鍒楄〃锛岃繑鍥炵被鍨婰ist<Any> java . getElements ( ruleStr : String ) 鈥?/span>   url娣诲姞js鍙傛暟锛岃В鏋恥rl鏃舵墽琛岋紝鍙湪璁块棶url鏃跺鐞唘rl锛屼緥锛?/span> xxxxxxxxxx https : //www.baidu.com,{"js":"java.headerMap.put('xxx', 'yyy')"} https : //www.baidu.com,{"js":"java.url=java.url+'yyyy'"} url鍏ㄩ儴鍙傛暟锛岃瑙?/span> AnalyzeUrl.kt xxxxxxxxxx data class UrlOption (     val method : String ? ,     val charset : String ? ,     val webView : Any ? ,     val headers : Any ? ,     val body : Any ? ,     val type : String ? ,     val js : String ? ,     val retry : Int = 0 //閲嶈瘯娆℃暟 )   3銆佷功婧愪箣銆屽熀鏈€?/span> 涔︽簮URL(bookSourceUrl) 蹇呭~ 鍞竴鏍囪瘑锛屼笉鍙噸澶?/span> 涓庡叾浠栨簮鐩稿悓浼氳鐩?/span> 涔︽簮鍚嶇О(bookSourceName) 蹇呭~ 鍚嶅瓧鍙噸澶?/span> 涔︽簮鍒嗙粍(bookSourceGroup) 鍙笉濉?/span> 鐢ㄤ簬鏁寸悊婧?/span> 鐧诲綍URL(loginUrl) 鏍规嵁闇€姹傦紝闅忔満搴斿彉 鐢ㄤ簬鐧诲綍涓汉璐︽埛 涔︾睄URL姝垯(bookUrlPattern) 鍙笉濉?/span> 娣诲姞缃戝潃鏃讹紝鐢ㄤ簬璇嗗埆涔︽簮 xxxxxxxxxx 渚?https?://www.piaotian.com/bookinfo/.* 璇锋眰澶?header) 鏍规嵁闇€姹傦紝闅忔満搴斿彉 璁块棶缃戝潃鏃朵娇鐢?/span> 4銆佷功婧愪箣銆屾悳绱€?/span> 鎼滅储鍦板潃(url) key 涓哄叧閿瓧鏍囪瘑锛岄€氬父褰㈡€佷负 {{key}} 锛岃繍琛屾椂浼氭浛鎹负鎼滅储鍏抽敭瀛?/span> 涔熷彲浠ュkey杩涜鍔犲瘑绛夋搷浣滐紝濡傦細 {{java.base64Encode(key)}} page 涓哄叧閿瓧鏍囪瘑锛岄€氬父褰㈡€佷负 {{page}} 锛宲age鐨勫垵鍊间负1涔熷彲浠ュpage杩涜璁畻锛?/span> 濡傦細 {{(page-1)*20}} 锛屾湁鏃朵細閬囧埌绗竴椤垫病鏈夐〉鏁扮殑鎯呭喌锛屾湁涓ょ鏂规硶锛?/span> 鈶? {{page - 1 == 0 ? "": page}} 鈶? <,{{page}}> 鏀寔鐩稿URL 涔︾睄鍒楄〃瑙勫垯(bookList) 涔﹀悕瑙勫垯(name) 浣滆€呰鍒?author) 鍒嗙被瑙勫垯(kind) 瀛楁暟瑙勫垯(wordCount) 鏈€鏂扮珷鑺傝鍒?lastChapter) 绠€浠嬭鍒?intro) 灏侀潰瑙勫垯(coverUrl) 璇︽儏椤祏rl瑙勫垯(bookUrl) 5銆佷功婧愪箣銆屽彂鐜般€?/span> 鍙戠幇鍦板潃瑙勫垯(url) page 涓哄叧閿瓧鏍囪瘑锛岄€氬父褰㈡€佷负 {{page}} 锛宲age鐨勫垵鍊间负1锛屼篃鍙互瀵筽age杩涜璁畻锛?/span> 濡傦細 {{(page-1)*20}} 锛屾湁鏃朵細閬囧埌绗竴椤垫病鏈夐〉鏁扮殑鎯呭喌锛屾湁涓ょ鏂规硶锛?/span> 鈶? {{page - 1 == 0 ? "": page}} 鈶? <,{{page}}> 鏍煎紡涓€锛屽锛? 鍚嶇О::http://www銆俠aidu.com 锛屽彂鐜癠RL鍙娇鐢?/span> && 鎴栨崲琛岀 \n 闅斿紑 鏍煎紡浜岋紝鏈?涓牱寮忓睘鎬?layout_flexGrow銆乴ayout_flexShrink銆乴ayout_alignSelf銆乴ayout_flexBasisPercent銆乴ayout_wrapBefore)闇€瑕佷簡瑙o紝璇︽儏瑙?/span> 绠€涔?/span> 锛屽啓娉曞锛?/span> xxxxxxxxxx [   {         "title" : "浠婃棩闄愬厤" ,         "url" : "https://app-cdn.jjwxc.net/bookstore/getFullPage?channel=novelfree" ,         "style" : {             "layout_flexGrow" : 1       }   },   {         "title" : "棰戦亾閲戞" ,         "url" : "http://app-cdn.jjwxc.net/bookstore/getFullPage?channelBody=%7B%229%22%3A%7B%22offset%22%3A%22<,{{(page-1)*25}}>%22%2C%22limit%22%3A%2225%22%7D%7D&versionCode=148" ,         "style" : {             "layout_flexGrow" : 0 ,             "layout_flexShrink" : 1 ,             "layout_alignSelf" : "auto" ,             "layout_flexBasisPercent" : - 1 ,             "layout_wrapBefore" : true       }   },   {         "title" : "骞绘兂鏈潵" ,         "url" : "http://app-cdn.jjwxc.net/bookstore/getFullPage?channelBody=%7B%2222000023%22%3A%7B%22offset%22%3A%22<,{{(page-1)*25}}>%22%2C%22limit%22%3A%2225%22%7D%7D&versionCode=148"   } ]   鏀寔鐩稿URL 涔︾睄鍒楄〃瑙勫垯(bookList) 涔﹀悕瑙勫垯(name) 浣滆€呰鍒?author) 鍒嗙被瑙勫垯(kind) 瀛楁暟瑙勫垯(wordCount) 鏈€鏂扮珷鑺傝鍒?lastChapter) 绠€浠嬭鍒?intro) 灏侀潰瑙勫垯(coverUrl) 璇︽儏椤祏rl瑙勫垯(bookUrl) 6銆佷功婧愪箣銆岃鎯呫€?/span> 棰勫鐞嗚鍒?bookInfoInit) 鍙兘浣跨敤姝垯涔婣llInOne鎴栬€卝s 姝垯涔婣llInOne蹇呴』浠?/span> : 寮€澶?/span> js鐨勮繑鍥炲€奸渶瑕佹槸json瀵硅薄锛屼緥锛?/span> xxxxxxxxxx ( function (){ return { a : "鍦e" , b : "杈颁笢" , c : "鐜勫够" , d : "200涓囧瓧" , e : "绗袱鍗冪珷 杈颁笢鑲捐櫄" , f : "鍦ㄧ牬璐ヤ腑宕涜捣锛屽湪瀵傜伃涓鑻忋€傛钵娴锋垚灏橈紝闆风數鏋..." , g : "https://bookcover.yuewen.com/qdbimg/349573/1004608738/300" , h : "https://m.qidian.com/book/1004608738" }; })() 姝ゆ椂锛屼功鍚嶈鍒欏~ a 锛屼綔鑰呰鍒欏~ b 锛屽垎绫昏鍒欏~ c 锛屽瓧鏁拌鍒欏~ d 锛屾渶鏂扮珷鑺傝鍒欏~ e 锛岀畝浠嬭鍒?/span> f 锛屽皝闈㈣鍒欏~ g 锛岀洰褰昒RL瑙勫垯濉?/span> h 涔﹀悕瑙勫垯(name) 浣滆€呰鍒?author) 鍒嗙被瑙勫垯(kind) 瀛楁暟瑙勫垯(wordCount) 鏈€鏂扮珷鑺傝鍒?lastChapter) 绠€浠嬭鍒?intro) 灏侀潰瑙勫垯(coverUrl) 鐩綍URL瑙勫垯(tocUrl) 鍙敮鎸佸崟涓猽rl 鍏佽淇敼涔﹀悕浣滆€?canReName) 瑙勫垯涓嶄负绌轰笖璇︽儏椤典功鍚嶄笉涓虹┖锛屼娇鐢ㄨ鎯呴〉涓殑浣滆€呫€傚惁鍒欙紝浣跨敤鎼滅储椤典腑鐨勪功鍚?/span> 瑙勫垯涓嶄负绌轰笖璇︽儏椤典綔鑰呬笉涓虹┖锛屼娇鐢ㄨ鎯呴〉涓殑浣滆€呫€傚惁鍒欙紝浣跨敤鎼滅储椤典腑鐨勪綔鑰?/span> 7銆佷功婧愪箣銆岀洰褰曘€?/span> 鐩綍鍒楄〃瑙勫垯(chapterList) 棣栧瓧绗︿娇鐢ㄨ礋鍙? - )鍙娇鍒楄〃鍙嶅簭 绔犺妭鍚嶇О瑙勫垯(ruleChapterName) 绔犺妭URL瑙勫垯(chapterUrl) VIP鏍囪瘑(isVip) 褰撶粨鏋滀负 null false 0 "" 鏃朵负闈濾IP 绔犺妭淇℃伅(ChapterInfo) 鍙皟鐢╦ava.timeFormat(timestamp: Long)灏嗘椂闂存埑杞负yyyy/MM/dd HH:mm鏍煎紡鐨勬椂闂?/span> 鐩綍涓嬩竴椤佃鍒?nextTocUrl) 鏀寔鍗曚釜url 鏀寔url鏁扮粍 js涓繑鍥? [] 鎴? null 鎴? "" 鏃跺仠姝㈠姞杞戒笅涓€椤?/span> 8銆佷功婧愪箣銆屾鏂囥€?/span> 姝f枃瑙勫垯(content) 姝枃鍥剧墖閾炬帴鏀寔淇敼headers xxxxxxxxxx let options = { "headers" : { "User-Agent" : "xxxx" , "Referrer" : baseUrl , "Cookie" : "aaa=vbbb;" } }; '<img src="' + src + "," + JSON . stringify ( options ) + '">' book瀵硅薄鐨勫彲鐢ㄥ睘鎬?/span> 浣跨敤鏂规硶: 鍦╦s涓垨 {{}} 涓娇鐢?/span> book.灞炴€?/code> 鐨勬柟寮忓嵆鍙幏鍙栵紝濡傚湪姝f枃鍐呭鍚庡姞涓?/span> ##{{book.name+"姝f枃鍗?+title}} 鍙互鍑€鍖?涔﹀悕+姝f枃鍗?绔犺妭鍚嶇О锛堝锛氭垜鏄ぇ鏄庢槦姝f枃鍗风浜岀珷鎴戠埜鏄豹闂ㄦ€昏锛?杩欎竴绫荤殑瀛楃 xxxxxxxxxx bookUrl // 璇︽儏椤礥rl(鏈湴涔︽簮瀛樺偍瀹屾暣鏂囦欢璺緞) tocUrl // 鐩綍椤礥rl (toc=table of Contents) origin // 涔︽簮URL(榛樿BookType.local) originName // 涔︽簮鍚嶇О or 鏈湴涔︾睄鏂囦欢鍚?/span> name // 涔︾睄鍚嶇О(涔︽簮鑾峰彇) author // 浣滆€呭悕绉?涔︽簮鑾峰彇) kind // 鍒嗙被淇℃伅(涔︽簮鑾峰彇) customTag // 鍒嗙被淇℃伅(鐢ㄦ埛淇敼) coverUrl // 灏侀潰Url(涔︽簮鑾峰彇) customCoverUrl // 灏侀潰Url(鐢ㄦ埛淇敼) intro // 绠€浠嬪唴瀹?涔︽簮鑾峰彇) customIntro // 绠€浠嬪唴瀹?鐢ㄦ埛淇敼) charset // 鑷畾涔夊瓧绗﹂泦鍚嶇О(浠呴€傜敤浜庢湰鍦颁功绫? type // 0:text 1:audio group // 鑷畾涔夊垎缁勭储寮曞彿 latestChapterTitle // 鏈€鏂扮珷鑺傛爣棰?/span> latestChapterTime // 鏈€鏂扮珷鑺傛爣棰樻洿鏂版椂闂?/span> lastCheckTime // 鏈€杩戜竴娆℃洿鏂颁功绫嶄俊鎭殑鏃堕棿 lastCheckCount // 鏈€杩戜竴娆″彂鐜版柊绔犺妭鐨勬暟閲?/span> totalChapterNum // 涔︾睄鐩綍鎬绘暟 durChapterTitle // 褰撳墠绔犺妭鍚嶇О durChapterIndex // 褰撳墠绔犺妭绱㈠紩 durChapterPos // 褰撳墠闃呰鐨勮繘搴?棣栬瀛楃鐨勭储寮曚綅缃? durChapterTime // 鏈€杩戜竴娆¢槄璇讳功绫嶇殑鏃堕棿(鎵撳紑姝f枃鐨勬椂闂? canUpdate // 鍒锋柊涔︽灦鏃舵洿鏂颁功绫嶄俊鎭?/span> order // 鎵嬪姩鎺掑簭 originOrder //涔︽簮鎺掑簭 variable // 鑷畾涔変功绫嶅彉閲忎俊鎭?鐢ㄤ簬涔︽簮瑙勫垯妫€绱功绫嶄俊鎭? chapter瀵硅薄鐨勫彲鐢ㄥ睘鎬?/span> 浣跨敤鏂规硶: 鍦╦s涓垨 {{}} 涓娇鐢?/span> chapter.灞炴€?/code> 鐨勬柟寮忓嵆鍙幏鍙栵紝濡傚湪姝f枃鍐呭鍚庡姞涓?/span> ##{{chapter.title+chapter.index}} 鍙互鍑€鍖?绔犺妭鏍囬+搴忓彿(濡?绗簩绔?澶╀粰涓嬪嚒2) 杩欎竴绫荤殑瀛楃 xxxxxxxxxx url // 绔犺妭鍦板潃 title // 绔犺妭鏍囬 baseUrl // 鐢ㄦ潵鎷兼帴鐩稿url bookUrl // 涔︾睄鍦板潃 index // 绔犺妭搴忓彿 resourceUrl // 闊抽鐪熷疄URL tag // 绔犺妭淇℃伅 start // 绔犺妭璧峰浣嶇疆 end // 绔犺妭缁堟浣嶇疆 variable // 鍙橀噺   濡備笅绀轰緥锛屽湪璇︽儏椤?鐩綍椤?鍜屾鏂囦娇鐢ebView鍔犺浇锛屼緥锛?/span> xxxxxxxxxx {   "bookSourceComment" : "" ,   "bookSourceGroup" : " 鏈夊0" ,   "bookSourceName" : "鐚€矲M" ,   "bookSourceType" : 1 ,   "bookSourceUrl" : "https://www.missevan.com" ,   "customOrder" : 0 ,   "enabled" : false ,   "enabledExplore" : true ,   "lastUpdateTime" : 0 ,   "ruleBookInfo" : {},   "ruleContent" : {     "content" : "https://static.missevan.com/{{//*[contains(@class,\"pld-sound-active\")]/@data-soundurl64}}" ,     "sourceRegex" : "" ,     "webJs" : "" },   "ruleExplore" : {}, "ruleSearch" : {     "author" : "author" ,     "bookList" : "$.info.Datas" ,     "bookUrl" : "https://www.missevan.com/mdrama/drama/{{$.id}},{\"webView\":true}" ,     "coverUrl" : "cover " ,     "intro" : "abstract" ,     "kind" : "{{$.type_name}},{{$.catalog_name}}" ,     "lastChapter" : "newest " ,     "name" : "name" ,     "wordCount" : "catalog_name " },   "ruleToc" : {     "chapterList" : "@css:.scroll-list.btn-groups>a" ,     "chapterName" : "text" ,     "chapterUrl" : "href##$##,{\"webView\":true}" },   "searchUrl" : "https://www.missevan.com/dramaapi/search?s={{key}}&page=1" ,   "weight" : 0 }   姝枃涓嬩竴椤礥RL瑙勫垯(nextContentUrl) 鏀寔鍗曚釜url 鏀寔url鏁扮粍 WebViewJs(webJs) 鐢ㄤ簬妯℃嫙榧犳爣鐐瑰嚮绛夋搷浣滐紝蹇呴』鏈夎繑鍥炲€硷紙涓嶄负绌猴紝琛ㄧずwebjs鎵ц鎴愬姛锛屽惁鍒欎細鏃犻檺寰幆锛夛紝杩斿洖鍊间細鐢ㄤ簬璧勬簮姝垯鎴栨鏂囦腑 涓句釜鏍楀瓙锛屽湪webJs涓墽琛屼簡 getDecode() 锛屼娇姝f枃閮ㄥ垎瑙e瘑锛?/span> xxxxxxxxxx {     "bookSourceGroup" : "闃呰3.0涔︽簮鍚堥泦" ,     "bookSourceName" : "馃敟鏂嬩功鑻? ,     "bookSourceType" : 0 ,     "bookSourceUrl" : "https://www.zhaishuyuan.com" ,     "bookUrlPattern" : "" ,     "customOrder" : 11 ,     "enabled" : false ,     "enabledExplore" : false ,     "exploreUrl" : "鐢风敓涔﹀簱::/shuku/0_1_0_0_0_{{page}}_0_0\n鐢烽杩炶浇::/shuku/0_2_0_0_0_{{page}}_0_0" ,     "lastUpdateTime" : 0 ,     "loginUrl" : "" ,     "ruleBookInfo" : {       "author" : "@css:[property=og:novel:author]@content" ,       "coverUrl" : "@css:[property=og:image]@content" ,       "intro" : "@css:#bookintro@html" ,       "kind" : "@css:[property=og:novel:category]@content" ,       "lastChapter" : "@css:[property=og:novel:latest_chapter_name]@content" ,       "name" : "@css:[property=og:novel:book_name]@content" ,       "tocUrl" : "@css:[property=og:novel:read_url]@content" ,       "wordCount" : "@css:.count li:eq(3)>span@text"   },     "ruleContent" : {       "content" : "all" ,       "nextContentUrl" : "" ,       "webJs" : "getDecode();$('#content').html();"   },     "ruleExplore" : {       "author" : "//li[4]/a/text()" ,       "bookList" : "//ul[count(../ul)>10]" ,       "bookUrl" : "//li[3]/a/@href" ,       "coverUrl" : "##/book/(\\d+)##https://img.zhaishuyuan.com/bookpic/s$1.jpg###" ,       "intro" : "//li[6]/text()" ,       "kind" : "//li[2]/text()##\\[|\\]" ,       "lastChapter" : "//span/a/text()" ,       "name" : "//li[3]/a/text()" ,       "wordCount" : "//li[5]/text()"   },     "ruleSearch" : {       "author" : "//dd[2]/span[1]/text()" ,       "bookList" : "//*[@id=\"sitembox\"]/dl" ,       "bookUrl" : "//dt/a/@href" ,       "coverUrl" : "//img/@_src" ,       "intro" : "//dd[3]/html()" ,       "kind" : "//dd[2]/span[3]/text()" ,       "lastChapter" : "//dd[4]/a/text()" ,       "name" : "//h3/a//text()" ,       "wordCount" : "//dd[2]/span[4]/text()"   },     "ruleToc" : {       "chapterList" : ":href=\"(/chapter/[^\"]*)\"[^>]*>([^<]*)</a>([^<]*)" ,       "chapterName" : "$2" ,       "chapterUrl" : "$1,{\"webView\":true}" ,       "nextTocUrl" : "//strong/following-sibling::a/@href" ,       "updateTime" : "$3"   },     "searchUrl" : "/search/,{\n \"charset\": \"gbk\",\n \"method\": \"POST\",\n \"body\": \"page={{page}}&key={{key}}\"\n}" ,     "weight" : 0 } 璧勬簮姝e垯(sourceRegex) 鐢ㄤ簬鍡呮帰 涓€鑸儏鍐典笅鐨勬棤鑴戞暀绋嬪涓?/span> 绔犺妭閾炬帴鍚庨潰鍔? ,{"webView":true} 锛屼笉瑕佹磼鏁锋暦鐨勫啓鎴? tag.a@href,{"webView":true} 鎴?/span> $.link,{"webView":true} 锛屾纭啓娉曞: tag.a@href##$##{"webView":true} , {{@@tag.a@href}},{"webView":true} , tag.a@href@js:result+',{"webView":true}' 绛?/span> 鍦ㄦ湁鍡呮帰鍔熻兘鐨勬祻瑙堝櫒锛堝锛歷ia銆亁娴忚鍣ㄧ瓑锛変腑锛岃緭鍏ョ珷鑺傞摼鎺ャ€傛敞鎰? 鍗冧竾鍒甫,{"webView":true} 濯掍綋寮€濮嬫挱鏀惧悗浣跨敤娴忚鍣ㄧ殑鍡呮帰鍔熻兘锛屾煡鐪嬭祫婧愮殑閾炬帴 鍦ㄨ祫婧愭鍒欓噷濉啓璧勬簮閾炬帴鐨勬鍒欙紝涓€鑸啓 .*\.(mp3|mp4).* 杩欎釜灏卞彲浠ヤ簡 鏈€鍚庡湪姝f枃濉啓 <js>result</js> 濡備笅绀轰緥锛屽湪姝枃鍡呮帰mp3鍜宮p4鐨勮祫婧愶細 xxxxxxxxxx {   "bookSourceComment" : "" ,   "bookSourceGroup" : " 鏈夊0" ,   "bookSourceName" : "鐚€矲M" ,   "bookSourceType" : 1 ,   "bookSourceUrl" : "https://www.missevan.com" ,   "customOrder" : 0 ,   "enabled" : false ,   "enabledExplore" : true ,   "lastUpdateTime" : 0 ,   "ruleBookInfo" : {},   "ruleContent" : {     "content" : "https://static.missevan.com/{{//*[contains(@class,\"pld-sound-active\")]/@data-soundurl64}}" ,     "sourceRegex" : "" ,     "webJs" : "" },   "ruleExplore" : {}, "ruleSearch" : {     "author" : "author" ,     "bookList" : "$.info.Datas" ,     "bookUrl" : "https://www.missevan.com/mdrama/drama/{{$.id}},{\"webView\":true}" ,     "coverUrl" : "cover " ,     "intro" : "abstract" ,     "kind" : "{{$.type_name}},{{$.catalog_name}}" ,     "lastChapter" : "newest " ,     "name" : "name" ,     "wordCount" : "catalog_name " },   "ruleToc" : {     "chapterList" : "@css:.scroll-list.btn-groups>a" ,     "chapterName" : "text" ,     "chapterUrl" : "href##$##,{\"webView\":true}" },   "searchUrl" : "https://www.missevan.com/dramaapi/search?s={{key}}&page=1" ,   "weight" : 0 }   9銆佽ˉ鍏呰鏄?/span> 鏄剧ずjs鐨勬姤閿欎俊鎭?/span> xxxxxxxxxx ( function ( result ){     try {           // 澶勭悊result           // ...           // 褰撹繑鍥炵粨鏋滀负瀛楃涓叉椂           return result ;           // 褰撹繑鍥炵粨鏋滀负鍒楄〃鏃?/span>           return list ;   }     catch ( e ){           // 褰撹繑鍥炵粨鏋滀负瀛楃涓叉椂           return "" + e ;           // 褰撹繑鍥炵粨鏋滀负鍒楄〃鏃?/span>           return [ "" + e ];   //鍒楄〃瀵瑰簲鍚嶇О澶勫~<js>""+result</js>鏌ョ湅   } })( result ); 璇峰杽鐢ㄨ皟璇曞姛鑳?/span> 璋冭瘯鎼滅储 杈撳叆鍏抽敭瀛楋紝濡傦細 绯荤粺 璋冭瘯鍙戠幇 杈撳叆鍙戠幇URL锛屽锛?/span> 鏈堢エ姒?:https://www.qidian.com/rank/yuepiao?page={{page}} 璋冭瘯璇︽儏椤?/span> 杈撳叆璇︽儏椤礥RL锛屽锛?/span> https://m.qidian.com/book/1015609210 璋冭瘯鐩綍椤?/span> 杈撳叆鐩綍椤礥RL锛屽锛?/span> ++https://www.zhaishuyuan.com/read/30394 璋冭瘯姝f枃椤?/span> 杈撳叆姝枃椤礥RL锛屽锛?/span> --https://www.zhaishuyuan.com/chapter/30394/20940996 鏃犺剳 {"webView":true} 寰堟柟渚?/span> 鐗瑰埆娉ㄦ剰鐢?/span> JSON.stringify() 鏂规硶鏃讹紝闇€瑕佷繚璇丣SON瀵硅薄鐨剉alue閮芥槸 JavaScript 鐨?/span> String 绫诲瀷(鍦ㄩ槄璇?.0涓? 闄勶細 涔︽簮涓€ xxxxxxxxxx {   "bookSourceComment" : "" ,   "bookSourceGroup" : "CSS; 姝e垯" ,   "bookSourceName" : "灏忚2016" ,   "bookSourceType" : 0 ,   "bookSourceUrl" : "https://www.xiaoshuo2016.com" ,   "bookUrlPattern" : "" ,   "customOrder" : 0 ,   "enabled" : true ,   "enabledExplore" : false ,   "exploreUrl" : "" ,   "lastUpdateTime" : 0 ,   "loginUrl" : "" ,   "ruleBookInfo" : {     "author" : "##:author\"[^\"]+\"([^\"]*)##$1###" ,     "coverUrl" : "##og:image\"[^\"]+\"([^\"]*)##$1###" ,     "intro" : "##:description\"[^\"]+\"([\\w\\W]*?)\"/##$1###" ,     "kind" : "##:category\"[^\"]+\"([^\"]*)##$1###" ,     "lastChapter" : "##_chapter_name\"[^\"]+\"([^\"]*)##$1###" ,     "name" : "##:book_name\"[^\"]+\"([^\"]*)##$1###" ,     "tocUrl" : "" },   "ruleContent" : {   "content" : "@css:.articleDiv p@textNodes##鎼滅储.*鎵嬫満璁块棶|涓€绉掕浣?*|.*闃呰涓嬭浇|<!\\[CDATA\\[|\\]\\]>" ,     "nextContentUrl" : "" },   "ruleExplore" : {},   "ruleSearch" : {     "author" : "@css:p:eq(2)>a@text" ,     "bookList" : "@css:li.clearfix" ,     "bookUrl" : "@css:.name>a@href" ,     "coverUrl" : "@css:img@src" ,     "intro" : "@css:.note.clearfix p@text" ,     "kind" : "@css:.note_text,p:eq(4)@text" ,     "lastChapter" : "@css:p:eq(3)@text" ,     "name" : "@css:.name@text" },   "ruleToc" : {     "chapterList" : "-:<li><a[^\"]+\"([^\"]*)\">([^<]*)" ,     "chapterName" : "$2" ,     "chapterUrl" : "$1" ,     "nextTocUrl" : "" },   "searchUrl" : "/modules/article/search.php?searchkey={{key}}&submit=&page={{page}},{\n \"charset\": \"gbk\"\n}" ,   "weight" : 0 }     涔︽簮浜?/span> xxxxxxxxxx {   "bookSourceComment" : "" ,   "bookSourceGroup" : "XPath; 姝e垯" ,   "bookSourceName" : "閲囧ⅷ闃佹墜鏈虹増" ,   "bookSourceType" : 0 ,   "bookSourceUrl" : "https://m.caimoge.com" ,   "bookUrlPattern" : "" ,   "customOrder" : 0 ,   "enabled" : true ,   "enabledExplore" : false ,   "exploreUrl" : "" ,   "lastUpdateTime" : 0 ,   "loginUrl" : "" ,   "ruleBookInfo" : {     "author" : "//*[@property=\"og:novel:author\"]/@content" ,     "coverUrl" : "//*[@property=\"og:image\"]/@content" ,     "intro" : "//*[@property=\"og:description\"]/@content" ,     "kind" : "//*[@property=\"og:novel:category\"]/@content" ,     "lastChapter" : "//*[@id=\"newlist\"]//li[1]/a/text()" ,     "name" : "//*[@property=\"og:novel:book_name\"]/@content" ,     "tocUrl" : "//a[text()=\"闃呰\"]/@href" },   "ruleContent" : {     "content" : "//*[@id=\"content\"]" ,     "nextContentUrl" : "" },   "ruleExplore" : {},   "ruleSearch" : {     "author" : "//dd[2]/text()" ,     "bookList" : "//*[@id=\"sitebox\"]/dl" ,     "bookUrl" : "//dt/a/@href" ,     "coverUrl" : "//img/@src" ,     "kind" : "//dd[2]/span/text()" ,     "lastChapter" : "" ,     "name" : "//h3/a/text()" },   "ruleToc" : {     "chapterList" : ":href=\"(/read[^\"]*html)\">([^<]*)" ,     "chapterName" : "$2" ,     "chapterUrl" : "$1" ,     "nextTocUrl" : "//*[@id=\"pagelist\"]/*[position()>1]/@value" },   "searchUrl" : "/search.html,{\n \"method\": \"POST\",\n \"body\": \"searchkey={{key}}\"\n}" ,   "weight" : 0 }   涔︽簮涓?/span> xxxxxxxxxx {   "bookSourceComment" : "" ,   "bookSourceGroup" : "JSon" ,   "bookSourceName" : "鐚庨拱灏忚缃? ,   "bookSourceType" : 0 ,   "bookSourceUrl" : "http://api.book.lieying.cn" ,   "customOrder" : 0 ,   "enabled" : true ,   "enabledExplore" : false ,   "header" : "{\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36\"\n}" ,   "lastUpdateTime" : 0 ,   "ruleBookInfo" : {},   "ruleContent" : {     "content" : "$.chapter.body" },   "ruleExplore" : {},   "ruleSearch" : {     "author" : "$.author" ,     "bookList" : "$..books[*]" ,     "bookUrl" : "/Book/getChapterListByBookId?bookId={$._id}" ,     "coverUrl" : "$.cover" ,     "intro" : "$.shortIntro" ,     "kind" : "$.minorCate" ,     "lastChapter" : "$.lastChapter" ,     "name" : "$.title" },   "ruleToc" : {     "chapterList" : "$.chapterInfo.chapters.[*]" ,     "chapterName" : "$.title" ,     "chapterUrl" : "$.link" },   "searchUrl" : "/Book/search?query={{key}}&start={{(page-1)*20}}&limit=40&device_type=android&app_version=165" ,   "weight" : 0 }