188 lines
6.4 KiB
PHP
188 lines
6.4 KiB
PHP
<?php
|
|
|
|
namespace Animarr\Source;
|
|
|
|
use Animarr\Database;
|
|
use Animarr\Downloader;
|
|
use Animarr\Extractor\SceneExtractor;
|
|
use Animarr\Release\Release;
|
|
use Animarr\Request;
|
|
|
|
class AniDex implements Source{
|
|
|
|
const LANGUAGE_ALL = 0;
|
|
const LANGUAGE_ENGLISH = 1;
|
|
const LANGUAGE_SPANISH = "15,29";
|
|
|
|
const SELECTOR_BATCH = "&batch=1";
|
|
const SELECTOR_RAW = "&raw=1";
|
|
const SELECTOR_REMAKES = "&reencode=1";
|
|
|
|
const SELECTOR_DEFAULT = self::SELECTOR_BATCH . self::SELECTOR_REMAKES;
|
|
|
|
const FILTER_MODE_INCLUDE = 1;
|
|
const FILTER_MODE_ONLY = 2;
|
|
|
|
private $language;
|
|
private $selector;
|
|
private $filterMode;
|
|
private $uploader = null;
|
|
private $extractor;
|
|
|
|
public function __construct(SceneExtractor $extractor, $language = self::LANGUAGE_ENGLISH, $selector = self::SELECTOR_DEFAULT, $filterMode = self::FILTER_MODE_INCLUDE){
|
|
$this->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);
|
|
}
|
|
}
|
|
|
|
|