您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
取得動畫的 m3u8 網址,下載彈幕為 json,去除擋廣告的警告訊息
当前为
// ==UserScript== // @name 動畫瘋工具箱 // @namespace https://blog.maple3142.net/ // @version 0.4 // @description 取得動畫的 m3u8 網址,下載彈幕為 json,去除擋廣告的警告訊息 // @author maple3142 // @match https://ani.gamer.com.tw/animeVideo.php?sn=* // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/m3u8-parser.min.js // @grant none // ==/UserScript== ; (function ($) { 'use strict' //in order to get videojs instance requirejs.config({ baseUrl: '//i2.bahamut.com.tw', waitSeconds: 0, paths: { order: 'js/order' }, shim: { viblast: {}, vastvpaid: { deps: ['videojs'] } } }) requirejs(['order!videojs'], videojs => hookSetter(videojs.players, 'ani_video', function onAniVideo(vid) { window.ani_video = vid //EXPOSE hookSetter(vid.K, 'src', onPlaylistUrl) })) function hookSetter(obj, prop, cb) { Object.defineProperty(obj, prop, { set: cb }) } function render(pls) { const html = pls .map( pl => `<div><label for="${pl.res.height}p">${pl.res.height}P: </label><input id="${ pl.res.height }p" value="${pl.url}" style="width: 500px;"></div>` ) .join('') $('.anime_name').append(`<div id="anigamer_m3u8_warpper">${html}</div>`) } function cvtM3U8_to_playlist(baseurl) { return m3u8 => { const parser = new m3u8Parser.Parser() parser.push(m3u8) parser.end() const pls = parser.manifest.playlists.map(pl => ({ url: 'https:' + baseurl + pl.uri, res: pl.attributes.RESOLUTION })) return pls } } function onPlaylistUrl(playlisturl) { if (playlisturl.indexOf('gamer_ad') !== -1) { //is ad return } const baseurl = playlisturl.replace(/index\.m3u8.*/, '') fetch(playlisturl) .then(r => r.text()) .then(cvtM3U8_to_playlist(baseurl)) .then(pls => window.M3U8_PLAYLIST = pls) //EXPOSE .then(render) } function triggerDownload(url, fname) { const a = document.createElement('a') a.href = url a.download = fname document.body.appendChild(a) a.click() a.remove() } function saveTextAsFile(text, fname) { const blob = new Blob([text]) const url = URL.createObjectURL(blob) triggerDownload(url, fname) URL.revokeObjectURL(url) } //extra: add a button to download danmu as json file hookSetter(animefun, 'danmu', danmu => { const text = JSON.stringify(danmu) const title = $('.anime_name h1').text() $('.anime_name').append($('<a href="javascript:void(0)">把彈幕存成檔案</a>').on('click', () => { saveTextAsFile(text, `${title}_彈幕.json`) })) }) //extra: block anti adblock alert const orig_alert = alert alert = function (t) { if (t.includes('由於擋廣告插件會影響播放器運作')) return orig_alert(t) } })(jQuery)
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址