Simple •TvTime➡️(Télécharger🔛Regarder)

Objectif Simple TROUVER SERIES (Complete) À partir du site https://www.tvtime.com/fr vous pourrez avoir cliquer sur 🔍 pour trouver votre serie rapidement pour la regarder ou la télécharger. Autres détails:(Sur TV Time pour vérifie si une saison est completement clicker sur " ⟳ " ). Ajout d'un lien (🔍)et simplification d'utilisation. ET ajout d'un boutton pour "tout dl" pour le premier hébergeur si la saison et complète et autre filtre(type best quality)...)

当前为 2023-03-13 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Simple •TvTime➡️(Télécharger🔛Regarder)
// @namespace    http://tampermonkey.net/
// @version      1.0.5
// @description  Objectif Simple TROUVER SERIES (Complete) À partir du site https://www.tvtime.com/fr vous pourrez avoir cliquer sur 🔍 pour trouver votre serie rapidement pour la regarder ou la télécharger. Autres détails:(Sur TV Time pour vérifie si une saison est completement clicker sur " ⟳ " ). Ajout d'un lien (🔍)et simplification d'utilisation. ET ajout d'un boutton pour "tout dl" pour le premier hébergeur si la saison et complète et autre filtre(type best quality)...)
// @license      MIT
// @author       DEV314R
// @match        https://www.tvtime.com/fr
// @match        https://www.tvtime.com/fr/*
// @match        https://www.tvtime.com/*/to-watch
// @match        https://dl-protect.net/*
// @match        https://www.zone-telechargement.co/?p=serie*
// @match        https://www.zone-telechargement.co/?p=manga*
// @match        https://www.zone-telechargement.co/?p=autres-videos&search*
// @match        https://www.zone-telechargement.co*
// @icon         https://icons.duckduckgo.com/ip2/tvtime.com.ico
// @run-at       document-start
// @grant        GM_addStyle
// @grant        window.close
// ==/UserScript==
if(location.href.search(/www.tvtime.com/gi)>-1){csstime()}
document.addEventListener('DOMContentLoaded',()=>{
if(location.href.search(/www.tvtime.com/gi)>-1){


const juste=1//1=seulement les complète | 0=tous avec indication
const jour=0//jour en décalage par rapport au jour de sortie de la serie

var site="www.zone-telechargement.co/?p=series&search="


const a = document.querySelectorAll(".episode-details.poster-details > a[href],#all-shows > section > ul> li > div > div > h2 >a");
let k = 0;


const cl=document.querySelectorAll('.episode-details.poster-details > a');
for(let g=0;g<cl.length;g++) {
const s=cl[g];
const ed=s.innerText;
s.parentNode.parentNode.firstElementChild.innerHTML+=`<a style="border: 0.2em ridge #ffd700; border-radius: 20%;" target="_blank" href="https://${site}${ed.replace(/ 🔍|\(.+\)/gi, '+')}">🔍</a>`;
}


function re() {
  const i = document.querySelector("#rech");
  const cl = a.length;
  if (k < cl) {
  setTimeout(async()=>{
      await recherche(k);
      k++;
      re();
    }, 10);
    i.value = "⌛";
    i.style.background = "#000";
  } else if (k === cl) {
    i.value = "👌";
    i.removeAttribute("id");
}}



if(location.href.search(/www.tvtime.com\/.+\/show\//gi)>-1){
  const d1 = new Date().valueOf();
  const d2 = new Date(document.querySelector(".season-content.active > ul > li:last-child > div > div > a>.episode-air-date").textContent.match(/\d\d\d\d-\d\d-\d\d/gi)[0]).valueOf();
  if (d1 >= d2) {
    document.title = "✅" + document.title.replace(/TV Time - /gi, "");
  } else {
    document.title = "❌" + document.title.replace(/TV Time - /gi, "");
    document.querySelector('.col-sm-2.actions > .row > .active.watched-btn.col-sm-offset-4.col-sm-6 > .icon-tvst-watch').scrollIntoView();
}
if(location.href.search(/www.tvtime.com\/.+\/show\/\d+/gi) > -1) {
const dn=document.querySelector("#top-banner > div > div.info-zone > div > div > h1");
dn.innerHTML += ('<a style="outline:0.1em ridge #ffd700;outline-radius:20%;" href="https://'+site+dn.innerText.replace(/ 🔍|\(.+\)/gi, "")+'" target="_blank">🔍</a>');
}
}else{
document.querySelector("#home-link").insertAdjacentHTML('beforebegin', '<input id="rech" type="button" value="⟳" style="color:#000;background:#ffd700;border: 0.1em solid #ffd700; border-radius:50%;width:2.3em;height:2.3em;"></input><br>');
}

////
const OnEvent=(doc)=>{
 return{
  on:(type,selector,callback)=>{
   doc.addEventListener(type,(event)=>{
    if(!event.target.matches(selector))return;
    callback.call(event.target,event);
    },false);
}}};
OnEvent(document).on('click','#rech',()=>{
re()

})


async function recherche(num) {
    var s = a[num];
    var url = s.href;
    var dd = s;
    var da = new Date().valueOf();
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.responseType = "document";
    xhr.onload = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var response = xhr.responseXML.querySelector('.season-content.active > ul > li:last-child > div > div > a > .episode-air-date');
            var db = new Date(response.textContent.match(/\d\d\d\d-\d\d-\d\d/gi)[0]).valueOf();
            if (da >= (db + (jour * 86400000))) {
                dd.innerText += '✅';
            } else {
                if (juste == 1) {
                    dd.parentNode.parentNode.parentNode.removeChild(dd.parentNode.parentNode);
                }
                dd.innerText += '❌';
                dd.innerHTML += ('<br> ' + ((db - da) / 86400000).toFixed(0) + ' jours restants avant sortie complète');
            }
            dd.innerText += response.innerText;
            var EpisodeMax = xhr.responseXML.querySelectorAll('[itemprop="season"].season-content.active > ul > li').length;
            dd.innerHTML += ('<br>nombre d\'épisode: ' + EpisodeMax);
}
}
xhr.send();
}





}else if(location.href.search(/dl-protect.net/gi)>-1){

GM_addStyle(`body,.urls{color:#ddd;background:#000!important;}
#subButton{color:#000;transform: scale(1.5);}
.navbar,.amigo,footer{display:none!important;}`)
document.title="⏳"+document.title
setTimeout(()=>{document.querySelector("#subButton").click()
document.title="🖱️"+document.title
},3000)
setTimeout(()=>{document.querySelector('[rel="external nofollow"]').click()},100)
let a=document.addEventListener("mouseenter", fcliq);
function fcliq(){
 document.title="🤖"+document.title
 setTimeout(()=>{document.querySelector("#subButton").click()},100)}
 var erreur=document.querySelector("#protected-container > div:nth-child(2) > div > ul > li > a")
 if(erreur.innerText.search(/invalide/gi)>-1){
 erreur.click()
}

}


if(location.href.search(/(serie|manga)&id/gi)>-1){
var t= document.querySelector("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(3)")
var d1=document.querySelector("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(4)").textContent.match(/\d+(?=\sEpisode)/gi)[0]
var dm=document.querySelector("center > .postinfo").innerText.match(/\d+/gi)
let match= dm.includes(d1)
t.textContent=(match?"✅":"❌")+t.textContent;
if (t.textContent.startsWith("✅")){adjtdl();}
}

if(location.href.search(/zone-telechargement.+(series&search|(serie|manga)&id=|search=)/gi)>-1){removeLessImportant("#dle-content > div:nth-child(n+5) > div:nth-child(4) > div > div > span > span > b");}
function removeLessImportant(arre) {
 var arr = document.querySelectorAll(arre);
    let best;
    for (let i = 0; i < arr.length; i++) {
        if (arr[i].textContent.includes("4K")) {
            best = arr[i];
            break;
        } else if (arr[i].textContent.includes("(VF HD)")) {
            if (!best || best.textContent.includes("(VF)")) {
                best = arr[i];
            }
        } else if (arr[i].textContent.includes("(VF)")) {
            if (!best) {
                best = arr[i];
            }
        }
    }
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] !== best) {
         var s=arr[i].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode
           s.parentNode.removeChild(s);
}}}
/*
if(location.href.search(/(serie|film)&id/gi)>-1){clickOnElement2("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(4)",/vf|720p|HDRIP|BDRIP/gi,"#dle-content > div.base > div > div.corps > div:nth-child(1) > div.otherversions > a > span > span > b",/\(VF HD\)|1080p/gi)}

function clickOnElement2(element1,txt1, element2,txt2) {
  if (document.querySelector(element1).innerText.search(txt1)>-1 && document.querySelector(element2).innerText.search(txt2)>-1) {
    document.querySelector(element2).click();
}}
*/

