225 lines
6.7 KiB
PHP
225 lines
6.7 KiB
PHP
<?php
|
|
|
|
namespace Animarr\Source;
|
|
|
|
use Animarr\Database;
|
|
use Animarr\Downloader;
|
|
use Animarr\Extractor\AnimeBytesExtractor;
|
|
use Animarr\Release\Release;
|
|
use Animarr\Request;
|
|
|
|
class AnimeBytes implements Source{
|
|
|
|
const CATEGORY_RAW = "raw";
|
|
const CATEGORY_SOFTSUBS = "softsubs";
|
|
const CATEGORY_HARDSUBS = "hardsubs";
|
|
const CATEGORY_SUBS = [self::CATEGORY_SOFTSUBS, self::CATEGORY_HARDSUBS];
|
|
const CATEGORY_ALL = [self::CATEGORY_RAW, self::CATEGORY_SOFTSUBS, self::CATEGORY_HARDSUBS];
|
|
|
|
|
|
private $category;
|
|
private $uploader = null;
|
|
private $loggedIn;
|
|
private $extractor;
|
|
private $username;
|
|
private $passkey;
|
|
|
|
public function __construct(AnimeBytesExtractor $extractor, $category = self::CATEGORY_SUBS){
|
|
$this->category = !is_array($category) ? [$category] : $category;
|
|
$this->extractor = $extractor;
|
|
|
|
$this->username = Database::getConfigKey("tracker.animebytes.auth.username", null);
|
|
$this->passkey = trim(file_get_contents(Database::getConfigKey("tracker.animebytes.auth.passkeyFile", null)));
|
|
$this->loggedIn = ($this->username != null and $this->passkey != null);
|
|
}
|
|
|
|
public function canSearch(){
|
|
return true;
|
|
}
|
|
|
|
public function getName(){
|
|
return "AnimeBytes";
|
|
}
|
|
|
|
|
|
/**
|
|
* @param $query
|
|
* @param int $maxResults
|
|
* @return Release[]
|
|
*/
|
|
public function find($query, $maxResults = -1, $extraQuery = ""){
|
|
if(!$this->loggedIn){
|
|
return [];
|
|
}
|
|
|
|
$url = Database::getConfigKey("tracker.animebytes.scrapeUrl", "https://animebytes.tv/scrape.php");
|
|
|
|
$params = [
|
|
"username" => $this->username,
|
|
"torrent_pass" => $this->passkey,
|
|
"type" => "anime",
|
|
"filter_cat[1]" => "1",
|
|
"searchstr" => "",
|
|
"actions" => "advanced",
|
|
"search_type" => "title",
|
|
"year" => "",
|
|
"year2" => "",
|
|
"tags" => "-lolicon",
|
|
"tags_type" => "1",
|
|
"sort" => "time_added",
|
|
"way" => "desc",
|
|
"hentai" => "0",
|
|
"showhidden" => "0",
|
|
"anime[tv_series]" => "1",
|
|
"anime[bd_special]" => "1",
|
|
"anime[dvd_special]" => "1",
|
|
//"anime[tv_special]" => "1",
|
|
"anime[ova]" => "1",
|
|
"anime[ona]" => "1",
|
|
"releasegroup" => "",
|
|
"epcount" => "",
|
|
"epcount2" => "",
|
|
"artbooktitle" => "",
|
|
"containers[avi]" => "1",
|
|
"containers[mkv]" => "1",
|
|
"containers[mp4]" => "1",
|
|
"containers[ogm]" => "1",
|
|
"containers[wmv]" => "1",
|
|
"containers[mpg]" => "1",
|
|
"containers[mpeg]" => "1",
|
|
];
|
|
|
|
foreach($this->category as $category){
|
|
$params["animetrans[$category]"] = "1";
|
|
}
|
|
|
|
if($this->uploader !== null){
|
|
$params["releasegroup"] = $this->uploader;
|
|
}
|
|
|
|
if($query !== null){
|
|
$params["sort"] = "relevance";
|
|
$params["way"] = "desc";
|
|
$params["searchstr"] = $query;
|
|
}
|
|
|
|
$results = [];
|
|
|
|
$feed = Request::getURL($url . "?" . http_build_query($params));
|
|
|
|
if($feed == ""){
|
|
return $results;
|
|
}
|
|
|
|
$json = json_decode($feed, true);
|
|
if(isset($json["error"])){
|
|
Downloader::log("[ERROR] " . $json["error"], $this->getName());
|
|
return $results;
|
|
}
|
|
|
|
if(!isset($json["Groups"])){
|
|
return $results;
|
|
}
|
|
|
|
foreach($json["Groups"] as $item){
|
|
$title = $item["SeriesName"];
|
|
$aid = "";
|
|
|
|
$rating = null;//$item["Rating"] //not implemented on AB;
|
|
$votes = $item["Votes"];
|
|
|
|
foreach($item["Links"] as $link){
|
|
if(preg_match("#anidb\\.net/a([0-9]+)$#", $link, $matches) > 0){
|
|
$aid = intval($matches[1]);
|
|
}
|
|
}
|
|
|
|
foreach($item["Torrents"] as $torrent){
|
|
$downloadInfo = $torrent["Property"];
|
|
|
|
$downloadInfoLink = "https://animebytes.tv/torrents.php?id=". $item["ID"] ."&torrentid=" . $torrent["ID"];
|
|
$downloadLink = $torrent["Link"];
|
|
|
|
$releaseInfo = [
|
|
//"group" => $item,
|
|
"title" => $title,
|
|
"aid" => $aid,
|
|
"info" => $downloadInfo,
|
|
"edition" => isset($torrent["EditionData"]["EditionTitle"]) ? $torrent["EditionData"]["EditionTitle"] : null,
|
|
];
|
|
|
|
$release = $this->extractor->extractInformation(http_build_query($releaseInfo), $this->category);
|
|
|
|
if($release === null){
|
|
continue;
|
|
}
|
|
|
|
$release->setInfoLink($downloadInfoLink);
|
|
$release->setDownloadLink($downloadLink);
|
|
$release->setUploadDate(\DateTime::createFromFormat("Y-m-d H:i:s", $torrent["UploadTime"], new \DateTimeZone("UTC"))->getTimestamp());
|
|
|
|
$release->setSeeds((int) $torrent["Seeders"]);
|
|
|
|
$release->setProperty("animebytes:rating", $rating);
|
|
$release->setProperty("animebytes:votes", $votes);
|
|
|
|
if(isset(Database::getConfigKey("tracker.animebytes.trusted", [])[$release->getGroup()])){
|
|
$release->setTrusted(Database::getConfigKey("tracker.animebytes.trusted", [])[$release->getGroup()]);
|
|
}else if(Database::getConfigKey("tracker.animebytes.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.animebytes.unknown.source", [])[$release->getGroup()])){
|
|
$release->setSource(constant(Release::class . "::SOURCE_" . Database::getConfigKey("tracker.animebytes.unknown.source", [])[$release->getGroup()]));
|
|
}else{
|
|
$release->setSource(constant(Release::class . "::SOURCE_" . Database::getConfigKey("tracker.animebytes.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.animebytes.unknown.quality", [])[$release->getGroup()]));
|
|
}else{
|
|
$release->setQuality(constant(Release::class . "::QUALITY_" . Database::getConfigKey("tracker.animebytes.unknown.quality.default", "720")));
|
|
}
|
|
}
|
|
|
|
if($release->getVideoCodec() === Release::VIDEO_CODEC_UNKNOWN){
|
|
if(isset(Database::getConfigKey("tracker.animebytes.unknown.videoCodec", [])[$release->getGroup()])){
|
|
$release->setVideoCodec(constant(Release::class . "::VIDEO_CODEC_" . Database::getConfigKey("tracker.animebytes.unknown.videoCodec", [])[$release->getGroup()]));
|
|
}else{
|
|
$release->setVideoCodec(constant(Release::class . "::VIDEO_CODEC_" . Database::getConfigKey("tracker.animebytes.unknown.videoCodec.default", "H264")));
|
|
}
|
|
}
|
|
|
|
$results[$release->getId()] = $release;
|
|
}
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
public function setUploader($uploader){
|
|
$this->uploader = ($uploader === null ? -1 : $uploader);
|
|
}
|
|
}
|
|
|
|
|