农民影视

https://www.guoshuquan.com/

Simwoodone (12535)06/08 15:25

该用户很懒,什么介绍也没有写!
二维码导入(APP尚未完成该功能)
{
    "bookSourceUrl": "https:\/\/www.guoshuquan.com\/",
    "bookSourceName": "农民影视",
    "enabledExplore": true,
    "enabled": true,
    "bookSourceGroup": "有声漫画",
    "author": "",
    "help": true,
    "html": "<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>农民影视 - 轻悦时光书源<\/title>\n<\/head>\n<body>\n<\/body>\n\n<script src=\"https:\/\/vc.jd.com\/web\/js\/jquery-3.1.1.min.js\"><\/script>\n<script>\n  var isCookieJar = true;\n  class FlutterJSBridge {\n    constructor() { this.init(); }\n    init() {\n      if (window.flutter_inappwebview) {\n        this.isReady = true;\n        this.CookieJar();\n      } else {\n        window.addEventListener('flutterInAppWebViewPlatformReady', () => {\n          this.isReady = true;\n          this.CookieJar();\n        });\n      }\n    }\n    async CookieJar() {\n      try { await window.flutter_inappwebview.callHandler('CookieJar', isCookieJar); }\n      catch (error) { console.error('CookieJar失败:', error); }\n    }\n    async getbuildNumber() { try { return await window.flutter_inappwebview.callHandler('buildNumber'); } catch (e) { return 0; } }\n    async getversion() { try { return await window.flutter_inappwebview.callHandler('version'); } catch (e) { return \"0.0.0\"; } }\n    async htmlToText(str) { try { return await window.flutter_inappwebview.callHandler('htmlToText', str); } catch (e) { return \"\"; } }\n    async getDeviceid() { try { return await window.flutter_inappwebview.callHandler('id'); } catch (e) { return \"\"; } }\n    async getDevice() { try { return await window.flutter_inappwebview.callHandler('device'); } catch (e) { return \"\"; } }\n    async log(str) { try { return await window.flutter_inappwebview.callHandler('log', str); } catch (e) { return false; } }\n    async showToast(str) { try { return await window.flutter_inappwebview.callHandler('showToast', str); } catch (e) { return false; } }\n    async showLongToast(str) { try { return await window.flutter_inappwebview.callHandler('showLongToast', str); } catch (e) { return false; } }\n    async getWebViewUA() { try { return await window.flutter_inappwebview.callHandler('getWebViewUA'); } catch (e) { return \"\"; } }\n    async openurl(url) { try { return await window.flutter_inappwebview.callHandler('openurl', url, \"\"); } catch (e) { return false; } }\n    async startBrowser(url, title, header) { try { return await window.flutter_inappwebview.callHandler('startBrowser', url, title, header); } catch (e) { return \"\"; } }\n    async showvideoplay(url, title, key) { try { return await window.flutter_inappwebview.callHandler('showvideoplay', url, title, key); } catch (e) { return \"\"; } }\n    async webview(url, js, html, body, header) {\n      try { return await window.flutter_inappwebview.callHandler('webview', url, js, html, body, header, \"\", \"\"); }\n      catch (e) { return \"\"; }\n    }\n    async webViewGetSource(url, js, html, body, header, urlregex) {\n      try { return await window.flutter_inappwebview.callHandler('webview', url, js, html, body, header, \"\", urlregex); }\n      catch (e) { return \"\"; }\n    }\n    async webViewGetAjax(url, html, body, header, ajaxregex) {\n      try { return await window.flutter_inappwebview.callHandler('webviewajax', url, html, body, header, ajaxregex); }\n      catch (e) { return \"\"; }\n    }\n  }\n\n  class Http {\n    constructor() { this.open = false; this.requestTimestamps = []; this.rateLimit = 5; this.rateLimitWindow = 1000; }\n    async checkRateLimit() {\n      if (!this.open) return;\n      const now = Date.now();\n      this.requestTimestamps = this.requestTimestamps.filter(t => now - t < this.rateLimitWindow);\n      if (this.requestTimestamps.length >= this.rateLimit) {\n        const waitTime = this.rateLimitWindow - (now - this.requestTimestamps[0]);\n        await new Promise(r => setTimeout(r, waitTime));\n        return this.checkRateLimit();\n      }\n      this.requestTimestamps.push(now);\n    }\n    async Get(url, headers, followRedirects) {\n      try { await this.checkRateLimit(); return await window.flutter_inappwebview.callHandler('http', \"get\", url, \"\", JSON.stringify(headers), followRedirects, \"\"); }\n      catch (e) { return null; }\n    }\n    async Post(url, headers, body, contenttype, followRedirects) {\n      try { await this.checkRateLimit(); return await window.flutter_inappwebview.callHandler('http', \"post\", url, body, JSON.stringify(headers), followRedirects, contenttype); }\n      catch (e) { return null; }\n    }\n  }\n\n  class Cache {\n    constructor() {}\n    async get(key) { try { return await window.flutter_inappwebview.callHandler('cache.get', key); } catch (e) { return null; } }\n    async set(key, value) { try { return await window.flutter_inappwebview.callHandler('cache.set', key, value); } catch (e) { return null; } }\n    async remove(key) { try { return await window.flutter_inappwebview.callHandler('cache.remove', key); } catch (e) { return null; } }\n    async getLoginInfo() { return await this.get(\"LoginInfo\"); }\n    async putLoginInfo(info) { return await this.set(\"LoginInfo\", info); }\n  }\n\n  class Cookie {\n    constructor() {}\n    async get(url) { try { return await window.flutter_inappwebview.callHandler('cookie.get', url); } catch (e) { return null; } }\n    async remove(url) { try { return await window.flutter_inappwebview.callHandler('cookie.remove', url); } catch (e) { return null; } }\n    async set(url, value) { try { return await window.flutter_inappwebview.callHandler('cookie.set', url, value); } catch (e) { return null; } }\n    async setCookie(url, key, value) { try { return await window.flutter_inappwebview.callHandler('cookie.setcookie', url, key, value); } catch (e) { return null; } }\n    async getCookie(url, value) { try { return await window.flutter_inappwebview.callHandler('cookie.getCookie', url, value); } catch (e) { return null; } }\n  }\n\n  const flutterBridge = new FlutterJSBridge();\n  const cache = new Cache();\n  const http = new Http();\n  const cookie = new Cookie();\n\n  const BASE_URL = 'https:\/\/www.guoshuquan.com';\n  const UA = 'Mozilla\/5.0 (Linux; Android 13) AppleWebKit\/537.36';\n\n  function pick() {\n    for (let i = 0; i < arguments.length; i++) {\n      const v = arguments[i];\n      if (v !== undefined && v !== null && String(v) !== '' && String(v) !== 'null' && String(v) !== 'undefined') return v;\n    }\n    return '';\n  }\n\n  function asText(res) {\n    if (res === undefined || res === null) return '';\n    if (typeof res === 'string') return res;\n    if (typeof res.data === 'string') return res.data;\n    if (typeof res.body === 'string' && !res.data) return res.body;\n    try { return JSON.stringify(res.data !== undefined ? res.data : res); } catch (e) { return ''; }\n  }\n\n  function safeJson(text, fallback) {\n    try { return JSON.parse(text); } catch (e) { return fallback; }\n  }\n\n  async function fetchHtml(url, ref) {\n    var headers = { 'User-Agent': UA };\n    if (ref) headers['Referer'] = ref;\n    var res = await http.Get(url, headers, true);\n    return asText(res);\n  }\n\n  function encodeBookUrl(detailUrl) {\n    return 'gsq:\/\/detail?url=' + encodeURIComponent(detailUrl);\n  }\n  function decodeBookUrl(bookUrl) {\n    var marker = 'url=';\n    var idx = String(bookUrl || '').indexOf(marker);\n    if (idx < 0) return decodeURIComponent(bookUrl);\n    return decodeURIComponent(String(bookUrl).slice(idx + marker.length));\n  }\n\n  function encodeContentUrl(playUrl) {\n    return 'gsq:\/\/play?url=' + encodeURIComponent(playUrl);\n  }\n  function decodeContentUrl(url) {\n    var marker = 'url=';\n    var idx = String(url || '').indexOf(marker);\n    if (idx < 0) return decodeURIComponent(url);\n    return decodeURIComponent(String(url).slice(idx + marker.length));\n  }\n\n  \/\/ ==================== 搜索 ====================\n  async function search(key, page) {\n    page = page || 1;\n    if (page > 1) return '[]';\n    var keyword = String(key || '').trim();\n    if (!keyword) return '[]';\n\n    var searchUrl = BASE_URL + '\/sousuo.html?keyword=' + encodeURIComponent(keyword);\n    var html = await fetchHtml(searchUrl);\n    if (!html) return '[]';\n\n    var result = [];\n    var regex = \/<a[^>]*stui-vodlist__thumb[^>]*href=\"([^\"]+)\"[^>]*title=\"([^\"]+)\"[^>]*data-original=\"([^\"]+)\"\/g;\n    var match;\n    while ((match = regex.exec(html)) !== null) {\n      var detailUrl = match[1];\n      var name = match[2];\n      var cover = match[3];\n      var statusMatch = html.slice(match.index, match.index + 500).match(\/pic-text[^>]*>([^<]+)<\/);\n      var status = statusMatch ? statusMatch[1].trim() : '';\n      if (!name || !detailUrl) continue;\n      result.push({\n        bookUrl: encodeBookUrl(detailUrl),\n        name: name,\n        author: '',\n        kind: '',\n        coverUrl: cover,\n        intro: '',\n        tocUrl: encodeBookUrl(detailUrl),\n        wordCount: '',\n        type: 0,\n        latestChapterTitle: status\n      });\n    }\n    return JSON.stringify(result);\n  }\n\n  \/\/ ==================== 详情 ====================\n  async function info(bookurl) {\n    var detailUrl = decodeBookUrl(bookurl);\n    if (detailUrl.indexOf('http') !== 0) detailUrl = BASE_URL + detailUrl;\n\n    var js = \"(function(){var t=document.title||'';t=t.replace(\/[-_].*农民影视.*$\/,'').trim();\" +\n      \"var c=document.querySelector('[data-original]');var cover=c?c.getAttribute('data-original'):'';\" +\n      \"var d=document.querySelector('meta[name=description]');var desc=d?d.getAttribute('content'):'';\" +\n      \"var k=document.querySelector('meta[name=keywords]');var kw=k?k.getAttribute('content'):'';\" +\n      \"return JSON.stringify({name:t,coverUrl:cover,intro:desc,kind:kw});\" +\n      \"})()\";\n\n    try {\n      var pageData = await flutterBridge.webview(detailUrl, js, '', '', '{}');\n      var info = safeJson(pageData, {});\n      return JSON.stringify({\n        bookUrl: bookurl,\n        name: pick(info.name, '未知'),\n        author: '',\n        kind: '',\n        coverUrl: pick(info.coverUrl, ''),\n        intro: pick(info.intro, ''),\n        tocUrl: encodeBookUrl(detailUrl),\n        wordCount: '',\n        type: 0,\n        latestChapterTitle: ''\n      });\n    } catch (e) {\n      var html2 = await fetchHtml(detailUrl);\n      var tMatch = html2.match(\/<title>([^<]+)<\\\/title>\/);\n      var name2 = tMatch ? tMatch[1].replace(\/[-_].*农民影视.*$\/, '').trim() : '未知';\n      var cMatch = html2.match(\/data-original=\"([^\"]+)\"\/);\n      var cover2 = cMatch ? cMatch[1] : '';\n      var dMatch = html2.match(\/<meta name=.description. content=.([^\"]+)\"\/);\n      var intro2 = dMatch ? dMatch[1] : '';\n      return JSON.stringify({\n        bookUrl: bookurl,\n        name: name2,\n        author: '',\n        kind: '',\n        coverUrl: cover2,\n        intro: intro2,\n        tocUrl: encodeBookUrl(detailUrl),\n        wordCount: '',\n        type: 0,\n        latestChapterTitle: ''\n      });\n    }\n  }\n\n  \/\/ ==================== 目录 ====================\n  async function chapter(tocUrl, bookurl) {\n    var detailUrl = decodeBookUrl(tocUrl || bookurl);\n    if (detailUrl.indexOf('http') !== 0) detailUrl = BASE_URL + detailUrl;\n\n    var js = \"(function(){var eps=[];\" +\n      \"var items=document.querySelectorAll('[class*=playlist] a[href]');\" +\n      \"for(var i=0;i<items.length;i++){\" +\n      \"var a=items[i];var href=a.getAttribute('href');\" +\n      \"var text=a.textContent.trim();\" +\n      \"if(href&&text)eps.push({name:text,url:href});}\" +\n      \"return JSON.stringify(eps);\" +\n      \"})()\";\n\n    try {\n      var epsData = await flutterBridge.webview(detailUrl, js, '', '', '{}');\n      var eps = safeJson(epsData, []);\n      var result = [];\n      for (var i = 0; i < eps.length; i++) {\n        result.push({\n          name: eps[i].name || ('第' + (i + 1) + '集'),\n          chapterId: encodeContentUrl(eps[i].url),\n          index: i,\n          isPay: false,\n          isVip: false,\n          isVolume: false,\n          tag: ''\n        });\n      }\n      return JSON.stringify(result);\n    } catch (e) {\n      return '[]';\n    }\n  }\n\n  \/\/ ==================== 正文(播放按钮-点击才播放) ====================\n  async function content(url, bookurl) {\n    var playUrl = decodeContentUrl(url);\n    if (playUrl.indexOf('http') !== 0) playUrl = BASE_URL + playUrl;\n\n    var js = \"(function(){\" +\n      \"var scripts=document.querySelectorAll('script');\" +\n      \"for(var i=0;i<scripts.length;i++){\" +\n      \"var t=scripts[i].textContent||'';\" +\n      \"var m=t.match(\/thisUrl\\\\s*=\\\\s*\\\"([^\\\"]+?)\\\"\/);\" +\n      \"if(m)return m[1];\" +\n      \"}\" +\n      \"return '';\" +\n      \"})()\";\n\n    try {\n      var videoUrl = await flutterBridge.webview(playUrl, js, '', '', '{}');\n      videoUrl = (videoUrl || '').replace(\/\\\\\\\/\/g, '\/').trim();\n      \n      if (videoUrl) {\n        return '<img src=\"data:image\/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgMjMgMjgiPjxkZWZzPjxmaWx0ZXIgaWQ9InMiPjxmZURyb3BTaGFkb3cgZHg9IjAiIGR5PSIwLjYiIHN0ZERldmlhdGlvbj0iMC43IiBmbG9vZC1jb2xvcj0iIzAwMCIgZmxvb2Qtb3BhY2l0eT0iMC4zNSIvPjwvZmlsdGVyPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjUsNCkiPjxwYXRoIGQ9Ik0wIDBoMTR2MTRIMHoiIGZpbGw9Im5vbmUiLz48ZyBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjMjg1OWM1IiBkPSJNNC41IDguODgyVjUuMTE4YTEgMSAwIDAgMSAxLjQ0Ny0uODk0bDMuNzY0IDEuODgyYTEgMSAwIDAgMSAwIDEuNzg4TDUuOTQ3IDkuNzc2QTEgMSAwIDAgMSA0LjUgOC44ODIiLz48cGF0aCBmaWxsPSIjOGZiZmZhIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjA5LjA4NGEuNzUuNzUgMCAwIDAtLjIzMiAxLjQ4MkE1LjUwMiA1LjUwMiAwIDAgMSA3IDEyLjVhNS41IDUuNSAwIDAgMS01LjExNi0zLjQ3NWEuNzUuNzUgMCAwIDAtMS4zOTQuNTUyQTcuMDAyIDcuMDAyIDAgMCAwIDE0IDdBNyA3IDAgMCAwIDguMDkuMDg0bS0yLjQ2NiAxLjQ5QS43NS43NSAwIDAgMCA1LjI1MS4xMjNhNyA3IDAgMCAwLS45MzguMzE0YS43NS43NSAwIDAgMCAuNTc2IDEuMzg1cS4zNTYtLjE0OC43MzUtLjI0Nk0zLjE3IDIuOTU1YS43NS43NSAwIDAgMC0xLjA0NC0xLjA3NkE3IDcgMCAwIDAgLjkxNyAzLjQzNWEuNzUuNzUgMCAxIDAgMS4zMDMuNzQ0Yy4yNTgtLjQ1Mi41NzgtLjg2NC45NS0xLjIyNE0xLjU1NCA2LjEyN2EuNzUuNzUgMCAxIDAtMS40ODUtLjIxQTcgNyAwIDAgMCAwIDYuOTAzYS43NS43NSAwIDEgMCAxLjUgMHEwLS4zOTYuMDU0LS43NzYiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L2c+PHRleHQgeD0iMTEuNSIgeT0iMjUuNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxLjMiIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxQaW5nRmFuZyBTQyxNaWNyb3NvZnQgWWFIZWksc2Fucy1zZXJpZiIgZmlsbD0iIzI4NTljNSIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbHRlcj0idXJsKCNzKSI+54K55Ye75pKt5pS+PC90ZXh0Pjwvc3ZnPg==,{&quot;js&quot;:&quot;flutterBridge.showvideoplay(\\''+videoUrl+'\\',\\'农民影视\\',\\''+videoUrl+'\\')&quot;}\"\/>';\n      }\n      return '未找到视频地址\\n' + playUrl;\n    } catch (e) {\n      return '加载失败: ' + e.message;\n    }\n  }\n\n  async function getfinds() {\n    var movies = [\n      { t: '喜剧片', id: 3863 },{ t: '爱情片', id: 3864 },{ t: '动作片', id: 3865 },\n      { t: '科幻片', id: 3866 },{ t: '恐怖片', id: 3867 },{ t: '战争片', id: 3868 },\n      { t: '剧情片', id: 3869 },{ t: '动画片', id: 3870 },{ t: '纪录片', id: 3871 }\n    ];\n    var tvs = [\n      { t: '大陆剧', id: 3873 },{ t: '港台剧', id: 3874 },{ t: '韩国剧', id: 3875 },\n      { t: '日本剧', id: 3876 },{ t: '欧美剧', id: 3877 },{ t: '泰国剧', id: 3878 }\n    ];\n    var varieties = [\n      { t: '国产综艺', id: 3883 },{ t: '港台综艺', id: 3884 },\n      { t: '日韩综艺', id: 3885 },{ t: '欧美综艺', id: 3886 }\n    ];\n    var animes = [\n      { t: '国产动漫', id: 3893 },{ t: '港台动漫', id: 3894 },\n      { t: '日韩动漫', id: 3895 },{ t: '欧美动漫', id: 3896 }\n    ];\n\n    var finds = [];\n\n    function addSection(title, items) {\n      finds.push({ title: title, url: '', width: 3 });\n      for (var i = 0; i < items.length; i++) {\n        finds.push({\n          title: items[i].t,\n          url: BASE_URL + '\/sortlist\/' + items[i].id + '\/last-{{page}}.html',\n          type: 0, width: 0\n        });\n      }\n    }\n\n    addSection('电影', movies);\n    addSection('电视剧', tvs);\n    addSection('综艺', varieties);\n    addSection('动漫', animes);\n    finds.push({ title: '短剧', url: '', width: 3 });\n    finds.push({ title: '最新短剧', url: BASE_URL + '\/sortlist\/3857\/last-{{page}}.html', type: 0, width: 0 });\n\n    return JSON.stringify(finds);\n  }\n\n  async function find(url, page) {\n    page = page || 1;\n    var realUrl = String(url || '').replace(\/\\{\\{page\\}\\}\/g, String(page));\n    if (!realUrl || realUrl.indexOf('http') !== 0) return '[]';\n\n    var html = await fetchHtml(realUrl);\n    if (!html) return '[]';\n\n    var result = [];\n    var regex = \/<a[^>]*stui-vodlist__thumb[^>]*href=\"([^\"]+)\"[^>]*title=\"([^\"]+)\"[^>]*data-original=\"([^\"]+)\"\/g;\n    var match;\n    while ((match = regex.exec(html)) !== null) {\n      var detailUrl = match[1];\n      var name = match[2];\n      var cover = match[3];\n      var statusMatch = html.slice(match.index, match.index + 500).match(\/pic-text[^>]*>([^<]+)<\/);\n      var status = statusMatch ? statusMatch[1].trim() : '';\n      if (!name || !detailUrl) continue;\n      result.push({\n        bookUrl: encodeBookUrl(detailUrl),\n        name: name,\n        author: '',\n        kind: '',\n        coverUrl: cover,\n        intro: '',\n        tocUrl: encodeBookUrl(detailUrl),\n        wordCount: '',\n        type: 0,\n        latestChapterTitle: status\n      });\n    }\n    return JSON.stringify(result);\n  }\n\n  async function getloginurl() { return '[]'; }\n  async function login() {}\n  async function pay(bookurl, url) {}\n  async function imagedecrypt(url, image) { return []; }\n  async function shouldOverrideUrlLoading(url) { return true; }\n  async function gethelp() {\n    return '农民影视 v1.4 | 点击绿色按钮播放 | 预加载不触发播放';\n  }\n<\/script>\n<\/html>\n",
    "login": false,
    "lastUpdateTime": "1780903534416"
}
广告