#1 - 2019-5-16 21:39
ekibun
换了个项目,嵌到app后面了
github:BangumiPlugin
一个Android弹幕播放器的框架,可以用js写脚本看漫画,看小说,爬弹幕,解析视频、音乐
成功安装之后在详情页的章节会多个添加线路的按纽
漫画:

小说:

视频:

音乐

楼下贴些例子,复制在添加线路的接口里导入即可
u1s1拿平板看漫画真爽啊 
#2 - 2019-5-16 21:42
(啊~我可真是个变态啊~)
最遥远的距离,前排支持并羡慕
#2-1 - 2020-2-10 20:30
#2-2 - 2020-6-14 18:05
綿飴
+2
#3 - 2019-5-16 21:46
acfun:
{"code":"{\"getDanmaku\":\"var arr \\u003d [];\\r\\nfunction getDanmaku(pos){\\r\\n    var json\\u003dJSON.parse(http.fetch(\\\"https://m.acfun.cn/rest/mobile-direct/new-danmaku/poll\\\", {\\r\\n        headers: { cookie: \\\"_did\\u003dweb;\\\" },\\r\\n        body: {\\r\\n            videoId: video.id,\\r\\n            lastFetchTime: pos.toString()\\r\\n        }\\r\\n    }).body().string());\\r\\n    var list \\u003d json.added.map(v \\u003d\\u003e {\\r\\n        return {\\r\\n            time: v.position/1000,\\r\\n            type: v.mode,\\r\\n            textSize: v.size,\\r\\n            color: v.color,\\r\\n            content: v.body,\\r\\n            timeStamp: v.danmakuId\\r\\n        };\\r\\n    });\\r\\n    arr \\u003d arr.concat(list);\\r\\n    if(list.length \\u003e 0) getDanmaku(json.fetchTime);\\r\\n}\\r\\ngetDanmaku(0);\\r\\nreturn arr;\\r\\n\",\"getDanmakuKey\":\"\",\"getVideo\":\"return webview(video.url, {\\r\\n    \\\"User-Agent\\\": \\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36\\\"\\r\\n},\\\"\\\", function(request){\\r\\n    if(request.getUrl().toString().contains(\\\".m3u8\\\")) return http.makeRequest(request);\\r\\n    else return null;\\r\\n});\",\"getVideoInfo\":\"var ep_sort \\u003d episode.sort + Number(line.extra||0);\\r\\nvar doc \\u003d http.fetch(\\\"https://m.acfun.cn/v/?ab\\u003d\\\"+line.id).body().string();\\r\\nvar data \\u003d JSON.parse(/videoInfo *?\\u003d ?(.*?);/.exec(doc)[1]);\\r\\nvar ep \\u003d data.group[(ep_sort - 1) | 0];\\r\\nreturn {\\r\\n    site: \\\"acfun\\\",\\r\\n    id: ep.videoId,\\r\\n    url: \\\"http://www.acfun.cn/bangumi/aa\\\"+ep.bangumiId+\\\"_\\\"+36188+\\\"_\\\"+ep.itemId\\r\\n};\",\"search\":\"var url\\u003d\\\"http://search.aixifan.com/search?q\\u003d\\\";\\r\\nvar json \\u003d JSON.parse(http.fetch(url+key).body().string());\\r\\nreturn json.data.page.ai.map(it \\u003d\\u003e {\\r\\n    return {\\r\\n        site: \\\"acfun\\\",\\r\\n        id: it.contentId,\\r\\n        title: it.title\\r\\n    };\\r\\n});\"}","color":-177061,"site":"acfun","title":"Acfun","type":"video"}

