// ==UserScript==
// @name 新传媒下载
// @namespace http://tampermonkey.net/
// @version 0.6
// @description toggle video
// @author cw2012
// @match https://www.mewatch.sg/season/*
// @match https://www.mewatch.sg/show/*
// @icon https://static.mewatch.sg/favicon.png
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_download
// @grant GM_setClipboard
// @connect kaltura.com
// @connect mewatch.sg
// @license MIT
// ==/UserScript==
(function() {
'use strict';
init();
let seasonId = location.href.split('/')[4].split('-')
seasonId = seasonId[seasonId.length - 1];
GM_xmlhttpRequest({
url:`https://cdn.mewatch.sg/api/page?ff=idp,ldp,rpt,cd&item_detail_expand=all&item_detail_select_season=first&lang=en&list_page_size=24&max_list_prefetch=3&path=/${location.href.split('/')[3]}/${location.href.split('/')[4]}&segments=all&sub=Anonymous&text_entry_format=html`,
method:'get',
onload:res=>{
res = JSON.parse(res.responseText);
res = res.item.episodes.items;
getEposidesAndDownload(res)
},
onerror: err=>{
console.log(err)
}
})
let episodeList = []
function getEposidesAndDownload(res){
if(res.length){
res.forEach((item,index)=>{
episodeList[index] = {
id:item.customId ,
num:item.episodeNumber ,
subtitle:item.hasClosedCaptions ,
free:item.badge ?(item.badge === 'premium'):true
}
});
let box = document.createElement('div');
box.className = 'epList';
episodeList.forEach((item,index)=>{
let a = document.createElement('a');
a.text = index+1;
if(!item.free){
a.className = 'premium';
}
a.addEventListener('click',aClicked);
box.append(a);
})
document.body.append(box);
}else{
Toast('没有获取到集数数据')
}
}
function aClicked(e){
let index = e.target.innerText - 1;
getEposideInfoAndDownload(index+1,episodeList[index].id)
}
function getEposideInfoAndDownload(index,id){
let data = {
"1":{
"service":"ottuser",
"action":"anonymousLogin",
"partnerId":"147"
},
"2":{
"service":"asset",
"action":"get",
"id":id,
"assetReferenceType":"media",
"ks":"{1:result:ks}"
},
"3":{
"service":"asset",
"action":"getPlaybackContext",
"assetId":id,
"assetType":"media",
"contextDataParams":{
"objectType":"KalturaPlaybackContextOptions",
"context":"PLAYBACK"
},
"ks":"{1:result:ks}"
},
"apiVersion":"5.2.6",
"partnerId":"147"
};
GM_xmlhttpRequest({
url:'https://rest-as.ott.kaltura.com/api_v3/service/multirequest',
method:'post',
headers: {"Content-Type": "application/json"},
data:JSON.stringify (data),
onload:res=>{
res = JSON.parse(res.responseText);
if(res.result && !res.result.error && res.result.length){
res = res.result;
let videoUrl;
res.forEach((item)=>{
if(item.sources){
const sources = item.sources;
if(!sources.length){
Toast('无法获取第'+(index)+'集视频资源,可能是付费视频');
return;
}
sources.forEach(source=>{
if(source.type.endsWith('Clear') &&(source.drm.length === 0) && source.type.startsWith('DASH')){
videoUrl = source.url
}
})
}
});
if(videoUrl){
GM_setClipboard(videoUrl);
Toast(`第${index}集地址已复制到剪切板`)
}else{
Toast(`第${index}集是加密内容`)
}
}else{
Toast('获取分集信息失败');
}
}
});
}
function init(){
GM_addStyle(`
.epList{
background-color:#ffbf00;
border-radius:10px;
padding:15px;
position:fixed;
top:50%;
right:15px;
display:flex;
flex-flow:row wrap;
justify-content: flex-start;
max-width:230px;
max-height: 300px;
overflow-y: auto;
}
.epList::-webkit-scrollbar{
width:4px;
}
.epList::-webkit-scrollbar-thumb {
background-color: #0cb317;
outline: 1px solid slategrey;
}
.epList>a{
display:inline-flex;
align-items:center;
justify-content: center;
min-width:20px;
line-height:20px;
margin:4px;
padding:1px 4px;
color: white;
border-bottom: solid 3px #0cb317;
cursor: pointer;
background-color: #000;
}
.epList>a.premium{
background-color:#a5238c;
}
.epList>a:hover{
color:red;}
.toastify{padding:12px 20px;color:#fff;display:inline-block;box-shadow:0 3px 6px -1px rgba(0,0,0,.12),0 10px 36px -4px rgba(77,96,232,.3);background:-webkit-linear-gradient(315deg,#73a5ff,#5477f5);background:linear-gradient(135deg,#73a5ff,#5477f5);position:fixed;opacity:0;transition:all .4s cubic-bezier(.215,.61,.355,1);border-radius:2px;cursor:pointer;text-decoration:none;max-width:calc(50% - 20px);z-index:2147483647}.toastify.on{opacity:1}.toast-close{opacity:.4;padding:0 5px}.toastify-right{right:15px}.toastify-left{left:15px}.toastify-top{top:-150px}.toastify-bottom{bottom:-150px}.toastify-rounded{border-radius:25px}.toastify-avatar{width:1.5em;height:1.5em;margin:-7px 5px;border-radius:2px}.toastify-center{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content;max-width:-moz-fit-content}@media only screen and (max-width:360px){.toastify-left,.toastify-right{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content}}
`);
}
function Toast(msg,duration){
duration=isNaN(duration)?3000:duration;
if(typeof Toastify!='undefined'){
Toastify({
text: msg,
duration: duration,
close: true,
gravity: "top", // `top` or `bottom`
position: "right", // `left`, `center` or `right`
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
stopOnFocus: true, // Prevents dismissing of toast on hover
onClick: function(){} // Callback after click
}).showToast();
return;
}
var m = document.createElement('div');
m.innerHTML = msg;
m.style.cssText="max-width:60%;min-width: 150px;padding:0 14px;height: 40px;color: rgb(255, 255, 255);line-height: 40px;text-align: center;border-radius: 4px;position: fixed;top: 5%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(255, 191, 0,.7);font-size: 16px;";
document.body.appendChild(m);
setTimeout(function() {
var d = 0.5;
m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
m.style.opacity = '0';
setTimeout(function() { document.body.removeChild(m) }, d * 1000);
}, duration);
}
})();