Advertisement
Guest User

yts.js

a guest
Nov 5th, 2015
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function (App) {
  2.     'use strict';
  3.  
  4.     var Q = require('q');
  5.     var request = require('request');
  6.     var inherits = require('util').inherits;
  7.  
  8.     function YTS() {
  9.         if (!(this instanceof YTS)) {
  10.             return new YTS();
  11.         }
  12.  
  13.         App.Providers.Generic.call(this);
  14.     }
  15.     inherits(YTS, App.Providers.Generic);
  16.  
  17.     YTS.prototype.extractIds = function (items) {
  18.         return _.pluck(items.results, 'imdb_id');
  19.     };
  20.  
  21.     var format = function (data, page, limit) {
  22.         console.log("data", data);
  23.         var results = _.chain(data)/*.filter(function (movie) {
  24.                 // Filter any 3D only movies
  25.                 return _.any(movie.torrents, function (torrent) {
  26.                     return torrent.quality !== '3D';
  27.                 });
  28.             })*/.map(function (movie) {
  29.                 return {
  30.                     type: 'movie',
  31.                     imdb_id: movie.imdb,
  32.                     title: movie.title,
  33.                     year: movie.year,
  34.                     genre: movie.genres,
  35.                     rating: movie.rating,
  36.                     runtime: movie.runtime,
  37.                     image: movie.poster_med,
  38.                     cover: movie.poster_med,
  39.                     backdrop: movie.poster_big,
  40.                     synopsis: movie.description,
  41.                     trailer: 'https://www.youtube.com/watch?v=' + movie.trailer || false,
  42.                     certification: movie.mpa_rating,
  43.                     torrents: _.reduce(movie.items, function (torrents, torrent) {
  44.                         console.log(torrent);
  45.                         if (torrent.quality !== '3D') {
  46.                             if ( !(torrent.quality in torrents) ){
  47.                             torrents[torrent.quality] = {
  48.                                 url: torrent.torrent_url,
  49.                                 magnet: torrent.torrent_magnet, //'magnet:?xt=urn:btih:' + torrent.hash + '&tr=udp://open.demonii.com:1337&tr=udp://tracker.coppersurfer.tk:6969',
  50.                                 size: torrent.size_bytes,
  51.                                 filesize: torrent.size_bytes,
  52.                                 seed: torrent.torrent_seeds,
  53.                                 peer: torrent.torrent_peers
  54.                             };
  55.                         }
  56.                         }
  57.                         return torrents;
  58.                     }, {})
  59.                 };
  60.             }).value();
  61.         console.log("results", results);
  62.         return {
  63.             results: Common.sanitize(results),
  64.             hasMore: true // data.length > page * limit
  65.         };
  66.     };
  67.  
  68.     YTS.prototype.fetch = function (filters) {
  69.         var params = {
  70.             sort_by: 'seeds',
  71.             limit: 50,
  72.             with_rt_ratings: true
  73.         };
  74.  
  75.         if (filters.page) {
  76.             params.page = filters.page;
  77.         }
  78.  
  79.         if (filters.keywords) {
  80.             params.keywords = filters.keywords;
  81.         }
  82.  
  83.         if (filters.genre && filters.genre != 'All') {
  84.             params.genre = filters.genre;
  85.         }
  86.  
  87.         if (filters.order === 1) {
  88.             params.order_by = 'asc';
  89.         }
  90.  
  91.         if (filters.sorter && filters.sorter !== 'popularity') {
  92.             switch (filters.sorter) {
  93.             case 'last added':
  94.                 params.sort_by = 'date_added';
  95.                 break;
  96.             case 'trending':
  97.                 params.sort_by = 'trending_score';
  98.                 break;
  99.             default:
  100.                 params.sort_by = filters.sorter;
  101.             }
  102.         }
  103.  
  104.         if (Settings.movies_quality !== 'all') {
  105.             params.quality = Settings.movies_quality;
  106.         }
  107.  
  108.         if (Settings.translateSynopsis) {
  109.             params.lang = Settings.language;
  110.         }
  111.  
  112.         var defer = Q.defer();
  113.         function get(index) {
  114.             var options = {
  115.                 //uri: Settings.ytsAPI[index].uri + 'list',
  116.                 uri:"http://api.torrentsapi.com/list?",
  117.                 qs: params,
  118.                 json: true,
  119.                 timeout: 10000
  120.             };
  121.             console.log('test', params);
  122.  
  123.             /*var url = 'http://api.torrentsapi.com/list?';//sort=seeds&quality=720p&page=' + params.page + "&count=" + params.limit;
  124.             if(filters.keywords){ url+="&keywords="+filters.keywords; }
  125.             jQuery.getJSON(url, function(data) {
  126.                 return defer.resolve(format(data.MovieList), params.page, params.limit);
  127.  
  128.             }).fail(function( jqxhr, textStatus, error ) {
  129.                 console.log('Error loading data...');
  130.                 return defer.reject(textStatus);
  131.  
  132.             });*/
  133.             var req = jQuery.extend(true, {}, Settings.ytsAPI[index], options);
  134.             request(req, function (err, res, data) {
  135.                 if (err || res.statusCode >= 400 || (data && !data.MovieList)) {
  136.                     win.warn('YTS API endpoint \'%s\' failed.', Settings.ytsAPI[index].uri);
  137.                     if (index + 1 >= Settings.ytsAPI.length) {
  138.                         return defer.reject(err || 'Status Code is above 400');
  139.                     } else {
  140.                         get(index + 1);
  141.                     }
  142.                     return;
  143.                 } else if (!data || data.status === 'error') {
  144.                     err = data ? data.status_message : 'No data returned';
  145.                     return defer.reject(err);
  146.                 } else {
  147.                     console.log("data",data);
  148.                     return defer.resolve(format(data.MovieList));
  149.                 }
  150.             });
  151.  
  152.  
  153.         }
  154.         get(0);
  155.         return defer.promise;
  156.     };
  157.  
  158.     YTS.prototype.random = function () {
  159.         var defer = Q.defer();
  160.  
  161.         function get(index) {
  162.             var options = {
  163.                 uri: Settings.ytsAPI[index].uri + 'api/v2/get_random_movie.json?' + Math.round((new Date()).valueOf() / 1000),
  164.                 json: true,
  165.                 timeout: 10000
  166.             };
  167.             console.log('getting movies');
  168.             var req = jQuery.extend(true, {}, Settings.ytsAPI[index], options);
  169.             request(req, function (err, res, data) {
  170.                 if (err || res.statusCode >= 400 || (data && !data.data)) {
  171.                     win.warn('YTS API endpoint \'%s\' failed.', Settings.ytsAPI[index].uri);
  172.                     if (index + 1 >= Settings.ytsAPI.length) {
  173.                         return defer.reject(err || 'Status Code is above 400');
  174.                     } else {
  175.                         get(index + 1);
  176.                     }
  177.                     return;
  178.                 } else if (!data || data.status === 'error') {
  179.                     err = data ? data.status_message : 'No data returned';
  180.                     return defer.reject(err);
  181.                 } else {
  182.                     return defer.resolve(Common.sanitize(data.data));
  183.                 }
  184.             });
  185.         }
  186.         get(0);
  187.  
  188.         return defer.promise;
  189.     };
  190.  
  191.     YTS.prototype.detail = function (torrent_id, old_data) {
  192.         return Q(old_data);
  193.     };
  194.  
  195.     App.Providers.Yts = YTS;
  196.  
  197. })(window.App);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement