Greasy Fork is available in English.
下载xigua视频
当前为
// ==UserScript==
// @name xigua视频下载
// @namespace http://tampermonkey.net/
// @version 0.1.11
// @description 下载xigua视频
// @author kemalo1101
// @license MIT License
// @run-at document-start
// @grant GM_download
// @include *://*ixigua.com/*
// @require http://greasyfork.icu/scripts/440006-mono/code/mono.js?version=1042513
// ==/UserScript==
(function () {
var mono = window['mono-descargar'];
var $ = mono.jQuery;
var md5 = mono.md5;
var filename = mono.filename;
var onRequest = mono.onRequest;
var idKey = 'mono-dsg-id';
var dash = null;
var metaCache = {}
var origOpen = XMLHttpRequest.prototype.open;
var originFetch = fetch;
var updateMateCache = ({url, resp}) => {
if (resp && (url.indexOf('v9-xg-web-s.ixigua.com') !== -1)) {
console.log('url', url)
if (url.indexOf('.mpd') !== -1) {
var urlObj = new URL('https:' + url)
var paths = urlObj.pathname.split('/');
paths.pop();
console.log('resp', resp)
metaCache.data = {
mpd:resp,
url:urlObj.origin + (paths.join('/')) + '/'
};
metaCache.dataType = 'mpd';
console.log('metaCache', metaCache)
}
} else if ((url.indexOf('v9-xg-web-s.ixigua.com') !== -1) && url.indexOf('mime_type=video_mp4') !== -1){
metaCache.dataType = 'merge';
if (url.indexOf('media-audio-und-mp4a') !== -1) {
metaCache.data = 'https:' + url.split('&range=')[0];
} else if (url.indexOf('media-video-avc1') !== -1) {
metaCache.url = 'https:' + url.split('&range=')[0];
}
console.log('metaCache', metaCache)
}
}
XMLHttpRequest.prototype.open = function(method, url, ...rest) {
this.addEventListener('load', function () {
var resp;
try {
resp = this.responseText;
} catch (e) {console.log('e', e)}
updateMateCache({url, resp})
});
origOpen.call(this, method, url, ...rest);
};
window.fetch = async (url, request) => {
const response = await originFetch(url, request);
try {
const resp = response.clone();
const data = {
method: 'fetch',
url,
resp: await resp.text()
};
updateMateCache(data)
} catch (e) {}
return response;
};
var getItemByMeta = (meta) => {
var id = `xigua-${md5(meta.data)}`
var item, selector, selClass;
console.log('meta', meta)
if (meta.dataType === 'mpd') {
if (!dash?.config?.DASHPlugin?.dashOpts?.drm?.clearKeys) {
const keys = Object.keys(window)
for (let key of keys) {
if (key.startsWith('dash_')) {
dash = window[key]
}
}
}
if (!dash.config?.DASHPlugin?.dashOpts?.drm?.clearKeys) return null
meta.data.key = dash.config?.DASHPlugin?.dashOpts?.drm?.clearKeys
item = { id, url: meta.data.url, meta: meta }
selector = `.teleplayPage__playerSection__left`;
selClass = '.teleplayPage__playerSection';
} else if (meta.dataType === 'merge') {
if (!meta.data || !meta.url) return null;
item = { id, url: meta.url, meta: meta };
selector = `.playerSection`;
selClass = '.playerBlock';
} else {
return null
}
// 按钮
if ($(`[${idKey}=${id}]`).length > 0) return null;
var $el = null;
if (selector) $el = $(selector)
if ($el.length > 0 && selClass) {
var ps = $el.parentsUntil(selClass);
if (ps.length > 0) $el = $(ps[ps.length - 1])
}
if ($el.length <= 0) return null;
var container = $el[0];
if (item) {
item.container = container
return item
}
return null
}
var cc = () => {
var items = [];
var item = getItemByMeta(metaCache)
console.log('item', item)
if (!item) return items
if (item) items.push(item);
return items
}
var parser = async function () {
var url = window.location.href;
if (url.indexOf('.ixigua.com') !== -1 && Object.keys(metaCache).length > 0) {
return cc();
} else {
return [];
}
}
if (mono?.init) mono.init({ parser });
})()