返回首頁 

Greasy Fork is available in English.

JVbackup

pour backup le saint sanctuaire


Installer ce script?
  1. // ==UserScript==// @name JVbackup// @namespace http://tampermonkey.net/// @version 0.8.1// @description pour backup le saint sanctuaire// @author flolep2607// @match https://www.jeuxvideo.com/forums/0-51-*.htm// @match https://www.jeuxvideo.com/forums/42-51-*.htm// @icon https://www.google.com/s2/favicons?domain=jeuxvideo.com// @run-at document-idle// @grant GM_xmlhttpRequest// @license MIT// ==/UserScript==(function() {'use strict';const TIMER_SLEEP=5000;const DEBUG=false;const sleep = ms => {return new Promise(resolve => setTimeout(resolve, ms));}const months=['janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'];const regex_code = /[0-9]+\-[0-9]+\-([0-9]+)\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+/;const SUPPORT = (function () {if (!window.DOMParser) return false;var parser = new DOMParser();try {parser.parseFromString('x', 'text/html');} catch(err) {return false;}return true;})();const parser = SUPPORT?new DOMParser():null;const textToHTML=(html) => {// check for DOMParser supportif (SUPPORT) {//let p =parser.parseFromString(html, 'text/html');//console.log(p.querySelectorAll("ul.topic-list > li[class='']"));return parser.parseFromString(html, 'text/html');}else{document.write(html)return document;}};const aa_fetch=(url_u)=>{return fetch(url_u).then(async u=>[await u.text(),u.url]).then((b)=>{//console.log("aa",b[0])return scrape(textToHTML(b[0]),b[1]);}).catch(r=>console.log(`!!req error:${r} url:${url_u}`));}const makeGetRequest=url=>{return new Promise((resolve, reject) => {GM_xmlhttpRequest({method: "GET",url: url,onload: function(response) {resolve(response.responseText);},onerror: function(error) {reject(error);}});});}let RUNNING=false;const farmer= async _=>{const checkbox=document.querySelector('#check_scrape');checkbox.addEventListener("click",async _=>{let interval;while(checkbox.checked && !RUNNING){RUNNING=true;let TODO=[];interval=setInterval(_=>{aa_fetch("https://www.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm");},5000)await makeGetRequest(DEBUG?'http://localhost:3000/api/thread2scrape':'http://jvc.flolep.fr/api/thread2scrape').then(async json=>{let r###lt=[];json=JSON.parse(json);r###lt.push(...json.data.map(r=>[1,r,1]).filter(u=>!r###lt.map(i=>i[1]).includes(u[1]) && !TODO.map(i=>i[1]).includes(u[1])));while(TODO.length<10&&r###lt.length>0){TODO.push(r###lt.pop())}while(checkbox.checked && TODO.length>=10){console.log(checkbox.checked);TODO = await Promise.allSettled(TODO.map((infos)=>{const url=`https://www.jeuxvideo.com/forums/42-51-${infos[1]}-${infos[0]}-0-1-0-u.htm`;//let final_url;return fetch(url).then(u=>u.text()).then((b)=>{const tmp=scrape(textToHTML(b),url);return [tmp[0],infos[1],infos[2]];}).catch(r=>console.log(`req error:${r} url:${url}`));})).then(r=>{console.log('bunch scraped');return r})TODO=TODO.filter(b=>b).map(r=>r.value);console.log(">>",TODO);TODO=TODO.filter(b=>b&&b[0]>b[2]);while(TODO.length<10&&r###lt.length>0){TODO.push(r###lt.pop())}}});RUNNING=false;}clearInterval(interval);})}const actualiseur=a=>{while(document.querySelector('.bloc-pre-right')){const bloc=document.querySelector('.bloc-pre-right');//returnif(bloc){bloc.classList.remove('bloc-pre-right');bloc.style='float: right;'if(a){bloc.style='position: relative;right: unset;left: unset;top: unset;bottom: unset;overflow: hidden;display: flex;flex-wrap: wrap;justify-content: flex-end;margin-top: auto;flex: 1;'}bloc.innerHTML=`<div class="btn btn-actu-new-list-forum btn-actualiser-forum" style="float: right;border-color: var(--jv-text-secondary);background: transparent;color: var(--jv-text-secondary);text-transform: uppercase;font-weight: 700;padding: 0;font-size: .625rem;height: 1.75rem;min-width: 6.375rem;line-height: 1.6875rem;border-radius: 0.25rem;">Actualiser</button>`;const child=bloc.querySelector('div')child.classList.remove('btn-actu-new-list-forum')child.classList.remove('btn-actualiser-forum')//console.log(child)child.addEventListener("click",_=>{fetch(document.URL).then(r=>r.text()).then(u=>{const data=textToHTML(u);document.body.innerHTML=data.body.innerHTML;scrape(document,document.URL);actualiseur(a);})})}}}const uniq_fast = a=> {var seen = {};var out = [];var len = a.length;var j = 0;for(var i = 0; i < len; i++) {var item = a[i];if(seen[item] !== 1) {seen[item] = 1;out[j++] = item;}}return out;}// `https://www.jeuxvideo.com/forums/42-51-${code}-1-0-1-0-ma-tante-est-morte.htm`//fetch('https://www.jeuxvideo.com/forums/42-51-49703882-21-0-1-0-qui-n-a-toujours-pas-eu-son-alloc-garantie-jeunes.htm').then(u=>u.text()).then(u=>document.write(u))const range = (u, l) => {var list = [];for (var i = u; i <= l; i++) {list.push(i);}return list;}if(document.URL.includes('forums/0-51-')){actualiseur();document.querySelector('div.header__nav.header__nav--primary').innerHTML=""document.querySelector('.header__globalWeb').innerHTML='<input id="check_scrape" type="checkbox" ><input id="addon_backup_start" class="xXx" style="width:64px" value="5"><input id="addon_backup_end" class="xXx" style="width:64px" value="20"><input id="addon_backup" class="xXx" style="width:64px" type="button">';document.getElementById("addon_backup").addEventListener("click", async _=>{//let url="";let start=parseInt(document.getElementById("addon_backup_start").value);const end=parseInt(document.getElementById("addon_backup_end").value);while(start<end){await Promise.allSettled(range(start,(start+10-end)<0?start+10:end).map(i=>{return aa_fetch(`https://www.jeuxvideo.com/forums/0-51-0-1-0-${1+i*25}-0-blabla-18-25-ans.htm`);}));start=(start+10-end)<0?start+10:end;console.log(`part done: ${start}`);}console.log("alldone");//for(let i=parseInt(document.getElementById("addon_backup_start").value);i<parseInt(document.getElementById("addon_backup_end").value);i++){// url=`https://www.jeuxvideo.com/forums/0-51-0-1-0-${1+i*25}-0-blabla-18-25-ans.htm`// aa_fetch(url);//}});farmer();}else if(document.URL.includes('forums/42-51-')){actualiseur(1);document.querySelector('.header__globalWeb').innerHTML='<input id="check_scrape" type="checkbox" ><input id="addon_backup" class="xXx" style="width:64px" type="button">';document.getElementById("addon_backup").addEventListener("click", async _=>{const DONES=[];let last = Date.now();let last_tmp;const thread_code=regex_code.exec(document.URL)[1];var url=`https://www.jeuxvideo.com/forums/42-51-${thread_code}-1-0-1-0-u.htm`;var resp=await fetch(url).then(r=>r.text())var data=textToHTML(resp);var tmp=scrape(data,url,DONES);DONES.push(...tmp[1]);let end=[...data.querySelectorAll("div.bloc-liste-num-page > span")].map(r=>parseInt(r.innerText)).filter(r=>r).reduce((before,now)=>now>before?now:before);console.log(end)//let end=parseInt(tmppppp[tmppppp.length-1].innerText);if(end>1){var PAGED=2;for(;PAGED<end;PAGED++){await Promise.allSettled(range(PAGED,PAGED+10>end?end:PAGED+10).map(PAGE=>{const zurl=`https://www.jeuxvideo.com/forums/42-51-${thread_code}-${PAGE}-0-1-0-u.htm`return fetch(zurl).then(r=>r.text()).then(resp=>{let _data=textToHTML(resp);[..._data.querySelectorAll('div.risibank-image-enhancer-buttons')].forEach(r=>r.remove())let _tmp=scrape(_data,zurl,DONES);DONES.push(..._tmp[1]);return 1}).catch(e=>console.log("pd",e))})).catch(e=>console.log("pd",e));PAGED+=10}}document.getElementById("addon_backup").style="width:64px;background-color:green"//setTimeout(_=>{// document.getElementById("addon_backup").style="width:64px";//},5000)while(true){const url=`https://www.jeuxvideo.com/forums/42-51-${thread_code}-${end}-0-1-0-u.htm`;console.log(url)resp=await fetch(url).then(r=>r.text())data=textToHTML(resp);end=[...data.querySelectorAll("div.bloc-liste-num-page > span")].map(r=>parseInt(r.innerText)).filter(r=>r).reduce((before,now)=>now>before?now:before);//tmppppp=data.querySelectorAll("div.bloc-liste-num-page > span");console.log("AAAAAA",end);//end=parseInt(tmppppp[tmppppp.length-1].innerText);[...data.querySelectorAll('div.risibank-image-enhancer-buttons')].forEach(r=>r.remove())tmp=scrape(data,url,DONES);if(tmp && tmp.length>=2){DONES.push(...tmp[1])}last_tmp=Date.now();console.log(`wait: ${last-last_tmp+TIMER_SLEEP} | ${end}`);if(last-last_tmp+TIMER_SLEEP>0){await sleep(last-last_tmp+TIMER_SLEEP);}last = Date.now();}})}farmer();const scrape=(DOC,URL,banned=[])=>{let PAGE=1;if(URL.includes('forums/42-51-')){//console.log("DOC",DOC.body.innerText);const thread_code=parseInt(regex_code.exec(URL)[1]);const thread={code:thread_code,title:DOC.querySelector("#bloc-title-forum").innerText.trim(),url:URL};let USERS=[];PAGE=(DOC.querySelector('span.page-active') && DOC.querySelector('span.page-active').nextSibling)?DOC.querySelector('span.page-active').nextSibling.innerText:1;const posts=[...DOC.querySelectorAll('div.bloc-message-forum')].map(post=>{//console.log(post);const date=post.querySelector('div.bloc-date-msg').innerText.trim().split(' ');const day=parseInt(date[0]);const month=months.indexOf(date[1]);const year=parseInt(date[2]);const time=date[4].trim().split(':')const hours=parseInt(time[0]);const minutes=parseInt(time[1]);const seconds=parseInt(time[2]);//console.log(year,month,day,hours,minutes,seconds);let avatar_url=nullif(post.querySelector('div.bloc-avatar-msg img.user-avatar-msg')) {const img=post.querySelector('div.bloc-avatar-msg img.user-avatar-msg').getAttribute("data-src")||post.querySelector('div.bloc-avatar-msg img.user-avatar-msg').srcif(!["https://image.jeuxvideo.com/avatar-sm/default.jpg",'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',null].includes(img)){avatar_url=img}}const pseudo=post.querySelector('.bloc-pseudo-msg')?post.querySelector('.bloc-pseudo-msg').innerText.trim():null;//console.log(pseudo,post.querySelector('.bloc-pseudo-msg'));[...post.querySelectorAll('div.risibank-image-enhancer-buttons')].forEach(r=>r.remove())USERS.push({pseudo:pseudo,image:avatar_url})//console.log(date,year,month,day,time,hours,minutes,seconds,new Date(year,month,day,hours,minutes,seconds).toISOString());return {date:new Date(year,month,day,hours,minutes,seconds).toISOString(),//~~((new Date(year,month,day,hours,minutes,seconds)).getTime()/1000),html:post.querySelector('div.bloc-contenu > div.txt-msg').innerHTML.trim(),thread_code:thread_code,id:post.getAttribute("data-id"),pseudo:pseudo,}}).filter(r=>!banned.includes(r.id))USERS=uniq_fast(USERS);if(posts.length){//console.log(posts);GM_xmlhttpRequest({method: "POST",headers: {"Content-Type": "application/json"},data:JSON.stringify({thread:thread,posts:posts,users:USERS}),url: DEBUG?'http://localhost:3000/api/newposts':"http://jvc.flolep.fr/api/newposts"});return [PAGE,posts.map(r=>r.id)];}else if(DOC.querySelector('div.col-md-12:nth-child(2) > strong:nth-child(1)')){const ban=DOC.querySelector('div.col-md-12:nth-child(2) > strong:nth-child(1)').innerHTML.includes('modération')?2:1;GM_xmlhttpRequest({method: "POST",headers: {"Content-Type": "application/json"},data:JSON.stringify({type:ban,code:thread_code}),url: DEBUG?'http://localhost:3000/api/banthread':"http://jvc.flolep.fr/api/banthread"});return [PAGE,null];}}else if(URL.includes('forums/0-51-')){//console.log(">>>>",URL,DOC.querySelectorAll("li[data-id]"))const data=[...DOC.querySelectorAll("li[data-id][class='']")].filter(r=>r && r.getAttribute("data-id")!="63346087").map(thread=>{const date_string=thread.querySelector('span.topic-date').innerText.trim();//console.log(date_string,thread.querySelector('span.topic-date').innerText.trim())let datee;if(date_string.includes('/')){datee=(new Date(date_string))/1000}else{const now=new Date();datee=~~((now.setHours(...date_string.split(":")))/1000)}//console.log(">>",thread);//console.log("datee",datee)return {title:thread.querySelector('a.topic-title').getAttribute('title'),date:datee,responses:parseInt(thread.querySelector('span.topic-count').innerText),code:thread.getAttribute("data-id"),link:`https://api.jeuxvideo.com/forums/42-51-${thread.getAttribute("data-id")}-1-0-1-0-u.htm`}});//console.log(JSON.stringify(data));if(data.length>0){GM_xmlhttpRequest({method: "POST",headers: {"Content-Type": "application/json"},data:JSON.stringify(data),url: DEBUG?'http://localhost:3000/api/newfeed':"http://jvc.flolep.fr/api/newfeed"});}return [PAGE,data.map(r=>r.code)];}}scrape(document,document.URL);})();