diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js new file mode 100644 index 0000000..c1a44a6 --- /dev/null +++ b/trakt.scraper.user.js @@ -0,0 +1,72 @@ +// ==UserScript== +// @name Trakt Scraper +// @namespace danielrayjones +// @version 0.0.1 +// @description Scrape lists of shows/movies from Trakt and download a JSON file +// @author Dan Jones +// @match https://trakt.tv/* +// @grant none +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js +// ==/UserScript== + +(function() { + 'use strict'; + + let watched_shows = JSON.parse(localStorage.watched_shows); + let watched_movies = JSON.parse(localStorage.watched_movies); + + function processEpisode(that) { + let $ep = $(that); + let $series = $ep.find('[itemtype="http://schema.org/TVSeries"]'); + + let series = $ep.data('show-id'); + let ep = $ep.data('episode-id'); + //let url = $ep.data('url'); + let url = $ep.children('[itemprop="url"]').attr('content'); + + let series_title = $series.children('[itemprop="name"]').attr('content'); + let ep_title = $ep.children('[itemprop="name"]').attr('content'); + let ep_number = $ep.children('[itemprop="episodeNumber"]').attr('content'); + let season_number = $ep.data('season-number'); + //let title = $ep.data('title'); + let title = series_title + " " + season_number + "x" + ep_number + ' "' + ep_title + '"'; + + let watched = watched_shows[series].e[ep]; + + let this_ep = { title, url, watches: watched ? watched[1] : 0, last_watched: watched ? watched[0] : null}; + + return this_ep; + } + + function processMovie(that) { + let $mov = $(that); + let id = $mov.data('movie-id'); + + let title = $mov.children('[itemprop="name"]').attr('content'); + let url = $mov.children('[itemprop="url"]').attr('content'); + let watched = watched_movies[id]; + + let this_mov = { title, url, watches: watched ? watched[1] : 0, last_watched: watched ? watched[0] : null}; + + return this_mov; + } + + let items = $('[itemtype="http://schema.org/TVEpisode"], [itemtype="http://schema.org/Movie"]').map(function() { + let type = $(this).attr('itemtype').replace(/^https?:\/\/schema.org\//, ''); + + let data = {}; + switch(type) { + case "TVEpisode": + data = processEpisode(this); + break; + case "Movie": + data = processMovie(this); + break; + } + data.type = type; + + return data; + }); + + console.log(items); +})();