function adjtdl(){
var result = document.querySelector("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(4)").textContent.match(/\d+(?=\sEpisode)/gi);
var finalResult = result ? parseInt(result[0]) : 0;

const links=document.querySelectorAll(".postinfo > b > a[href]")

var index = 0;

function openLink(){

links[index].click()
index++;
setTimeout(()=>{
if(finalResult>index){
openLink();
}
},700)

}

const OnEvent=(doc)=>{
 return{
  on:(type,selector,callback)=>{
   doc.addEventListener(type,(event)=>{
    if(!event.target.matches(selector))return;
    callback.call(event.target,event);
    },false);
}}};

OnEvent(document).on('click','#tdl',()=>{let a=openLink()})

document.querySelector("center > div > b:nth-child(1) > div").insertAdjacentHTML('afterbegin', '<a id="tdl"; style="border: 0.2em ridge #ffd700;padding:0.2em;margin:0.2em;cursor:pointer;"> TOUS DL </a>');
}


if(location.href.search(/(serie|manga)&id/gi)>-1){
var siteT="https://www.tvtime.com/fr/"
var nom=document.querySelector("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(3)").innerText
document.querySelector("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(3)").insertAdjacentHTML('beforeend', '<a style="border: 0.2em ridge #ffd700; color:ffd700; background:#000; margin-left:0.6em;" target="_blank" href="'+siteT+'##'+nom.replace(/✅|❌/gi,'')+'">TV Time</a><br>')
}else if (location.href.match(/www.tvtime.com\/fr\/##.+/gi)>-1){
var recherche=document.querySelector("#global-search-input")
if (location.href.match(/##.+/gi)){
var decodedText = decodeURIComponent(location.href.split("##")[1]);
recherche.value = decodedText;
}
//recherche en cours...
}



if(location.href.search(/((serie|manga)(s)?)(&(id|s))?/gi)>-1){extractContent();}

function extractContent() {
  // Référence pour les URL
  var urlElements = document.querySelectorAll("#dle-content > div:nth-child(n+4) > div:nth-child(4) div div a[href]");
  // Référence pour le contenu à afficher
  var targetElements = document.querySelectorAll("#dle-content > div:nth-child(n+4) > div:nth-child(4) div div a[href]");

  // Conversion de la référence NodeList en un tableau
  urlElements = Array.from(urlElements);
  targetElements = Array.from(targetElements);

  // Génération d'un tableau de promesses qui exécutent la récupération du contenu à partir de l'URL
  var promises = urlElements.map(function(urlElement, i) {
    var url = urlElement.href;

    return fetch(url)
      .then(function(response) {
        return response.text();
      })
      .then(function(html) {
        // Extraction du contenu
        var parser = new DOMParser();
        var doc = parser.parseFromString(html, "text/html");
        var sourceElement = doc.querySelector("#dle-content > div.base > div > div.corps > div:nth-child(1) > div:nth-child(4)");
        // Extraction du numéro de l'épisode le plus récent
        var dernierepisodeP2 = Math.max(...(doc.querySelector("center > .postinfo").innerText.match(/\d+/gi)));
        // Renvoi du contenu extrait
        var innerText = sourceElement.innerText.match(/\d+ Episodes/gi);
        if (innerText !== null && parseInt(innerText[0].match(/\d+/gi)[0]) === parseInt(dernierepisodeP2)) {
          // L'épisode est le plus récent, on ajoute un message de mise à jour
          innerText = "✅Complet " + innerText;
        }else if(innerText == null){innerText = "❗␀ " + innerText;}
     else {
          // L'épisode est incomplet, on retire l'élément parent de targetElements
      targetElements[i].parentElement.parentElement.parentElement.parentElement.remove();

        }
        return {
          targetElement: targetElements[i],
          innerText: innerText
        };
      });
  });

  // Attente de la résolution de toutes les promesses avant de mettre à jour les éléments cibles
  Promise.all(promises).then(function(results) {
    results.forEach(function(result) {
      result.targetElement.innerHTML += "<br>" + result.innerText;
    });
  });
}




setTimeout(()=>{
if((document.querySelector("#dle-content > div:nth-child(4)").innerText.match(/Aucune fiches trouvé/gi)||!document.querySelector("#dle-content > div:nth-child(5) > div:nth-child(4) > div > div > a")) && location.href.search(/series&search/gi)>-1){
window.open(location.href.replace(/series&search/gi,"mangas&search"), "_self");

}else
if((document.querySelector("#dle-content > div:nth-child(4)").innerText.match(/Aucune fiches trouvé/gi)||!document.querySelector("#dle-content > div:nth-child(5) > div:nth-child(4) > div > div > a")) && location.href.search(/mangas&search/gi)>-1){
window.open(location.href.replace(/mangas&search/gi,"autres-videos&search"), "_self");
}else if((document.querySelector("#dle-content > div:nth-child(4)").innerText.match(/Aucune fiches trouvé/gi)||!document.querySelector("#dle-content > div:nth-child(5) > div:nth-child(4) > div > div > a")) && location.href.search(/autres-videos/gi)>-1){
document.title="🙅"+document.title
document.querySelector("body").innerText="Pas trouver fermeture dans 5 Seconde"
setTimeout(function f(){window.close(document.URL)},5000)

}},3000)


})

function csstime(){
GM_addStyle(`
section{padding:0;margin:0}
html,.alt-block,#content,section,.row,.body-inner,ul.dropdown-menu,.scrollable,.right{color:#ddd!important;background:#000!important;}
.credits > p,.social,#get-the-app{display:none;}
#home {color:#ddd;background:#fbd737;}
h3,.label,.expand-icon{color:#fbd737!important;}
.label :hover,[data-toggle] :hover{color:#000!important;background:#fbd737;}
.rank-sticker{color:#000!important;}
span,h2{color:#fff!important;}
#profile,#to-watch,.main-block{color:#ddd;background:#222;}
h1,h2 a{color:#ddd!important;}
.posters-list>li .poster-details .secondary-link{color:#888}
.dropdown{background:#1a1a1a!important;}
#episode-details.episode.episode-header.banner.change-episode-link{
	width: 43%;
border: 0.1vw solid #fbd737!important;}
#actor-discussion .filters, #profile-discussion .filters, #profile-shows #favorite-shows .progress, #profile-shows #favorite-shows h3, #profile-shows .labels h4, #profile-shows .posters-list>li .poster-details h3 {
display: block;color: #7cdb62!important;}
`)}