72 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // ==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);
 | |
| })();
 |