BS Check

Desktopbenachrichtigung bei neuer Folge einer favorisierten Serie!

  1. // ==UserScript==
  2. // @name BS Check
  3. // @namespace http://tampermonkey.net/
  4. // @version 2.1.1
  5. // @description Desktopbenachrichtigung bei neuer Folge einer favorisierten Serie!
  6. // @author Asu_nyan
  7. // @match https://bs.to/
  8. // @match https://burningseries.co/
  9. // @grant none
  10. // @icon https://bs.to/favicon.ico
  11. // ==/UserScript==
  12. // jshint esversion: 6
  13.  
  14. (function() {
  15. 'use strict';
  16. check();
  17. })();
  18. function getFavLinks() {
  19. const names = Array.from(document.querySelectorAll('#other-series-nav > ul a')).map(el => el.href);
  20. return names.slice(0, names.length-2);
  21. }
  22. async function getNELinks() {
  23. const data = await fetch(window.location.origin).then(res => res.text());
  24. const div = document.createElement('div');
  25. div.innerHTML = data;
  26. let list = div.querySelectorAll('#newest_episodes > div > ul a');
  27. return Array.from(list).map(el => el.href);
  28. }
  29. function getShowRoot(url) {
  30. return url.split('/').slice(0, 5).join('/');
  31. }
  32. async function check() {
  33. let bsne = (window.localStorage.bsne) ? JSON.parse(window.localStorage.bsne) : [];
  34. (bsne.length > 40) ? bsne.splice(0, 20) : bsne;
  35. const fav_list = getFavLinks();
  36. const ne_list = await getNELinks();
  37. const filtered = ne_list.filter(e => fav_list.includes(getShowRoot(e)) && !bsne.includes(e));
  38. if(filtered.length) {
  39. filtered.forEach(async el => {
  40. const data = await fetch(el).then(res => res.text());
  41. const div = document.createElement('div');
  42. div.innerHTML = data;
  43. const cover = div.querySelector('img[alt="Cover"]').src;
  44. const title = div.querySelector('#sp_left > h2').textContent.split('Staffel')[0].trim()
  45. const options = { body: title, icon: cover };
  46. let n = new Notification('Neue Folge verfügbar!', options);
  47. n.href=el;
  48. n.onclick=function onclick(event){
  49. window.open(el);
  50. event.target.close();
  51. };
  52. });
  53. bsne = bsne.concat(filtered);
  54. window.localStorage.bsne = JSON.stringify(bsne);
  55. }
  56. setTimeout(check, 1000*60);
  57. }