您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
巨量广告视频下载
当前为
// ==UserScript== // @name 巨量下载 // @namespace http://tampermonkey.net/ // @version 2.2.3 // @description 巨量广告视频下载 // @author hayasol657 // @run-at document-start // @license MIT License // @grant GM_download // @include *://cc.oceanengine.com/* // @inject-into page // @require https://greasyfork.org/scripts/440006-mono/code/mono.js?version=1026816 // ==/UserScript== (function () { var mono = window['mono-descargar']; var failover = mono.FAIL_TO_DEFAULT; var $ = mono.jQuery; var md5 = mono.md5; var onRequest = mono.onRequest; var filename = mono.filename; var metaDict = {}; var metaMap = { materials: 'material', items: 'douyin' }; onRequest(({url, resp}) => { if (!resp) return; for (const key of Object.keys(metaMap)) { var prefix = `creative_radar_api/v1/${metaMap[key]}`; if (!url.includes(`${prefix}/info`) && !url.includes(`${prefix}/list`)) continue; var res = JSON.parse(resp); if (res?.data && typeof res.data === 'object' && 'vid' in res.data) { res.data = { [key]: [res.data] }; } if (res?.data && typeof res.data === 'object' && key in res.data && res.data[key].length > 0) { const feeds = res.data[key]; for (var i = 0; i < feeds.length; i++) { const id = feeds[i].vid; if (metaDict[id]) continue; feeds[i].id = id; metaDict[id] = feeds[i]; } } } }); var updateItems = async (items) => { if (items.length <= 0) return; return new Promise((resolve, reject) => { $.ajax({ url: "https://cc.oceanengine.com/creative_content_server/api/video/info", type: 'POST', data: JSON.stringify({ "query_ids": items.map(im => im.meta.vid), "water_mark": 'ad' }), success: function (data) { if (data?.data && Object.keys(data?.data).length > 0) { items.forEach(item => { item.url = data.data[item.meta.vid].video_url; item.meta.video = data.data[item.meta.vid]; item.meta.cover = data.data[item.meta.vid].cover_url; item.meta.title = item.meta.bestTitle || item.meta.item_title; item.meta.name = filename(item.meta.title || document?.title); }); } resolve(items) }, error: function (error) { reject(error) }, }); }); } var getItemByMeta = (meta) => { if (!meta || !meta.id) return null; if ($(`[mono-dsg-id=${meta.id}]`).length > 0) return null; return { id: meta.id, url: "", meta }; } var detail = async (style) => { const mid = Object.keys(metaDict)[0]; const item = getItemByMeta(metaDict[mid]) if (item) { var $el = $(`.${style}`).find(".cc-video-player"); if ($el.length > 0) { await updateItems([item]); item.container = $el[0]; console.log(item); return [item]; } } return []; } var list = async () => { const items = [] for (const [id, meta] of Object.entries(metaDict)) { const imgUrl = new URL(meta.head_image_uri); const item = getItemByMeta(meta); if (item) { var $el = $(`.poster-image[style*='${imgUrl.pathname}']`).parent(); if ($el.length > 0) { item.container = $el[0]; items.push(item); } } if (items.length >= 10) break; } if (items.length > 0) { await updateItems(items); } return items; } var parser = async function () { var url = new URL(window.location.href); var lists = [ "/inspiration/creative-radar/video", "/inspiration/douyin/content" ]; var ccdetail = "/inspiration/creative-radar/detail/"; var dydetail = "/inspiration/douyin-detail/"; if (lists.includes(url.pathname)) { return await list(); } else if (url.pathname.indexOf(ccdetail) > -1) { return await detail('radar-detail-preview-box'); } else if (url.pathname.indexOf(dydetail) > -1) { return await detail('creative-douyin-detail-info'); } else { throw failover; } } if (mono?.init) mono.init({ parser }); })()