动漫之家
{"code":"{\"getImage\":\"\",\"getPages\":\"var doc \\u003d Jsoup.parse(http.fetch(episode.url).body().string())\\r\\nvar $ \\u003d () \\u003d\\u003e ({ ready: (a) \\u003d\\u003e a() })\\r\\nvar document \\u003d {}\\r\\nvar mReader \\u003d { initData: (a) \\u003d\\u003e { throw a } }\\r\\ntry { eval(doc.select(\\\"script\\\").toArray().map((v) \\u003d\\u003e v.html()).find((v) \\u003d\\u003e v.includes(\\\"mReader.initData\\\"))) }\\r\\ncatch(e){ data \\u003d e.page_url }\\r\\nreturn data.map(it \\u003d\\u003e ({\\r\\n    image: {\\r\\n        url: it,\\r\\n        header: {\\r\\n            referer: \\\"https://m.dmzj.com/\\\"\\r\\n        }\\r\\n    }\\r\\n}))\",\"getUpdate\":\"var getUpdate \\u003d async((page)\\u003d\\u003e{\\r\\n    var url \\u003d \\\"https://m.dmzj.com/latest/\\\"+ page +\\\".json\\\";\\r\\n    var json \\u003d JSON.parse(http.fetch(url).body().string());\\r\\n    return json.map(it \\u003d\\u003e ({\\r\\n        site: \\\"dmzj\\\",\\r\\n        id: it.id,\\r\\n        air: it.last_update_chapter_name\\r\\n    }));\\r\\n});\\r\\nvar tasks \\u003d [];\\r\\nfor(var i \\u003d 0; i \\u003c 10; i++){\\r\\n    tasks.push(getUpdate(i));\\r\\n}\\r\\nvar ret \\u003d [];\\r\\nfor(var i in tasks){\\r\\n    try{ ret \\u003d ret.concat(await(tasks[i])) } catch(e){}\\r\\n}\\r\\nreturn ret;\",\"getEpisode\":\"var doc \\u003d Jsoup.parse(http.fetch(\\\"https://m.dmzj.com/info/\\\" + line.id + \\\".html\\\").body().string())\\r\\nvar $ \\u003d () \\u003d\\u003e {}\\r\\nvar initIntroData \\u003d (a) \\u003d\\u003e { throw a }\\r\\nvar data \\u003d []\\r\\ntry { eval(doc.select(\\\"script\\\").html()) } catch(e) {\\r\\ne.forEach((v) \\u003d\\u003e data \\u003d data.concat(v.data.map(it \\u003d\\u003e ({\\r\\n    site: \\\"dmzj\\\",\\r\\n    id: it.id,\\r\\n    category: v.title,\\r\\n    sort: it.chapter_order / 10,\\r\\n    title: it.chapter_name,\\r\\n    url: \\\"https://m.dmzj.com/view/\\\" + it.comic_id + \\\"/\\\" + it.id + \\\".html\\\"\\r\\n})).sort((a, b) \\u003d\\u003e a.sort - b.sort))) }\\r\\nreturn data\",\"header\":\"\",\"search\":\"var doc \\u003d Jsoup.parse(http.fetch(\\\"https://m.dmzj.com/search/\\\" + key + \\\".html\\\").body().string())\\r\\nvar $ \\u003d () \\u003d\\u003e {}\\r\\ntry { eval(doc.select(\\\"script\\\").html()) } catch(e) {}\\r\\nreturn serchArry.map(it \\u003d\\u003e ({\\r\\n    site: \\\"dmzj\\\",\\r\\n    id: it.id,\\r\\n    title: it.name\\r\\n}))\"}","color":-15103005,"site":"dmzj","title":"动漫之家","type":"book"}

