[{"bookSourceUrl":"https:\/\/ffzy5.tv\/","bookSourceName":"非凡资源","enabledExplore":true,"enabled":true,"bookSourceGroup":"有声漫画","author":"","help":false,"html":"<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>非凡资源<\/title>\n<\/head>\n<body>\n<\/body>\n<script src=\"https:\/\/vc.jd.com\/web\/js\/jquery-3.1.1.min.js\"><\/script>\n<script>\nvar isCookieJar = true;\nvar BASE = \"https:\/\/ffzy5.tv\";\nvar UA = {\"User-Agent\":\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36\"};\n\n\/\/ === FlutterJSBridge ===\nclass FlutterJSBridge {\n    constructor(){}\n    async init(){try{if(window.flutter_inappwebview)await window.flutter_inappwebview.callHandler('CookieJar',isCookieJar)}catch(e){}}\n    async log(s){try{await window.flutter_inappwebview.callHandler('log',s)}catch(e){}}\n    async text(t,s){try{await window.flutter_inappwebview.callHandler('text',t,s)}catch(e){}}\n    async showToast(s){try{await window.flutter_inappwebview.callHandler('showToast',s)}catch(e){}}\n    async base64encode(s){try{return await window.flutter_inappwebview.callHandler('base64encode',s)}catch(e){return\"\"}}\n    async base64decode(s){try{return await window.flutter_inappwebview.callHandler('base64decode',s)}catch(e){return\"\"}}\n    async utf8ToGbkUrlEncoded(s){try{return await window.flutter_inappwebview.callHandler('utf8ToGbkUrlEncoded',s)}catch(e){return encodeURIComponent(s)}}\n    async webViewGetSource(u,js,html,body,header,key){try{return await window.flutter_inappwebview.callHandler('webViewGetSource',u,js,html,body,header,key)}catch(e){return\"\"}}\n    async showvideoplay(url,title,key){try{await window.flutter_inappwebview.callHandler('showvideoplay',url,title,key)}catch(e){}}\n    async startBrowser(url,title,header){try{await window.flutter_inappwebview.callHandler('startBrowser',url,title,header)}catch(e){}}\n}\n\n\/\/ === Http \/ Cache \/ Cookie ===\nclass Http {\n    constructor(){}\n    async Get(u,h,f){return await window.flutter_inappwebview.callHandler('http',\"get\",u,\"\",JSON.stringify(h),f,\"\")}\n    async Post(u,h,b,t,f){return await window.flutter_inappwebview.callHandler('http',\"post\",u,b,JSON.stringify(h),f,t)}\n}\nclass Cache {\n    async get(k){try{return await window.flutter_inappwebview.callHandler('cacheGet',k)}catch(e){return null}}\n    async set(k,v){try{await window.flutter_inappwebview.callHandler('cacheSet',k,v)}catch(e){}}\n}\nclass Cookie {\n    async get(u){try{return await window.flutter_inappwebview.callHandler('cookie',\"get\",u,\"\")}catch(e){return\"\"}}\n    async set(u,v){try{await window.flutter_inappwebview.callHandler('cookie',\"set\",u,v)}catch(e){}}\n}\n\nconst flutterBridge = new FlutterJSBridge();\nconst http = new Http();\nconst cache = new Cache();\nconst cookie = new Cookie();\nflutterBridge.init();\n\n\/\/ showvideoplay helpers\nvar PLAY_SVG=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgMjMgMjgiPjxkZWZzPjxmaWx0ZXIgaWQ9InMiPjxmZURyb3BTaGFkb3cgZHg9IjAiIGR5PSIwLjYiIHN0ZERldmlhdGlvbj0iMC43IiBmbG9vZC1jb2xvcj0iIzAwMCIgZmxvb2Qtb3BhY2l0eT0iMC4zNSIvPjwvZmlsdGVyPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjUsNCkiPjxwYXRoIGQ9Ik0wIDBoMTR2MTRIMHoiIGZpbGw9Im5vbmUiLz48ZyBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjMjg1OWM1IiBkPSJNNC41IDguODgyVjUuMTE4YTEgMSAwIDAgMSAxLjQ0Ny0uODk0bDMuNzY0IDEuODgyYTEgMSAwIDAgMSAwIDEuNzg4TDUuOTQ3IDkuNzc2QTEgMSAwIDAgMSA0LjUgOC44ODIiLz48cGF0aCBmaWxsPSIjOGZiZmZhIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjA5LjA4NGEuNzUuNzUgMCAwIDAtLjIzMiAxLjQ4MkE1LjUwMiA1LjUwMiAwIDAgMSA3IDEyLjVhNS41IDUuNSAwIDAgMS01LjExNi0zLjQ3NWEuNzUuNzUgMCAwIDAtMS4zOTQuNTUyQTcuMDAyIDcuMDAyIDAgMCAwIDE0IDdBNyA3IDAgMCAwIDguMDkuMDg0bS0yLjQ2NiAxLjQ5QS43NS43NSAwIDAgMCA1LjI1MS4xMjNhNyA3IDAgMCAwLS45MzguMzE0YS43NS43NSAwIDAgMCAuNTc2IDEuMzg1cS4zNTYtLjE0OC43MzUtLjI0Nk0zLjE3IDIuOTU1YS43NS43NSAwIDAgMC0xLjA0NC0xLjA3NkE3IDcgMCAwIDAgLjkxNyAzLjQzNWEuNzUuNzUgMCAxIDAgMS4zMDMuNzQ0Yy4yNTgtLjQ1Mi41NzgtLjg2NC45NS0xLjIyNE0xLjU1NCA2LjEyN2EuNzUuNzUgMCAxIDAtMS40ODUtLjIxQTcgNyAwIDAgMCAwIDYuOTAzYS43NS43NSAwIDEgMCAxLjUgMHEwLS4zOTYuMDU0LS43NzYiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L2c+PHRleHQgeD0iMTEuNSIgeT0iMjUuNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxLjMiIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxQaW5nRmFuZyBTQyxNaWNyb3NvZnQgWWFIZWksc2Fucy1zZXJpZiIgZmlsbD0iIzI4NTljNSIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbHRlcj0idXJsKCNzKSI+54K55Ye75pKt5pS+PC90ZXh0Pjwvc3ZnPg==\";\n$.showvideoplay=function(u,t,k){flutterBridge.showvideoplay(u,t,k)};\nfunction showvideoplay(u,t,k){flutterBridge.showvideoplay(u,t,k)}\n\nfunction enc(s){return encodeURIComponent(s)}\nfunction dec(s){return decodeURIComponent(s)}\n\n\/\/ === 搜索 ===\nasync function search(key,page){\n    if(page>2)return\"[]\";\n    var u=BASE+\"\/index.php\/vod\/search\/page\/\"+page+\"\/wd\/\"+encodeURIComponent(key)+\".html\";\n    var r=await http.Get(u,UA,true);\n    flutterBridge.text(0,r.data);\n    var books=[];\n    var $doc=$($.parseHTML(r.data));\n    $doc.find(\"a.videoName\").each(function(){\n        var $e=$(this);\n        var href=$e.attr(\"href\");\n        if(!href||href.indexOf(\"detail\")<0)return;\n        var title=$e.clone().children(\"i\").remove().end().text().trim()||\"\";\n        var status=$e.find(\"i\").text()||\"\";\n        var $parent=$e.parent();\n        var kind=$parent.find(\"span.category\").text()||\"\";\n        books.push({bookUrl:BASE+href,name:title,author:kind,kind:\"\",coverUrl:\"\",intro:\"\",tocUrl:BASE+href,wordCount:\"\",type:0,latestChapterTitle:status});\n    });\n    return JSON.stringify(books);\n}\n\n\/\/ === 详情 ===\nasync function info(bookurl){\n    var r=await http.Get(bookurl,UA,true);\n    var html=$.parseHTML(r.data);\n    var $h=$(html);\n    var title=$h.find(\"title\").text().replace(\/详情介绍.*$\/,\"\").replace(\/ - 非凡资源网$\/,\"\").trim();\n    var cover=$h.find(\"img\").attr(\"src\")||\"\";\n    if(cover&&!cover.startsWith(\"http\"))cover=BASE+cover;\n    var intro=$h.find(\"meta[property='og:description']\").attr(\"content\")||\"\";\n    return JSON.stringify({bookUrl:bookurl,name:title,author:\"\",kind:\"\",coverUrl:cover,intro:intro?\"@html:\"+intro:\"\",tocUrl:bookurl,wordCount:\"\",type:0,latestChapterTitle:\"\"});\n}\n\n\/\/ === 目录\/选集 (m3u8直链) ===\nasync function chapter(tocUrl){\n    var r=await http.Get(tocUrl,UA,true);\n    var html=$.parseHTML(r.data);\n    var $h=$(html);\n    var chapters=[];\n    $h.find(\".ffm3u8 li a\").each(function(i){\n        var $a=$(this);\n        var href=$a.attr('href');\n        if(!href||href.indexOf('m3u8')<0)return;\n        var name=$a.attr('title')||$a.text().replace(\/\\$.*\/,\"\")||\"\";\n        chapters.push({name:name,chapterId:enc(href),index:i,isPay:false,isVip:false,isVolume:false,tag:\"\"});\n    });\n    return JSON.stringify(chapters);\n}\n\n\/\/ === 播放 (限制点击) ===\nasync function content(url,bookurl){\n    var playUrl=dec(url);\n    if(!playUrl||playUrl.indexOf('m3u8')<0)return'无效地址';\n    return'<img src=\"data:image\/svg+xml;base64,'+PLAY_SVG+',{&quot;js&quot;:&quot;showvideoplay(\\''+playUrl+'\\',\\'非凡资源\\',\\''+playUrl+'\\')&quot;}\"\/>';\n}\n\n\/\/ === 发现 ===\nasync function getfinds(){\n    return JSON.stringify([\n        {title:\"电影\",url:\"\/index.php\/vod\/type\/id\/1.html\",type:0},\n        {title:\"连续剧\",url:\"\/index.php\/vod\/type\/id\/2.html\",type:0},\n        {title:\"动漫\",url:\"\/index.php\/vod\/type\/id\/4.html\",type:0},\n        {title:\"综艺\",url:\"\/index.php\/vod\/type\/id\/3.html\",type:0}\n    ]);\n}\n\nasync function find(url,page){\n    if(page>2)return\"[]\";\n    var full=BASE+url;\n    if(page>1)full=BASE+\"\/index.php\/vod\/type\/id\/\"+url.match(\/id\\\/(\\d+)\/)[1]+\"\/page\/\"+page+\".html\";\n    var r=await http.Get(full,UA,true);\n    var html=$.parseHTML(r.data);\n    var books=[];\n    $(html).find(\"li a[href*='\/vod\/detail\/']\").has(\"i\").each(function(){\n        var $e=$(this);\n        var href=$e.attr('href');\n        if(!href)return;\n        var title=$e.clone().children(\"i\").remove().end().text()||\"\";\n        var status=$e.find(\"i\").text()||\"\";\n        books.push({bookUrl:BASE+href,name:title,author:\"\",kind:\"\",coverUrl:\"\",intro:\"\",tocUrl:BASE+href,wordCount:\"\",type:0,latestChapterTitle:status});\n    });\n    return JSON.stringify(books);\n}\n\nasync function getloginurl(){return BASE}\nasync function login(){}\nasync function pay(b,u){}\nasync function imagedecrypt(u,i){}\nasync function shouldOverrideUrlLoading(u){return true}\n<\/script>\n<\/html>\n","login":false,"lastUpdateTime":"1780903522479"}]