非凡资源
https://ffzy5.tv/
Simwoodone (12535)06/08 15:25
该用户很懒,什么介绍也没有写!
{
"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+',{"js":"showvideoplay(\\''+playUrl+'\\',\\'非凡资源\\',\\''+playUrl+'\\')"}\"\/>';\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"
}