mirror of
https://github.com/Tthfyth/source.git
synced 2026-05-07 16:14:07 +08:00
2 lines
44 KiB
Plaintext
2 lines
44 KiB
Plaintext
涔︽簮瑙勫垯锛氫粠鍏ラ棬鍒板叆鍦?/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> 路浣嶇疆姝g潃鏁颁粠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瑙勫垯 姝e垯涔婣llInOne 鍙兘鍦ㄦ悳绱㈠垪琛ㄣ€佸彂鐜板垪琛ㄣ€佽鎯呴〉棰勫姞杞藉拰鐩綍鍒楄〃涓娇鐢?/span> 蹇呴』浠? : 寮€澶?/span> 鏁欑▼ Regex涓撻 锛堝凡404锛?/p> 璇硶 锛堝凡404锛?span>銆?/span> 鏂规硶 锛堝凡404锛?span>銆?/span> 寮曟搸 锛堝凡404锛?/p> 渚嬪瓙瑙佹渶鍚庣殑銆愪功婧愪竴銆戠殑鐩綍椤佃鍒欙紝鏈€鍓嶉潰鐨?/span> - 琛ㄧず鐩綍鍊掑簭锛屼互鍙娿€愪功婧愪簩銆戠殑鐩綍椤佃鍒?/span> 姝e垯涔婳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浠g悊,socks4 socks5浠g悊璁剧疆 xxxxxxxxxx // socks5浠g悊 { "proxy" : "socks5://127.0.0.1:1080" } // http浠g悊 { "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> {{}} 鍙湪 {{}} 涓娇鐢ㄤ换鎰忚鍒欙紙姝e垯闄ゅ锛燂級锛岄粯璁や负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瑙g爜锛岃繑鍥炵被鍨婼tring java . base64Decode ( str : String ) java . base64Decode ( str : String , flags : Int ) 鈥?/span> //base64瑙g爜锛岃繑鍥炵被鍨婤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鏂囦欢瑙e帇锛寊ipPath涓哄帇缂╂枃浠惰矾寰勶紝杩斿洖String瑙e帇鐩稿璺緞锛屼細鍒犻櫎鍘熸枃浠跺彧淇濈暀瑙e帇鍚庣殑鏂囦欢 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瀽瀛椾綋,杩斿洖瀛椾綋瑙f瀽绫籕ueryTTF? java . queryBase64TTF ( base64 : String ? ) 鈥?/span> //str鏀寔url,鏈湴鏂囦欢,base64,鑷姩鍒ゆ柇,鑷姩缂撳瓨,杩斿洖瀛椾綋瑙f瀽绫籕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瑙g爜涓築yteArray?,str涓轰紶鍏ョ殑AES鍔犲瘑鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesDecodeToByteArray ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //AES瑙g爜涓篠tring?,str涓轰紶鍏ョ殑AES鍔犲瘑鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesDecodeToString ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //宸茬粡base64鐨凙ES瑙g爜涓築yteArray?,str涓築ase64缂栫爜鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesBase64DecodeToByteArray ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //宸茬粡base64鐨凙ES瑙g爜涓篠tring?,str涓築ase64缂栫爜鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesBase64DecodeToString ( str : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes涓築yteArray?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToByteArray ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes涓篠tring?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToString ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes鍚嶣ase64鍖栫殑ByteArray?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToBase64ByteArray ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> //鍔犲瘑aes鍚嶣ase64鍖栫殑String?锛宒ata涓轰紶鍏ョ殑鍘熷鏁版嵁锛宬ey涓篈ES瑙e瘑key锛宼ransformation涓篈ES鍔犲瘑鏂瑰紡锛宨v涓篍CB妯″紡鐨勫亸绉诲悜閲?/span> java . aesEncodeToBase64String ( data : String , key : String , transformation : String , iv : String ) 鈥?/span> /**************浠ヤ笅閮ㄥ垎鏂规硶鐢变簬JAVA涓嶆敮鎸佸弬鏁伴粯璁ゅ€硷紝璋冪敤鏃朵笉鑳界渷鐣?**************/ //璁剧疆闇€瑙f瀽鐨勫唴瀹筩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姝e垯(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) 鍙兘浣跨敤姝e垯涔婣llInOne鎴栬€卝s 姝e垯涔婣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) 姝f枃鍥剧墖閾炬帴鏀寔淇敼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 } 姝f枃涓嬩竴椤礥RL瑙勫垯(nextContentUrl) 鏀寔鍗曚釜url 鏀寔url鏁扮粍 WebViewJs(webJs) 鐢ㄤ簬妯℃嫙榧犳爣鐐瑰嚮绛夋搷浣滐紝蹇呴』鏈夎繑鍥炲€硷紙涓嶄负绌猴紝琛ㄧずwebjs鎵ц鎴愬姛锛屽惁鍒欎細鏃犻檺寰幆锛夛紝杩斿洖鍊间細鐢ㄤ簬璧勬簮姝e垯鎴栨鏂囦腑 涓句釜鏍楀瓙锛屽湪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> 濡備笅绀轰緥锛屽湪姝f枃鍡呮帰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> 杈撳叆姝f枃椤礥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 }
|