language = $language; $this->selector = $selector; $this->filterMode = $filterMode; $this->extractor = $extractor; } public function canSearch(){ return true; } public function getName(){ return "AniDex"; } /** * @param $query * @param int $maxResults * @return Release[] */ public function find($query, $maxResults = -1, $extraQuery = ""){ $url = Database::getConfigKey("tracker.anidex.ajax.baseurl", "https://anidex.info/ajax/page.ajax.php?page=torrents"); if($query !== null){ $url .= "&filename=". urlencode($query); } $itemsPerPage = 50; $url .= $this->selector; $url .= "&lang_id={$this->language}"; $url .= "&filter_mode={$this->filterMode}"; $url .= "&limit=$itemsPerPage"; $url .= "&category=1"; if($this->uploader !== null){ $url .= "&group_id={$this->uploader}"; } $results = []; $offset = 0; do{ $lastCount = count($results); $feed = Request::getURL($url . "&offset=" . ($offset * $itemsPerPage), [ "X-Requested-With: XMLHttpRequest", "Referer: https://anidex.info/", ]); if($feed == ""){ break; } $dom = new \DOMDocument(); @$dom->loadHTML($feed); foreach($dom->getElementsByTagName("tr") as $item){ if($item->getElementsByTagName("a")->length <= 0 or preg_match("#torrent#", $item->getElementsByTagName("a")->item(0)->getAttribute("class")) <= 0){ continue; } $isTrusted = ($item->getElementsByTagName("td")->item(1)->getElementsByTagName("span")->item(0) !== null ? true : false); $infoLink = trim($item->getElementsByTagName("td")->item(2)->getElementsByTagName("a")->item(0)->getAttribute("href")); $title = trim($item->getElementsByTagName("td")->item(2)->getElementsByTagName("a")->item(0)->getElementsByTagName("span")->item(0)->textContent); $torrentLink = trim($item->getElementsByTagName("td")->item(4)->getElementsByTagName("a")->item(0)->getAttribute("href")); if($infoLink{0} === "?"){ $data = parse_url($url); $infoLink = $data["scheme"] . "://" . $data["host"] . "/" . $infoLink; } if($torrentLink{0} === "/"){ $data = parse_url($url); $torrentLink = $data["scheme"] . "://" . $data["host"] . $torrentLink; } $magnetLink = trim($item->getElementsByTagName("td")->item(5)->getElementsByTagName("a")->item(0)->getAttribute("href")); $uploadDate = \DateTime::createFromFormat("Y-m-d H:i:s e", (string) $item->getElementsByTagName("td")->item(7)->getAttribute("title"))->getTimestamp(); $seeds = intval($item->getElementsByTagName("td")->item(8)->textContent); $release = $this->extractor->extractInformation($title); if($release !== null){ $release->setInfoLink($infoLink); $release->setDownloadLink($torrentLink); $release->setUploadDate($uploadDate); $release->setSeeds($seeds); if($isTrusted){ $release->setTrusted(true); } if(isset(Database::getConfigKey("tracker.anidex.trusted", [])[$release->getGroup()])){ $release->setTrusted(Database::getConfigKey("tracker.anidex.trusted", [])[$release->getGroup()]); }else if(Database::getConfigKey("tracker.anidex.goldlist.trusted", false)){ $items = explode("-", strtolower($release->getGroup())); foreach(Database::getConfigKey("filter.groups.goldlist", []) as $gold){ if($release->isTrusted()){ break; } if(strtolower($release->getGroup()) == strtolower($gold)){ $release->setTrusted(true); } foreach($items as $i){ if($i === strtolower($gold)){ $release->setTrusted(true); break; } } } } if($release->getSource() === Release::SOURCE_UNKNOWN){ if(isset(Database::getConfigKey("tracker.anidex.unknown.source", [])[$release->getGroup()])){ $release->setSource(constant(Release::class . "::SOURCE_" . Database::getConfigKey("tracker.anidex.unknown.source", [])[$release->getGroup()])); }else{ $release->setSource(constant(Release::class . "::SOURCE_" . Database::getConfigKey("tracker.anidex.unknown.source.default", "TV"))); } } if($release->getQuality() === Release::QUALITY_UNKNOWN){ if(isset(Database::getConfigKey("tracker.nyaa.unknown.quality", [])[$release->getGroup()])){ $release->setQuality(constant(Release::class . "::QUALITY_" . Database::getConfigKey("tracker.anidex.unknown.quality", [])[$release->getGroup()])); }else{ $release->setQuality(constant(Release::class . "::QUALITY_" . Database::getConfigKey("tracker.anidex.unknown.quality.default", "720"))); } } if($release->getVideoCodec() === Release::VIDEO_CODEC_UNKNOWN){ if(isset(Database::getConfigKey("tracker.anidex.unknown.videoCodec", [])[$release->getGroup()])){ $release->setVideoCodec(constant(Release::class . "::VIDEO_CODEC_" . Database::getConfigKey("tracker.anidex.unknown.videoCodec", [])[$release->getGroup()])); }else{ $release->setVideoCodec(constant(Release::class . "::VIDEO_CODEC_" . Database::getConfigKey("tracker.anidex.unknown.videoCodec.default", "H264"))); } } $results[$release->getId()] = $release; } } ++$offset; }while(($maxResults == -1 or count($results) < $maxResults) and $lastCount !== count($results)); return $results; } public function setUploader($uploader){ $this->uploader = ($uploader === null ? null : $uploader); } }