轻小说文库(需要把账号密码改成自己的):
{"code":"{\"getImage\":\"\",\"getPages\":\"var doc \\u003d Jsoup.parse(http.inflate(http.fetch(episode.url).body().bytes(), \\\"gb2312\\\"))\\r\\nvar content \\u003d doc.selectFirst(\\\"#content\\\");\\r\\ncontent.select(\\\"#contentdp\\\").remove()\\r\\nvar novel \\u003d content.wholeText()\\r\\nnovel \\u003d novel.trim() \\u0026\\u0026 [{\\r\\n    content: novel\\r\\n}] || [];\\r\\nreturn novel.concat(content.select(\\\"img\\\").toArray().map((it, index) \\u003d\\u003e ({\\r\\n    image: {\\r\\n        url: it.attr(\\\"src\\\"),\\r\\n        header: {\\r\\n            referer: \\\"\\\"\\r\\n        }\\r\\n    }\\r\\n})))\",\"getUpdate\":\"\",\"getEpisode\":\"var url \\u003d \\\"https://www.wenku8.net/novel/\\\" + parseInt(line.id / 1000) + \\\"/\\\" + line.id + \\\"/\\\"\\r\\nvar doc \\u003d Jsoup.parse(http.inflate(http.fetch(url + \\\"index.htm\\\").body().bytes(), \\\"gb2312\\\"))\\r\\nvar result \\u003d []\\r\\nvar cat \\u003d \\\"\\\"\\r\\nvar index \\u003d 0\\r\\ndoc.select(\\\"td\\\").toArray().forEach((v) \\u003d\\u003e {\\r\\n    if(v.hasClass(\\\"vcss\\\")){\\r\\n        cat \\u003d v.text()\\r\\n        index \\u003d 0\\r\\n    }\\r\\n    var a \\u003d v.selectFirst(\\\"a\\\")\\r\\n    if(a) result.push({\\r\\n        site: \\\"wenku8\\\",\\r\\n        id: a.attr(\\\"href\\\"),\\r\\n        sort: index,\\r\\n        category: cat,\\r\\n        title: a.text(),\\r\\n        url: url + a.attr(\\\"href\\\")\\r\\n    })\\r\\n    index++;\\r\\n})\\r\\nreturn result\",\"header\":\"\",\"open\":\"\",\"search\":\"var cookie \\u003d App.load(\\\"wenku8_cookie\\\")\\r\\nif(!cookie) {\\r\\n    var rsp \\u003d http.fetch(\\\"https://www.wenku8.net/login.php?do\\u003dsubmit\\\", {\\r\\n        body: {\\r\\n            username: \\\"\\\",\\r\\n            password: \\\"\\\",\\r\\n            usecookie: \\\"315360000\\\",\\r\\n            action: \\\"login\\\",\\r\\n            submit: \\\" 登 录 \\\"\\r\\n        }\\r\\n    })\\r\\n    cookie \\u003d rsp.headers(\\\"set-cookie\\\").toArray().map((v) \\u003d\\u003e v.split(\\u0027;\\u0027)[0]).join(\\\";\\\")\\r\\n    print(cookie)\\r\\n    App.dump(\\\"wenku8_cookie\\\", cookie)\\r\\n}\\r\\n\\r\\nvar rsp \\u003d http.fetch(\\\"https://www.wenku8.net/modules/article/search.php?searchtype\\u003darticlename\\u0026searchkey\\u003d\\\" + java.net.URLEncoder.encode(key, \\\"gb2312\\\"), {\\r\\n    headers: { cookie: cookie }\\r\\n})\\r\\nvar doc \\u003d Jsoup.parse(http.inflate(rsp.body().bytes(), \\\"gb2312\\\"));\\r\\nif(rsp.priorResponse()) return [{\\r\\n    site: \\\"wenku8\\\",\\r\\n    id: /book\\\\/(\\\\d+).htm/.exec(rsp.priorResponse().headers().get(\\\"Location\\\"))[1],\\r\\n    title: doc.selectFirst(\\\"#content b\\\").text()\\r\\n}]\\r\\nreturn doc.select(\\\"table.grid b \\u003e a\\\").toArray().map(it \\u003d\\u003e {\\r\\n    var id \\u003d /book\\\\/(\\\\d+).htm/.exec(it.attr(\\\"href\\\"))[1];\\r\\n    return {\\r\\n        site: \\\"wenku8\\\",\\r\\n        id: id,\\r\\n        title: it.text()\\r\\n    }\\r\\n})\"}","color":-9070617,"site":"wenku8","title":"轻小说文库","type":"book"}

