diff --git a/bridges/EZTVBridge.php b/bridges/EZTVBridge.php index 88be5662a83..956776edf05 100644 --- a/bridges/EZTVBridge.php +++ b/bridges/EZTVBridge.php @@ -3,65 +3,109 @@ class EZTVBridge extends BridgeAbstract { const MAINTAINER = 'alexAubin'; const NAME = 'EZTV'; - const URI = 'https://eztv.ch/'; - const DESCRIPTION = 'Returns list of *recent* torrents for a specific show -on EZTV. Get showID from URLs in https://eztv.ch/shows/showID/show-full-name.'; + const URI = 'https://eztv.re/'; + const DESCRIPTION = 'Returns list of torrents for specific show(s) +on EZTV. Get IMDB IDs from IMDB.'; - const PARAMETERS = array( array( - 'i' => array( - 'name' => 'Show ids', - 'exampleValue' => '1017,249', - 'title' => 'One of more showids as a comma separated list', - 'required' => true + const PARAMETERS = array( + array( + 'ids' => array( + 'name' => 'Show IMDB IDs', + 'exampleValue' => '8740790,1733785', + 'required' => true, + 'title' => 'One or more IMDB show IDs (can be found in the IMDB show URL)' + ), + 'no480' => array( + 'name' => 'No 480p', + 'type' => 'checkbox', + 'title' => 'Activate to exclude 480p torrents' + ), + 'no720' => array( + 'name' => 'No 720p', + 'type' => 'checkbox', + 'title' => 'Activate to exclude 720p torrents' + ), + 'no1080' => array( + 'name' => 'No 1080p', + 'type' => 'checkbox', + 'title' => 'Activate to exclude 1080p torrents' + ), + 'no2160' => array( + 'name' => 'No 2160p', + 'type' => 'checkbox', + 'title' => 'Activate to exclude 2160p torrents' + ), + 'noUnknownRes' => array( + 'name' => 'No Unknown resolution', + 'type' => 'checkbox', + 'title' => 'Activate to exclude unknown resolution torrents' + ), ) - )); + ); - public function collectData(){ + // Shamelessly lifted from https://stackoverflow.com/a/2510459 + protected function formatBytes($bytes, $precision = 2) { + $units = array('B', 'KB', 'MB', 'GB', 'TB'); - // Make timestamp from relative released time in table - function makeTimestamp($relativeReleaseTime){ + $bytes = max($bytes, 0); + $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); + $pow = min($pow, count($units) - 1); + $bytes /= pow(1024, $pow); - $relativeDays = 0; - $relativeHours = 0; + return round($bytes, $precision) . ' ' . $units[$pow]; + } - foreach(explode(' ', $relativeReleaseTime) as $relativeTimeElement) { - if(substr($relativeTimeElement, -1) == 'd') $relativeDays = substr($relativeTimeElement, 0, -1); - if(substr($relativeTimeElement, -1) == 'h') $relativeHours = substr($relativeTimeElement, 0, -1); - } - return mktime(date('h') - $relativeHours, 0, 0, date('m'), date('d') - $relativeDays, date('Y')); - } + protected function getItemFromTorrent($torrent){ + $item = array(); + $item['uri'] = $torrent->episode_url; + $item['author'] = $torrent->imdb_id; + $item['timestamp'] = date('d F Y H:i:s', $torrent->date_released_unix); + $item['title'] = $torrent->title; + $item['enclosures'][] = $torrent->torrent_url; - // Loop on show ids - $showList = explode(',', $this->getInput('i')); - foreach($showList as $showID) { + $thumbnailUri = 'https:' . $torrent->small_screenshot; + $torrentSize = $this->formatBytes($torrent->size_bytes); - // Get show page - $html = getSimpleHTMLDOM(self::URI . 'shows/' . rawurlencode($showID) . '/'); + $item['content'] = $torrent->filename . '
File size: ' + . $torrentSize . '
magnet link
torrent link
'; - // Loop on each element that look like an episode entry... - foreach($html->find('.forum_header_border') as $element) { + return $item; + } - // Filter entries that are not episode entries - $ep = $element->find('td', 1); - if(empty($ep)) continue; - $epinfo = $ep->find('.epinfo', 0); - $released = $element->find('td', 3); - if(empty($epinfo)) continue; - if(empty($released->plaintext)) continue; + private static function compareDate($torrent1, $torrent2) { + return (strtotime($torrent1['timestamp']) < strtotime($torrent2['timestamp']) ? 1 : -1); + } + + public function collectData(){ + $showIds = explode(',', $this->getInput('ids')); - // Filter entries that are older than 1 week - if($released->plaintext == '>1 week') continue; + foreach($showIds as $showId) { + $eztvUri = $this->getURI() . 'api/get-torrents?imdb_id=' . $showId; + $content = getContents($eztvUri); + $torrents = json_decode($content)->torrents; + foreach($torrents as $torrent) { + $title = $torrent->title; + $regex480 = '/480p/'; + $regex720 = '/720p/'; + $regex1080 = '/1080p/'; + $regex2160 = '/2160p/'; + $regexUnknown = '/(480p|720p|1080p|2160p)/'; + // Skip unwanted resolution torrents + if ((preg_match($regex480, $title) === 1 && $this->getInput('no480')) + || (preg_match($regex720, $title) === 1 && $this->getInput('no720')) + || (preg_match($regex1080, $title) === 1 && $this->getInput('no1080')) + || (preg_match($regex2160, $title) === 1 && $this->getInput('no2160')) + || (preg_match($regexUnknown, $title) !== 1 && $this->getInput('noUnknownRes'))) { + continue; + } - // Fill item - $item = array(); - $item['uri'] = self::URI . $epinfo->href; - $item['id'] = $item['uri']; - $item['timestamp'] = makeTimestamp($released->plaintext); - $item['title'] = $epinfo->plaintext; - $item['content'] = $epinfo->alt; - if(isset($item['title'])) - $this->items[] = $item; + $this->items[] = $this->getItemFromTorrent($torrent); } } + + // Sort all torrents in array by date + usort($this->items, array('EZTVBridge', 'compareDate')); } }