Sponsor Block Integration | Invidious

automatically skip sponsor fragments in invidious

目前為 2022-10-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name Sponsor Block Integration | Invidious
// @description automatically skip sponsor fragments in invidious
// @namespace -
// @version 1.2.0
// @author NotYou
// @include *://invidious.snopyta.org/*
// @include *://yewtu.be/*
// @include *://invidious.kavin.rocks/*
// @include *://vid.puffyan.us/*
// @include *://invidious.namazso.eu/*
// @include *://inv.riverside.rocks/*
// @include *://youtube.076.ne.jp/*
// @include *://yt.artemislena.eu/*
// @include *://invidious.flokinet.to/*
// @include *://invidious.esmailelbob.xyz/*
// @include *://invidious.projectsegfau.lt/*
// @include *://inv.bp.projectsegfau.lt/*
// @include *://y.com.sb/*
// @include *://invidious.sethforprivacy.com/*
// @include *://invidious.tiekoetter.com/*
// @include *://invidious.nerdvpn.de/*
// @include *://inv.vern.cc/*
// @include *://invidious.slipfox.xyz/*
// @include *://inv.privacy.com.de/*
// @include *://invidious.rhyshl.live/*
// @include *://invidio.xamh.de/*
// @include *://invidious.dhusch.de/*
// @include *://inv.odyssey346.dev/*
// @include *://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion/*
// @include *://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/*
// @include *://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/*
// @include *://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/*
// @include *://osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd.onion/*
// @include *://u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad.onion/*
// @include *://euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd.onion/*
// @include *://invidious.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion/*
// @include *://inv.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion/*
// @include *://am74vkcrjp2d5v36lcdqgsj2m6x36tbrkhsruoegwfcizzabnfgf5zyd.onion/*
// @include *://ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid.onion/*
// @include *://verni6dr4qxjgjumnvesxerh5rvhv6oy5ddeibaqy5d7tgbiiyfa.b32.i2p/*
// @license GPL-3.0-or-later
// @grant none
// @icon data:image/png;base64,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
// ==/UserScript==

(function() {
  let id = JSON.parse(document.querySelector('#video_data').textContent).id
	let url = 'https://sponsor.ajay.app/api/skipSegments?category=selfpromo&category=sponsor&videoID=' + id
  let video = document.querySelector('video')
  let segments = []
  let isPlayerJS = !document.querySelector('video#player')

  let css = 'height: 100%;position: absolute;z-index: 1;'
  let colors = {
    sponsor: 'rgb(52, 217, 38)',
    selfpromo: 'rgb(217, 197, 38)',
  }

  getSkipSegment().then(r => {
    for (let i = 0; i < r.length; i++) {
      let current = r[i]
      if(current.votes > -1) {
      	let segment = current.segment
      	let left = segment[0] / current.videoDuration * 100 + '%'
      	let width = (segment[1] - segment[0]) / current.videoDuration * 100 + '%'

        segments.push(segment)
      	createSegment(left, width, colors[current.category])
      }
    }

    if(r.length > 0) {
      skipSponsor()

      video.addEventListener('timeupdate', skipSponsor)
    }
  })

  function skipSponsor() {
    let progress = document.querySelector('.vjs-play-progress')

    for (let i = 0; i < segments.length; i++) {
      let segment = segments[i]
      let currentTime = video.currentTime

      if(currentTime > segment[0] && currentTime < segment[1]) {
        video.currentTime = segment[1]
      }
    }
  }

  function createSegment(left, width, color){
    if(isPlayerJS) {
      let segment = document.createElement('div')
      segment.setAttribute('class', 'sbi-sponsor-segment')
      segment.style.cssText = `
			left: ${left};
			width: ${width};
			background-color: ${color};
			${css}`
      segment.style.left = left
      segment.style.width = width
      document.querySelector('.vjs-progress-holder').appendChild(segment)
    }
  }

  async function getSkipSegment() {
    let result = await fetch(url).then(r => r.json()).then(c => {
      return c
    }).catch(e => {
      console.error('Server Error or Intergration Not Found.')
      return []
    })

    return result
  }
})()

QingJ © 2025

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