网易云音乐
{"code":"{\"getLyric\":\"var json \\u003d JSON.parse(fetch(\\\"https://music.163.com/weapi/song/lyric?csrf_token\\u003d\\\", {\\r\\n    id: episode.id,\\r\\n    tv: -1,\\r\\n    lv: -1,\\r\\n    csrf_token: \\\"\\\"\\r\\n}).body().string())\\r\\nreturn {\\r\\n    lrc: json.lrc.lyric,\\r\\n    tlyric: json.tlyric \\u0026\\u0026 json.tlyric.lyric\\r\\n}\",\"getMusic\":\"var json \\u003d JSON.parse(fetch(\\\"http://music.163.com/weapi/song/enhance/player/url?csrf_token\\u003d\\\", {\\r\\n    ids: [episode.id],\\r\\n    br: 320000,\\r\\n    csrf_token: \\\"\\\"\\r\\n}).body().string())\\r\\nreturn {\\r\\n    url: json.data[0].url\\r\\n}\",\"getEpisode\":\"var json \\u003d JSON.parse(fetch(\\\"http://music.163.com/weapi/v1/album/\\\" + line.id + \\\"?csrf_token\\u003d\\\", {\\r\\n    album: line.id,\\r\\n    csrf_token: \\\"\\\"\\r\\n}).body().string())\\r\\nreturn json.songs.map((it, index) \\u003d\\u003e ({\\r\\n    site: \\\"netease\\\",\\r\\n    id: it.id,\\r\\n    sort: index + 1,\\r\\n    title: it.name,\\r\\n    url: \\\"https://music.163.com/#/song?id\\u003d\\\" + it.id\\r\\n}))\",\"header\":\"function randomKey(len){\\r\\n    var s \\u003d \\u00270123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0027;\\r\\n    var r \\u003d \\\"\\\"\\r\\n    for(var i\\u003d0; i\\u003clen;i++) r +\\u003d s.charAt(Math.random() * s.length | 0);\\r\\n    return r;\\r\\n}\\r\\n\\r\\nfunction getParams(query) {\\r\\n    query \\u003d JSON.stringify(query)\\r\\n    var nonce \\u003d CryptoJS.enc.Utf8.parse(\\u00270CoJUm6Qyw8W8jud\\u0027);\\r\\n    var iv \\u003d CryptoJS.enc.Utf8.parse(\\u00270102030405060708\\u0027);\\r\\n    var modulus \\u003d \\u002700e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\\u0027;\\r\\n    var pubKey \\u003d \\u0027010001\\u0027;\\r\\n    var genKey \\u003d randomKey(16);\\r\\n    var aes \\u003d CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(query), nonce, {\\r\\n        iv: iv,\\r\\n        mode: CryptoJS.mode.CBC\\r\\n    }).toString()\\r\\n    var params \\u003d CryptoJS.AES.encrypt(aes, CryptoJS.enc.Utf8.parse(genKey), {\\r\\n        iv: iv,\\r\\n        mode: CryptoJS.mode.CBC\\r\\n    }).toString()\\r\\n    var integer \\u003d new java.math.BigInteger(genKey.split(\\u0027\\u0027).reverse().map(c \\u003d\\u003e {\\r\\n        return c.charCodeAt(0).toString(16)\\r\\n    }).join(\\u0027\\u0027), 16)\\r\\n    var pubkeyInt \\u003d new java.math.BigInteger(pubKey, 16);\\r\\n    var modulusInt \\u003d new java.math.BigInteger(modulus, 16);\\r\\n    var encSecKey \\u003d integer.modPow(pubkeyInt, modulusInt).toString(16)\\r\\n    encSecKey \\u003d (new Array(256).join(\\u00270\\u0027) + encSecKey).slice(-256)\\r\\n    return {\\r\\n        params: params,\\r\\n        encSecKey: encSecKey\\r\\n    }\\r\\n}\\r\\n\\r\\nfunction fetch(url, body) {\\r\\n    return http.fetch(url, {\\r\\n        headers: {\\r\\n            referer: \\\"http://music.163.com\\\",\\r\\n            cookie: \\\"os\\u003duwp; osver\\u003d10.0.10586.318; appver\\u003d1.2.1;\\\"\\r\\n        },\\r\\n        body: getParams(body)\\r\\n    });\\r\\n}\\r\\n\",\"open\":\"\",\"search\":\"var json \\u003d JSON.parse(fetch(\\\"http://music.163.com/weapi/cloudsearch/get/web?csrf_token\\u003d\\\", {\\r\\n    s: key,\\r\\n    limit: 10,\\r\\n    offset: 0,\\r\\n    total: true,\\r\\n    csrf_token: \\\"\\\",\\r\\n    type: 10\\r\\n}).body().string())\\r\\nreturn json.result.albums.map(it \\u003d\\u003e ({\\r\\n    site: \\\"netease\\\",\\r\\n    id: it.id,\\r\\n    title: it.name\\r\\n}))\"}","color":-1703898,"site":"netease","title":"网易云音乐","type":"music"}
#4 - 2019-5-16 21:58
(いつでも微笑みを)
可以看了(bgm89)
#5 - 2019-5-16 22:23
(低级趣味无罪)
等等,bgm什么时候有客户端了
#5-1 - 2019-5-16 22:30
ekibun
当然是我写的那一个啊hhh
https://bgm.tv/group/topic/346386
#6 - 2019-6-20 23:08
(✨️make bangumi great again✨️)
很好用的, 我用过了, 当然我还是选择电脑看动漫(bgm85)
#7 - 2019-6-20 23:17
看不懂,怎么办,还是不会操作啊(bgm16)
#8 - 2020-2-10 19:08
删除了回复
#9 - 2020-2-10 20:32
(迷子でもいい、迷子でも進め。)
草,这玩意咋用的。我接口好像导入成功了(bgm38)但是ID标题参数应该填啥?
#9-1 - 2020-2-10 20:38
ekibun
新建里面点搜索
#9-2 - 2020-2-10 20:41
若荼泱
ekibun 说: 新建里面点搜索
(bgm38)(bgm38)挺好,但大概清晰度是720?
#9-3 - 2020-2-15 20:58
ekibun
若荼泱 说: 挺好,但大概清晰度是720?
改了一下,现在acfun应该能爬到超清了(bgm38)
#10 - 2020-2-10 22:22
(失败了,就这样让我躺地上吧.也没人在意。阿拉胡阿克巴 ...)
挺好的,但是我选择用电脑看
#11 - 2020-2-10 22:24
虽然用的ios,但还是战略性mark(bgm38)
#12 - 2020-2-13 01:43
(~)
马克
#13 - 2020-2-13 14:42
(切记,三搜而后行:搜相关知识,搜相关经验,搜相反观点)
好厉害呀(✪▽✪)
#14 - 2020-3-27 02:35
(bgm17)   可以再分享两个接口吗 补acfun的缺口
#14-1 - 2020-3-27 11:17
ekibun
其实除了acfun其他官方源都不能看,以下是bilibili的弹幕

