巨量下载

巨量广告下载

目前為 2022-01-27 提交的版本,檢視 最新版本

// ==UserScript==
// @name         巨量下载
// @namespace    http://tampermonkey.net/
// @version      2.1.3
// @description  巨量广告下载
// @author       hayasol657
// @run-at       document-start
// @license      MIT License
// @grant        GM_invokeFn
// @include      *://cc.oceanengine.com/*
// @inject-into  page
// @require      https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.18.0/js/md5.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/1.7.2/jquery.min.js
// ==/UserScript==

var metaCache = {};

//hook xhr
var origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
  if (arguments[1].indexOf('creative_radar_api/v1/material/info') > -1 ||
      arguments[1].indexOf('creative_radar_api/v1/material/list') > -1) {
    this.addEventListener('load', function() {
      if (this.responseType && this.responseType !== "text") return;
      var res = JSON.parse(this.responseText)
      var key = 'materials'
      if (res?.data && typeof res.data === 'object' && 'vid' in res.data) {
        res.data = {'materials': [res.data]}
      }
      if (res?.data && typeof res.data === 'object' &&
          key in res.data && res.data[key].length > 0) {
        var feeds = res.data[key];
        for (var i = 0; i < feeds.length; i++) {
          var id = feeds[i].vid;
          if (metaCache[id]) continue;
          feeds[i].id = id;
          metaCache[id] = feeds[i];
        }
        // console.log(metaCache)
      }
    });
  }
  // console.log(arguments)
  origOpen.apply(this, arguments);
};

(function () {
  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;
            });
          }
          // console.log("updateItems", items)
          resolve(items)
        },
        error: function (error) {
          reject(error)
        },
      });
    });
  }

  var getItemByMeta = (meta) => {
    if (!meta) return null;
    var id = `mona-${md5(meta.id)}`
    if ($(`#${id}`).length > 0) return null;
    var dom = $(`<div id='${id}'></div>`)
    return { id, url:"", dom, meta }
  }

  var detailPrefix = "/inspiration/creative-radar/detail/";
  var pageParsers = {
    detail: async () => {
      var mid = Object.keys(metaCache)[0];
      var item = getItemByMeta(metaCache[mid])
      if (item) {
        item.pdom = $(".radar-detail-preview-box").find(".cc-video-player");
        if (item.pdom.length > 0) await updateItems([item]);
        return [item];
      }
      return [];
    },
    list: async () => {
      var items = []
      for (var [id, meta] of Object.entries(metaCache)) {
        var imgUrl = new URL(meta.head_image_uri);
        var item = getItemByMeta(meta);
        if (item) {
          item.pdom = $(`.poster-image[style*='${imgUrl.pathname}']`).parent();
          if (item.pdom.length > 0) items.push(item);
        }
        // 每次返回N个,分多次
        if (items.length >= 10) break;
      }

      if (items.length > 0) {
        await updateItems(items);
      }
      return items
    }
  }

  var getPageParser = () => {
    var url = new URL(window.location.href);
    if (url.pathname === "/inspiration/creative-radar/video") {
      return pageParsers.list;
    } else if (url.pathname.indexOf(detailPrefix) > -1) {
      return pageParsers.detail;
    } else {
      throw 999;
    }
  }

  var parser = {
    parseItems: async () => {
      var pr = getPageParser()
      if (!pr) return []
      return pr()
    }
  }

  GM_invokeFn("regParser", parser)
})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址