🌸 hanime1.life

https://www.hanime1.life🔞

laizhiyu (6509)10/31 17:30

第三方H站
二维码导入
{
    "bookSourceGroup": "视频,AI,R18",
    "bookSourceName": "🌸 hanime1.life",
    "bookSourceType": 4,
    "bookSourceUrl": "https:\/\/www.hanime1.life🔞",
    "bookUrlPattern": ".*hanime[0-9a-z.-]*(\/enter)?\/watch\\?v=\\d+.*",
    "concurrentRate": "1\/1200",
    "customButton": false,
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "🏳 最新上传::https:\/\/www.hanime1.life\/search?sort=%E6%9C%80%E6%96%B0%E4%B8%8A%E5%82%B3&page={{page}}\n最新上市::https:\/\/www.hanime1.life\/search?sort=%E6%9C%80%E6%96%B0%E4%B8%8A%E5%B8%82&page={{page}}\n本日排行::https:\/\/www.hanime1.life\/search?sort=%E6%9C%AC%E6%97%A5%E6%8E%92%E8%A1%8C&page={{page}}\n他们在看::https:\/\/www.hanime1.life\/search?sort=%E4%BB%96%E5%80%91%E5%9C%A8%E7%9C%8B&page={{page}}\n里番::https:\/\/www.hanime1.life\/search?genre=%E8%A3%8F%E7%95%AA&page={{page}}\n泡面番::https:\/\/www.hanime1.life\/search?genre=%E6%B3%A1%E9%BA%B5%E7%95%AA&page={{page}}\nMotion Anime::https:\/\/www.hanime1.life\/search?genre=Motion%20Anime&page={{page}}\n3DCG::https:\/\/www.hanime1.life\/search?genre=3DCG&page={{page}}\n2.5D动画::https:\/\/www.hanime1.life\/search?genre=2.5D&page={{page}}\n2D动画::https:\/\/www.hanime1.life\/search?genre=2D%E5%8B%95%E7%95%AB&page={{page}}\nAI生成::https:\/\/www.hanime1.life\/search?genre=AI%E7%94%9F%E6%88%90&page={{page}}\nMMD::https:\/\/www.hanime1.life\/search?genre=MMD&page={{page}}\nCosplay::https:\/\/www.hanime1.life\/search?genre=Cosplay&page={{page}}\n新番预告::https:\/\/www.hanime1.life\/search?genre=%E6%96%B0%E7%95%AA%E9%A0%90%E5%91%8A&page={{page}}",
    "header": "{\"User-Agent\":\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/126.0.0.0 Safari\/537.36\",\"Referer\":\"https:\/\/www.hanime1.life\/\"}",
    "jsLib": "function H1G(k){var v=\"\";try{v=source.get(k)}catch(e){try{v=java.get(k)}catch(e2){}};if(v===\"null\"||v===\"undefined\")v=\"\";return String(v||\"\")}\nfunction H1P(k,v){try{source.put(k,String(v))}catch(e){try{java.put(k,String(v))}catch(e2){}}}\nfunction H1DOM(){var d=\"\";try{d=H1G(\"h1dom\")}catch(e){d=\"\"}\n  if(!d){d=\"\"}\n  if(!d){return \"https:\/\/www.hanime1.life\"}\n  if(d.indexOf(\"http\")===0){return d}\n  return \"https:\/\/\"+d}\nfunction H1OPT(){return \"\"}\n\nfunction H1LIST(java,source,result){\n  var d=org.jsoup.Jsoup.parse(String(result))\n  var out=[]\n  var seen={}\n  \/\/ template A: sort\/search pages\n  var cards=d.select('div.video-item-container[title]')\n  for(var i=0;i<cards.size();i++){\n    var card=cards.get(i)\n    var a=card.selectFirst(\"a.video-link\")\n    if(!a){continue}\n    var u=String(a.attr(\"href\"))\n    if(u.indexOf(\"watch?v=\")<0){continue}\n    var tt=card.selectFirst(\"div.title\")\n    var name=tt?tt.text().trim():\"\"\n    if(!name){continue}\n    var img=card.selectFirst(\"img.main-thumb\")\n    var cover=img?String(img.attr(\"src\")):\"\"\n    var dur=card.selectFirst(\"div.duration\")\n    var du=dur?dur.text().trim():\"\"\n    var sub=card.selectFirst(\"div.subtitle\")\n    var author=\"\";var date=\"\"\n    if(sub){\n      var aa=sub.selectFirst(\"a\")\n      author=aa?aa.text().trim():\"\"\n      var st=sub.selectFirst(\"span.subtitle-time\")\n      date=st?st.text().trim():\"\"\n    }\n    var st2=card.selectFirst(\"div.stats-container\")\n    var views=\"\"\n    if(st2){\n      var items=st2.select(\"div.stat-item\")\n      if(items.size()>1){views=String(items.get(1).text()).trim()}\n    }\n    if(seen[u]){continue}\n    seen[u]=1\n    out.push({name:name,u:u,cover:cover,author:author,date:date,du:du,views:views})\n  }\n  if(out.length>0){return out}\n  \/\/ template B: genre pages\n  var as2=d.select('a[href*=\"watch?v=\"]')\n  for(var i=0;i<as2.size();i++){\n    var a2=as2.get(i)\n    var u2=String(a2.attr(\"href\"))\n    if(seen[u2]){continue}\n    var inner=a2.selectFirst(\"div.home-rows-videos-div\")\n    if(!inner){continue}\n    var tt2=a2.selectFirst(\"div.home-rows-videos-title\")\n    var name2=tt2?tt2.text().trim():\"\"\n    if(!name2){continue}\n    var img2=a2.selectFirst(\"img\")\n    var cover2=img2?String(img2.attr(\"src\")):\"\"\n    seen[u2]=1\n    out.push({name:name2,u:u2,cover:cover2,author:\"\",date:\"\",du:\"\",views:\"\"})\n  }\n  return out\n}\n\nfunction H1CUR(java,source,result,baseUrl){\n  var d=org.jsoup.Jsoup.parse(String(result))\n  var h3=d.selectFirst(\"h3#shareBtn-title\")\n  var name=h3?h3.text().trim():\"\"\n  var h4s=d.select(\"div.video-details-wrapper h4\")\n  var author=\"\"\n  for(var i=0;i<h4s.size();i++){\n    var t=h4s.get(i).text().trim()\n    if(t){author=t;break}\n  }\n  if(!author){var vn=d.selectFirst(\"a#video-artist-name\");author=vn?vn.text().trim():\"\"}\n  var tags=[]\n  var tagEls=d.select(\"div.single-video-tag a\")\n  for(var i=0;i<tagEls.size();i++){\n    var tt=tagEls.get(i).text().trim()\n    tt=String(tt).replace(\/^#\\s*\/,\"\").replace(\/\\s*\\(\\d+\\)\\s*$\/,\"\").trim()\n    if(tt&&tt!==\"add\"&&tt!==\"remove\"&&tt!==\"new\"&&tt!==\"edit\"&&tt.indexOf(\".\")<0&&tt.length<20&&tags.indexOf(tt)<0){tags.push(tt)}\n  }\n  var desc=\"\"\n  var panel=d.selectFirst(\"div.video-description-panel\")\n  if(panel){\n    var cap=panel.selectFirst(\"div.video-caption-text\")\n    desc=cap?cap.text().trim():\"\"\n  }\n  var views=\"\";var date=\"\"\n  var vd=d.selectFirst(\"div.video-details-wrapper.hidden-sm\")\n  if(vd){\n    var vt=String(vd.text())\n    var vm=vt.match(\/\\u89c2\\u770b\\u6b21\\u6570\\uff1a([^\\s&]+)\/)\n    if(vm){views=vm[1]}\n    var dm=vt.match(\/(20\\d{2}-\\d{2}-\\d{2})\/)\n    if(dm){date=dm[1]}\n  }\n  var cover=\"\"\n  var pv=d.selectFirst(\"video#player\")\n  if(pv){var po=String(pv.attr(\"poster\"));cover=po}\n  var durSec=\"\"\n  var meta=d.selectFirst(\"meta[property=og:video:duration]\")\n  if(meta){durSec=String(meta.attr(\"content\"))}\n  var kindStr=tags.join(\",\")\n  var introStr=desc\n  if(views){introStr=introStr?(introStr+\"\\n\"+views):views}\n  if(date){introStr=introStr?(introStr+\"\\n\"+date):date}\n  var durStr=durSec?(\"\\u65f6\\u957f \"+durSec+\" \\u79d2\"):\"\"\n  return {name:name,author:author,tags:tags,desc:desc,views:views,date:date,cover:cover,durSec:durSec,kindStr:kindStr,introStr:introStr,durStr:durStr}\n}\n\nfunction H1CHAP(java,source,book,result,baseUrl){\n  var d=org.jsoup.Jsoup.parse(String(result))\n  var links=d.select('#playlist-scroll a[href*=\"watch?v=\"]')\n  var out=[];var seen={}\n  for(var i=0;i<links.size();i++){\n    var u=String(links.get(i).attr(\"href\"))\n    if(seen[u]){continue}\n    seen[u]=1\n    var title=\"\"\n    var cell=null\n    var p=links.get(i)\n    while(p!=null){\n      var cn=String(p.classNames ? p.classNames() : \"\")\n      if(cn.indexOf(\"playlist-hover-wrap\")>=0){cell=p;break}\n      p=p.parent()\n    }\n    if(cell){\n      var h4=cell.selectFirst(\"h4.video-title\")\n      title=h4?h4.text().trim():\"\"\n    }\n    if(!title){title=\"P\"+(out.length+1)}\n    out.push({n:title,u:u})\n  }\n  return out\n}\n\nfunction H1CONTENT(java,source,result,baseUrl){\n  var d=org.jsoup.Jsoup.parse(String(result))\n  var vp=d.selectFirst(\"video#player\")\n  if(!vp){return \"\"}\n  var srcs=vp.select(\"source\")\n  var pick=null;var curQ=\"720\"\n  var bm=String(baseUrl).match(\/#Q(\\d+)\/)\n  if(bm){curQ=bm[1]}\n  for(var i=0;i<srcs.size();i++){\n    var sz=String(srcs.get(i).attr(\"size\"))\n    if(sz===curQ){pick=srcs.get(i);break}\n  }\n  if(!pick){pick=srcs.size()>0?srcs.get(0):null}\n  if(!pick){var s0=String(vp.attr(\"src\")||\"\");if(s0){return s0}return \"\"}\n  return String(pick.attr(\"src\"))\n}\n\nfunction H1FIX(u){\n  var s=String(u||\"\")\n  if(!s){return \"\"}\n  if(s.indexOf(\"http\")!==0){return s}\n  return s\n}",
    "lastUpdateTime": "1793439001310",
    "loginUi": "[{\"name\": \"📌 发布页输入框(可留空)\", \"type\": \"text\", \"action\": \"H1NOOP()\"}, {\"name\": \"🚀 一键从发布页获取线路\", \"type\": \"button\", \"action\": \"H1PUB(java)\"}, {\"name\": \"⚡ 测试延时(全部线路)\", \"type\": \"button\", \"action\": \"H1SPEED(java)\"}, {\"name\": \"─── 线路点击切换 ───\", \"type\": \"button\", \"action\": \"H1NOOP()\"}, {\"name\": \"W1\", \"type\": \"button\", \"action\": \"H1SETD(java,'www.hanime1.life')\", \"viewName\": \"'线路1 www.hanime1.life '+(source.get('h1sp1')||'')\"}, {\"name\": \"W2\", \"type\": \"button\", \"action\": \"H1SETD(java,'www.hanime103.net')\", \"viewName\": \"'线路2 www.hanime103.net '+(source.get('h1sp2')||'')\"}, {\"name\": \"W3\", \"type\": \"button\", \"action\": \"H1SETD(java,'www.hanime103.com')\", \"viewName\": \"'线路3 www.hanime103.com '+(source.get('h1sp3')||'')\"}, {\"name\": \"W4\", \"type\": \"button\", \"action\": \"H1SETD(java,'www.hanime104.com')\", \"viewName\": \"'线路4 www.hanime104.com '+(source.get('h1sp4')||'')\"}, {\"name\": \"─── 诊断 ───\", \"type\": \"button\", \"action\": \"H1NOOP()\"}, {\"name\": \"🔍 检查登录状态\", \"type\": \"button\", \"action\": \"H1CK(java)\"}, {\"name\": \"🌐 用浏览器打开站点\", \"type\": \"button\", \"action\": \"H1BR(java)\"}]",
    "loginUrl": "function H1L(m){try{java.longToast(String(m))}catch(e){try{java.toast(String(m))}catch(e2){}}}\nfunction H1T(m){try{java.toast(String(m))}catch(e){try{java.longToast(String(m))}catch(e2){}}}\nfunction H1G(k){var v=\"\";try{v=source.get(k)}catch(e){try{v=java.get(k)}catch(e2){}};if(v===\"null\"||v===\"undefined\")v=\"\";return String(v||\"\")}\nfunction H1P(k,v){try{source.put(k,String(v))}catch(e){try{java.put(k,String(v))}catch(e2){}}}\nfunction H1DOM(){var d=H1G(\"h1dom\");if(!d){return \"https:\/\/www.hanime1.life\"}return \"https:\/\/\"+d}\nfunction H1NOOP(){H1T(\"H1T: 提示行无需点击\")}\nfunction H1SETD(jv,d){H1P(\"h1dom\",d);H1L(\"H1L: ✔ 已切换到 \"+d+\",立即生效\");try{java.reLoginView(false)}catch(e){}}\nfunction H1BR(jv){var u=H1DOM()+\"\/enter\";H1T(\"H1T: 正在打开 \"+u);try{java.openUrl(u)}catch(e){H1L(\"H1L: 打开失败 \"+e)}}\nfunction H1CK(jv){\n  var d=H1G(\"h1dom\");if(!d){H1L(\"H1L: 请先选择线路\");return}\n  H1T(\"H1T: 正在检查登录状态…\")\n  var u=\"https:\/\/\"+d+\"\/enter\"\n  var r=\"\"\n  try{r=String(java.ajax(u))}catch(e){H1L(\"H1L: ✘ 线路不可达: \"+e);return}\n  if(r.indexOf(\"hanime1\")<0){H1L(\"H1L: ✘ 线路异常,请换线路\");return}\n  var c=\"\"\n  try{c=String(java.getCookie(u))}catch(e){c=\"\"}\n  var hasS=c.indexOf(\"hanime1_session\")>=0;var hasR=c.indexOf(\"remember_web\")>=0\n  if(hasS&&hasR){H1L(\"H1L: ✔ 登录Cookie完好(本站游客也可看)\")}\n  else{if(hasS){H1L(\"H1L: ✔ 会话Cookie存在(游客可看)\")}else{H1L(\"H1L: ✔ 未登录,游客可直接搜索观看;需登录请点「用浏览器打开站点」\")}}\n}\nfunction H1SPEED(jv){\n  H1T(\"H1T: ⚡ 开始测试 4 条线路延时…\")\n  var ds=[\"www.hanime1.life\",\"www.hanime103.net\",\"www.hanime103.com\",\"www.hanime104.com\"]\n  var urls=[]\n  for(var i=0;i<ds.length;i++){urls.push(\"https:\/\/\"+ds[i]+\"\/enter\")}\n  var t0Arr=[];for(var i=0;i<urls.length;i++){t0Arr.push(Date.now())}\n  var res=null\n  try{res=java.appCache!==undefined?java.ajaxAll(urls):java.ajaxAll(urls)}catch(e){H1L(\"H1L: 测速失败 \"+e);return}\n  var ms=[];var okAny=false\n  for(var i=0;i<ds.length;i++){\n    var ok=false;var t=999999\n    try{var r=res[i];var b=String(r.body());var bl=b.length;t=(r.callTime&&r.callTime.call)?r.callTime():(Date.now()-t0Arr[i]);var code=0;try{code=r.raw.code()}catch(e2){try{code=r.code()}catch(e3){}}if(bl>50000||(code==200&&bl>2000)){ok=true}}catch(e){ok=false}\n    H1P(\"h1sp\"+(i+1), ok?(t+\"ms\"):\"超时\")\n    ms.push(ok?t:999999);if(ok){okAny=true}\n  }\n  var best=0\n  for(var i=1;i<ms.length;i++){if(ms[i]<ms[best])best=i}\n  if(okAny){H1P(\"h1dom\",ds[best]);H1L(\"H1L: ⚡ 最快线路 \"+ds[best]+\" \"+ms[best]+\"ms,已自动切换\")}\n  else{H1L(\"H1L: ✘ 全部线路超时,请检查网络\/代理\")}\n  try{java.reLoginView(false)}catch(e){}\n}\nfunction H1PUB(jv){\n  H1T(\"H1T: 🚀 正在从发布页探测线路…\")\n  var cur=H1G(\"h1dom\");if(!cur){cur=\"www.hanime1.life\"}\n  var pool=[\"www.hanime1.life\",\"www.hanime103.net\",\"www.hanime103.com\",\"www.hanime104.com\"]\n  var seed=\"https:\/\/\"+cur+\"\/enter\";var html=\"\"\n  try{html=String(java.ajax(seed))}catch(e){html=\"\"}\n  if(html.length>50000){\n    var rx=\/https?:\\\/\\\/([a-z0-9.-]*hanime[0-9a-z.-]*)\\\/enter\/g;var mm;var extra=[]\n    while((mm=rx.exec(html))!==null){var d=mm[1].toLowerCase();if(pool.indexOf(d)<0&&extra.indexOf(d)<0){extra.push(d)}}\n    for(var i=0;i<extra.length&&pool.length<8;i++){pool.push(extra[i])}\n  }\n  H1T(\"H1T: 共 \"+pool.length+\" 条候选,逐个探活…\")\n  var live=[];var lat=[]\n  for(var i=0;i<pool.length;i++){\n    var u=\"https:\/\/\"+pool[i]+\"\/enter\";var t0=Date.now();var ok=false;var body=\"\"\n    try{body=String(java.ajax(u))}catch(e){body=\"\"}\n    var dt=Date.now()-t0\n    if(body.length>50000&&body.indexOf(\"hanime1\")>=0){ok=true}\n    if(ok){live.push(pool[i]);lat.push(dt)}\n  }\n  if(live.length===0){H1L(\"H1L: ✘ 无存活线路;请检查网络或在发布页框填新域名再点本按钮\");return}\n  var minI=0\n  for(var i=1;i<lat.length;i++){if(lat[i]<lat[minI])minI=i}\n  H1P(\"h1pubdoms\",live.join(\",\"))\n  for(var i=0;i<pool.length;i++){\n    var li=live.indexOf(pool[i])\n    H1P(\"h1sp\"+(i+1), li>=0?(lat[li]+\"ms\"):\"超时\")\n  }\n  H1P(\"h1dom\",live[minI])\n  H1L(\"H1L: ✔ 存活 \"+live.length+\" 条:\"+live.join(\" | \")+\"; 最快 \"+live[minI]+\" 已切换\")\n  try{java.reLoginView(false)}catch(e){}\n}\nfunction login(){return \"ok\"}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "author",
        "coverUrl": "cover",
        "init": "@js:H1CUR(java,source,result,baseUrl)",
        "intro": "introStr",
        "kind": "kindStr",
        "lastChapter": "durStr",
        "name": "name",
        "tocUrl": "@js:(function(){var u=String(baseUrl);return u})()"
    },
    "ruleContent": {
        "content": "@js:H1CONTENT(java,source,String(result),baseUrl)",
        "sourceRegex": "\/jmpres\/.*\\.mp4"
    },
    "ruleExplore": {
        "author": "author",
        "bookList": "@js:H1LIST(java,source,String(result))",
        "bookUrl": "u",
        "coverUrl": "cover",
        "intro": "date",
        "kind": "du",
        "name": "name",
        "wordCount": "views"
    },
    "ruleSearch": {
        "author": "author",
        "bookList": "@js:H1LIST(java,source,String(result))",
        "bookUrl": "u",
        "checkKeyWord": "催眠",
        "coverUrl": "cover",
        "intro": "date",
        "kind": "du",
        "name": "name",
        "wordCount": "views"
    },
    "ruleToc": {
        "chapterList": "@js:H1CHAP(java,source,book,String(result),baseUrl)",
        "chapterName": "n",
        "chapterUrl": "u"
    },
    "searchUrl": "\/search?query={{key}}&page={{page}}",
    "variableComment": "h1dom=\\u5f53\\u524d\\u7ebf\\u8def\\u57df\\u540d(\\u4e0d\\u8981\\u624b\\u6539,\\u7528\\u767b\\u5f55\\u9762\\u677f\\u5207\\u6362);h1sp1~4=\\u5404\\u7ebf\\u8def\\u6d4b\\u901f\\u7ed3\\u679c",
    "weight": 0
}
广告