{"code":"{\"getDanmaku\":\"var url \\u003d \\\"https://comment.bilibili.com/\\\"+video.id+\\\".xml\\\";\\nvar doc \\u003d Jsoup.parse(http.inflate(http.get(url).body().bytes(), \\\"deflate\\\"));\\nreturn doc.select(\\\"d\\\").toArray().map(it \\u003d\\u003e {\\n    var p \\u003d it.attr(\\\"p\\\").split(\\\",\\\");\\n    return {\\n        time: Number(p[0]),\\n        type: Number(p[1]),\\n        textSize: Number(p[2]),\\n        color: Number(p[3]),\\n        content: it.text(),\\n        timeStamp: Number(p[4])\\n    };\\n});\",\"getDanmakuKey\":\"\",\"getVideo\":\"\",\"getVideoInfo\":\"var ep_sort \\u003d episode.sort + Number(line.extra||0)\\nvar url \\u003d \\\"https://bangumi.bilibili.com/view/web_api/media?media_id\\u003d\\\";\\nvar json \\u003d JSON.parse(http.get(url+line.id).body().string());\\nvar ep \\u003d json.result.episodes.find(it \\u003d\\u003e Number(it.index) \\u003d\\u003d ep_sort) || json.result.episodes[Math.round(ep_sort - 1)];\\nreturn {\\n    site: \\\"bilibili\\\",\\n    id: ep.cid,\\n    url: \\\"https://www.bilibili.com/bangumi/play/ep\\\"+ep.ep_id\\n}\",\"search\":\"var url \\u003d \\\"https://api.bilibili.com/x/web-interface/search/type?search_type\\u003dmedia_bangumi\\u0026keyword\\u003d\\\";\\nvar json \\u003d JSON.parse(http.get(url+key).body().string());\\nreturn json.data.result.map(it \\u003d\\u003e {\\n    return {\\n        site: \\\"bilibili\\\",\\n        id: it.media_id,\\n        title: Jsoup.parse(it.title).text()\\n    };\\n});\"}","color":-893554,"site":"bilibili","title":"哔哩哔哩","type":"video"}


