// ==UserScript== // @name Anime1.me 下載器 // @namespace https://blog.maple3142.net/ // @version 0.4 // @description 下載Anime1.me網站上的動漫 // @author maple3142 // @match https://anime1.me/* // @match https://p.anime1.me/pic.php* // @match https://p.anime1.me/ts.php* // @match https://p.anime1.me/mp4.php* // @require https://code.jquery.com/jquery-3.2.1.min.js // @noframes // @grant none // @downloadURL none // ==/UserScript== (function($) { 'use strict'; //觸發下載(firefox需要同源才能正常觸發,否則會當成普通連結打開) function download(url,filename){ const a=document.createElement('a'); a.href=url; if(filename)a.download=filename; document.body.appendChild(a); a.click(); return a; } function parseQuery(str){ return Object.assign(...str.replace('?','').split('&').map(part=>part.split('=')).map(ar=>({[ar[0]]: ar[1]}))) } const loc=window.location; //querystring const query=parseQuery(loc.search) if(loc.hostname==='p.anime1.me'&&loc.pathname==='/pic.php'){//如果是普通下載頁面 //取得資料 const video=jwplayer().getPlaylist()[0];//目前使用jwplayer if(!video)return; const sources=video.sources; const title=video.title; const videomap=Object.assign(...sources.map(src=>({[src.label]: src.file})));//Object.assign({'HD': 'hd video url'},{'SD': 'sd video url'},something...) //詢問要下載的畫質 const askmsg=`輸入要下載的畫質名稱:(${sources.map(src=>src.label).join(',')})`; const type=prompt(askmsg); //如果畫質存在 if(type in videomap){ download(videomap[type],`${title}.mp4`); } } else if(loc.hostname==='p.anime1.me'&&loc.pathname==='/ts.php'){//不支援下載 const m3u8=`https://video.anime1.top/${query.vid}/list.m3u8` const msg=`抱歉!由於這種影片是由多個影片所組成的,目前還無法直接下載\n不過可以複製下方的網址然後使用vlc之類支援網路串流的播放器來使用` prompt(msg,m3u8) } else if(loc.hostname==='p.anime1.me'&&loc.pathname==='/mp4.php'){//特殊,因為需要Referer header才能得到影片檔 if(!confirm('這類需要特殊下載方法,要保持此頁面開啟直到下載完成\n是否繼續?'))return; //初始化下載器元素 $(document.body).append(`
`) //渲染函數 function update(loaded,total){ const percent=parseInt(loaded/total*100); $('#pbox').empty().append($('