// ==UserScript== // @name Filmweb.pl eksport ocen (wersja testowa) // @namespace kapela86 // @description Skrypt pozwala na eksport ocen oraz chcę/nie chcę zobaczyć/zagrać do plików xls. Działa na własnym profilu oraz znajomych. // @match *://filmweb.pl/user/* // @match *://www.filmweb.pl/user/* // @version 1.7.8 // @grant none // @license GPL-3.0-or-later // @run-at document-idle // @downloadURL none // ==/UserScript== "use strict"; /* Changelog: 1.0 2015-04-14 pierwsze wydanie 1.1 2015-04-14 tytuły oryginalne są teraz klikalne i kierują do danego tytułu na stronie filmwebu 1.2 2015-04-21 dodano pobieranie komentarzy do ocen 1.3 2015-04-26 dodano pobieranie chcę/nie chcę zobaczyć/zagrać 1.4 2015-05-03 dodano pobieranie list znajomych 1.4.1 2015-05-04 różne drobne poprawki i optymalizacje kodu 1.4.2 2015-05-28 drobna poprawka dla osób mających spację w nicku 1.4.3 2016-11-27 poprawka dla osób które zainstalowały skrypt po 2016-10-04 i nie działał im przycisk zapisu do XLS 1.4.4 2017-07-09 naprawienie pobierania list "Chcę zobaczyć" (filmweb dodał kolumnę z datą dodania i to psuło wykonywanie skryptu) 1.5 2018-04-18 poprawienie skryptu aby mógł działać z nową wersją wyglądu profili i list ocen (na razie tylko pobieranie ocen zrobione) 1.6 2018-05-06 dodanie pobierania ocen programów tv i list "chcę zobaczyć/zagrać" 1.7 2018-05-27 dodanie pobierania list "nie interesuje mnie" 1.7.1 2018-05-29 poprawka dla nowego wyglądu strony profili 1.7.2 2018-07-22 poprawka drobnego błędu przy pobieraniu ocen 1.7.3 2019-04-14 poprawiłem błąd związany z nieładowaniem się skryptu i nieprawidłowym generowaniem odnośników do strony filmweb dla tytułów 1.7.4 2020-05-06 poprawilem błąd z brakiem polskich tytułów i roku produkcji (filmweb wprowadził drobne zmiany w kodzie strony); dodatkowo teraz kolumna z oryginalnym tytułem nie będzie pusta w sytuacji gdy jest on taki sam jak polski 1.7.5 2020-05-17 poprawilem błąd z niewyświetlaniem się panelu pobierania ocen (filmweb znowu wprowadził drobne zmiany w kodzie strony) 1.7.6 2021-09-19 tymczasowe obejście zmiań wprowadzonych w kodzie strony 1.7.7 poprawki na zmiany w kodzie strony filmwebu i sposobie pobierania ocen 1.8 2022-11-15 poprawki dodane przez @tomfilmowiec, poprawione pobieranie danych (filmweb wprowdził drobne zmiany w kodzie strony), poprawione pobieranie ocen (teraz pobiera z osobnych requestów), dodane opóźnienia czasowe, poprawki kosmetyczne To do: - kompatybilność z greasemonkey 4 - https://www.w3schools.com/howto/howto_js_progressbar.asp - dogadać się z Grzegorz_Derebecki z FDB odnośnie nowych kolumn/formatu - naprawić "w przypadku gdy polski tytuł jest taki sam jak oryginalny wtedy w kolumnie tytuł oryginalny zostawia puste pole." - ogarnąć kwestię gdy ktoś nie ma ocen w danej kategorii lub nie mamy uprawnień do przeglądania ocen - eksport ocen przy eksporcie listy chcę/nie chcę zobaczyć/zagrać - eksport ocen aktorów - eksport obejrzanych odcinków seriali wraz z ocenami - przetestować ExcellentExport.js v3.x (eksport do xlsx, wiele arkuszy w pliku) - sprawdzić czy da się też eksportować komentarze innych osób do naszej oceny */ /* ExcellentExport.js v1.5 https://github.com/jmaister/excellentexport https://raw.githubusercontent.com/jmaister/excellentexport/v1.5/excellentexport.min.js */ var n=String.fromCharCode,p;a:{try{document.createElement("$")}catch(q){p=q;break a}p=void 0} window.btoa||(window.btoa=function(b){for(var g,c,f,h,e,a,d=0,r=b.length,s=Math.max,l="";d>2&63;g=(g&3)<<4|c>>4&15;h=(c&15)<<2|a>>6&3;e=a&63;c?a||(e=64):h=e=64;l+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(f)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(g)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(h)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)}return l}); window.atob||(window.atob=function(b){b=b.replace(/=+$/,"");var g,c,f,h,e=0,a=b.length,d=[];if(1===a%4)throw p;for(;e>4&3,c=(c&15)<<4|f>>2&15,f=(f&3)<<6|h&63,d.push(n(g)),c&&d.push(n(c)),f&&d.push(n(f));return d.join("")}); var ExcellentExport=function(){function b(e,a){return e.replace(RegExp("{(\\w+)}","g"),function(d,e){return a[e]})}var g={excel:"data:application/vnd.ms-excel;base64,",csv:"data:application/csv;base64,"},c={excel:'\x3c!--[if gte mso 9]>{worksheet}{table}
'},f= ",",h="\r\n";return{excel:function(e,a,d){a=a.nodeType?a:document.getElementById(a);var f=g.excel;a=b(c.excel,{a:d||"Worksheet",table:a.innerHTML});a=window.btoa(window.unescape(encodeURIComponent(a)));e.href=f+a;return!0},csv:function(e,a,d,b){void 0!==d&&d&&(f=d);void 0!==b&&b&&(h=b);a=a.nodeType?a:document.getElementById(a);var c="",l,k;for(d=0;d 0) { CellSelector.textContent += ", "; } CellSelector.textContent += TempNode.children[j].textContent; } } //Data CellSelector = RowSelector.insertCell(); if (VoteInfo.viewDate) { var date = VoteInfo.viewDate.toString().substring(0, 4); if (VoteInfo.viewDate.toString().substring(4, 6) != "00") { date = VoteInfo.viewDate.toString().substring(4, 6)+"-"+date; if (VoteInfo.viewDate.toString().substring(6, 8) != "00") { date = VoteInfo.viewDate.toString().substring(6, 8)+"-"+date; } } CellSelector.textContent = date; } } window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].textContent = "pobrano "+IloscPobranychOcen+"/"+IloscOcen+" ocen"; window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].style.color = "orange"; setTimeout(function() { PobierzOceny(); }, OpoznieniePobraniaStrony); } function PrzetworzChce() { TempArray = []; TempObject = {}; var TempNode2; var Response = document.implementation.createHTMLDocument(""); Response.documentElement.innerHTML = this.responseText; if (KtoraStronaDoPobrania === 1) { if ( ! Response.querySelector("span.blockHeader__titleInfoCount") || ! Number(Response.querySelector("section[data-pages-count]").getAttribute("data-pages-count"))) { window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].textContent = "brak wpisów"; window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].style.color = "red"; return; } IloscOcen = Response.querySelector("span.blockHeader__titleInfoCount").textContent; IleStronZOcenami = Response.querySelector("section[data-pages-count]").getAttribute("data-pages-count"); } var ListaFilmow = Response.querySelectorAll("div.userVotesPage__results > div.userVotesPage__result"); for (var i = 0, ID = ""; i < ListaFilmow.length; i++, IloscPobranychOcen++) { RowSelector = Tabela.insertRow(); //ID CellSelector = RowSelector.insertCell(); ID = ListaFilmow[i].getAttribute("data-id"); CellSelector.textContent = ID; //Tytuł polski CellSelector = RowSelector.insertCell(); TempNode2 = ListaFilmow[i].querySelector("a.preview__link"); if (TempNode2 !== null) { TempNode = document.createElement("a"); TempNode.href = "https://www.filmweb.pl"+ListaFilmow[i].querySelector("a.preview__link").getAttribute("href"); TempNode.textContent = TempNode2.textContent; CellSelector.appendChild(TempNode); } //Tytuł oryginalny CellSelector = RowSelector.insertCell(); TempNode2 = ListaFilmow[i].querySelector("div.preview__alternateTitle"); if (TempNode2 !== null) { TempNode = document.createElement("a"); TempNode.href = "https://www.filmweb.pl"+ListaFilmow[i].querySelector("a.preview__link").getAttribute("href"); TempNode.textContent = TempNode2.textContent; CellSelector.appendChild(TempNode); } else { CellSelector.appendChild(CellSelector.previousSibling.firstChild.cloneNode(true)); } //Rok produkcji CellSelector = RowSelector.insertCell(); TempNode = ListaFilmow[i].querySelector("div.preview__year"); if (TempNode !== null) { CellSelector.textContent = TempNode.textContent; } //Jak bardzo chce CellSelector = RowSelector.insertCell(); TempNode = ListaFilmow[i].querySelector("div.wantToSeeRateBox__message"); if (TempNode !== null) { CellSelector.textContent = TempNode.textContent; } //Gatunek CellSelector = RowSelector.insertCell(); TempNode = ListaFilmow[i].querySelector(".preview__detail--genres"); if (TempNode !== null) { for (var j = 0; j < TempNode.children.length; j++) { if (j > 0) { CellSelector.textContent += ", "; } CellSelector.textContent += TempNode.children[j].textContent; } } } window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].textContent = "pobrano "+IloscPobranychOcen+"/"+IloscOcen+" wpisów"; window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].style.color = "orange"; setTimeout(function() { PobierzChce(); }, OpoznieniePobraniaStrony); } function PrzetworzNieInteresuje() { TempArray = []; TempObject = {}; var TempNode2; var Response = document.implementation.createHTMLDocument(""); Response.documentElement.innerHTML = this.responseText; if (KtoraStronaDoPobrania === 1) { if ( ! Response.querySelector("span.blockHeader__titleInfoCount") || ! Number(Response.querySelector("section[data-pages-count]").getAttribute("data-pages-count"))) { window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].textContent = "brak wpisów"; window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].style.color = "red"; return; } IloscOcen = Response.querySelector("span.blockHeader__titleInfoCount").textContent; IleStronZOcenami = Response.querySelector("section[data-pages-count]").getAttribute("data-pages-count"); } var ListaFilmow = Response.querySelectorAll("div.userVotesPage__results > div.userVotesPage__result"); for (var i = 0, ID = ""; i < ListaFilmow.length; i++, IloscPobranychOcen++) { RowSelector = Tabela.insertRow(); //ID CellSelector = RowSelector.insertCell(); ID = ListaFilmow[i].getAttribute("data-id"); CellSelector.textContent = ID; //Tytuł polski CellSelector = RowSelector.insertCell(); TempNode2 = ListaFilmow[i].querySelector("a.preview__link"); if (TempNode2 !== null) { TempNode = document.createElement("a"); TempNode.href = "https://www.filmweb.pl"+ListaFilmow[i].querySelector("a.preview__link").getAttribute("href"); TempNode.textContent = TempNode2.textContent; CellSelector.appendChild(TempNode); } //Tytuł oryginalny CellSelector = RowSelector.insertCell(); TempNode2 = ListaFilmow[i].querySelector("div.preview__alternateTitle"); if (TempNode2 !== null) { TempNode = document.createElement("a"); TempNode.href = "https://www.filmweb.pl"+ListaFilmow[i].querySelector("a.preview__link").getAttribute("href"); TempNode.textContent = TempNode2.textContent; CellSelector.appendChild(TempNode); } else { CellSelector.appendChild(CellSelector.previousSibling.firstChild.cloneNode(true)); } //Rok produkcji CellSelector = RowSelector.insertCell(); TempNode = ListaFilmow[i].querySelector("div.preview__year"); if (TempNode !== null) { CellSelector.textContent = TempNode.textContent; } //Gatunek CellSelector = RowSelector.insertCell(); TempNode = ListaFilmow[i].querySelector(".preview__detail--genres"); if (TempNode !== null) { for (var j = 0; j < TempNode.children.length; j++) { if (j > 0) { CellSelector.textContent += ", "; } CellSelector.textContent += TempNode.children[j].textContent; } } } window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].textContent = "pobrano "+IloscPobranychOcen+"/"+IloscOcen+" wpisów"; window[TablicaPrzyciskow[NumerDiva][NumerPrzycisku].selektor].style.color = "orange"; setTimeout(function() { PobierzNieInteresuje(); }, OpoznieniePobraniaStrony); } function ZapiszOcenyDoXLS() { return ExcellentExport.excel(EksportOcen_PrzyciskZapiszOcenyDoXLS, "userscript", "Oceny"); } function ZapiszChceZobaczycDoXLS() { return ExcellentExport.excel(EksportOcen_PrzyciskZapiszChceZobaczycDoXLS, "userscript", "Chcę zobaczyć"); } function ZapiszNieInteresujeDoXLS() { return ExcellentExport.excel(EksportOcen_PrzyciskZapiszNieInteresujeDoXLS, "userscript", "Nie interesuje"); } function StworzTabelke() { Tabela = document.querySelector("table#userscript"); if (Tabela !== null) { document.body.removeChild(Tabela); } Tabela = document.createElement("table"); Tabela.id = "userscript"; Tabela.style.display = "none"; document.body.appendChild(Tabela); RowSelector = Tabela.insertRow(); KtoreElementy = TablicaPrzyciskow[NumerDiva][NumerPrzycisku].ktoreelementy.split(","); for (var i = 0; i < KtoreElementy.length; i++) { ListaKolumn[KtoreElementy[i]].CzyDodac = true; CellSelector = document.createElement("th"); CellSelector.id = "abc"; CellSelector.textContent = ListaKolumn[KtoreElementy[i]].NaglowekTabeli; RowSelector.appendChild(CellSelector); } } function Ostrzezenie() { alert("Najpierw pobierz którąś kategorię."); } }, 500);