三方源的话贴个网页吧,id填网址,如果是自动播放的话应该能爬到

{"code":"{\"getDanmaku\":\"\",\"getDanmakuKey\":\"\",\"getVideo\":\"\",\"getVideoInfo\":\"var ep_sort \\u003d episode.sort + Number(line.extra||0)\\r\\nvar format \\u003d /\\\\{\\\\{(.*)\\\\}\\\\}/g.exec(line.id) || [\\\"{{ep}}\\\", \\\"ep\\\"]\\r\\nif(format[0] \\u003d\\u003d \\\"{{ep}}\\\") format[1] \\u003d \\\"#.##\\\"\\r\\nvar url \\u003d line.id.replace(format[0], java.text.DecimalFormat(format[1]).format(ep_sort))\\r\\nreturn {\\r\\n    site: \\\"webpage\\\",\\r\\n    id: line.id,\\r\\n    url: url\\r\\n}\"}","color":-16777216,"site":"webpage","title":"网页","type":"video"}
#14-2 - 2020-3-27 22:15
bangumi
ekibun 说: 其实除了acfun其他官方源都不能看,以下是bilibili的弹幕

{"code":"{\"getDanmaku\":\"var url \\u003d \\\"https://comment...
这个三方源的 能用在哪个站点上呀(bgm41)(bgm42)(bgm43) 在酷安有人提到的迅播动漫 柠萌瞬间都用不了(bgm16)
#14-3 - 2020-3-27 22:41
ekibun
bangumi 说: 这个三方源的 能用在哪个站点上呀 在酷安有人提到的迅播动漫 柠檬瞬间都用不了
id填的是单集播放的地址
#14-4 - 2020-3-28 01:46
bangumi
ekibun 说: id填的是 单集播放的地址
参考这个wiki 基本上懂了 纯小白 望见谅
#15 - 2020-3-27 02:35
(公众号:冷静的历史碎片。B站:满舰饰假子。 ... ... ...)
大佬!
#16 - 2020-3-28 06:49
mark一下(bgm38)
#17 - 2020-6-14 17:38
再顶一下,规则改了,加了音乐
#18 - 2020-6-14 18:32
大佬!
#19 - 2020-6-14 18:34
(明天,我就要去屠龙(失恋了,不想再屠龙了) ...)
顶大佬,可惜没有安卓板子,手机太小不想看漫画视频。
#20 - 2020-6-15 07:38
(无意义无价值无用无能)
mark
#21 - 2020-6-15 10:10
(这里是假的Kotori ,所有行为与真Kotori无关! ... ...)
膜拜一下大佬!
#22 - 2020-6-15 10:25
(✨️make bangumi great again✨️)
(bgm24)假如音乐能找到HIRES 我就不开发了
#22-1 - 2020-6-15 13:53
ekibun
笔给你自己写(bgm38)