168 lines
5.7 KiB
PHP
168 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace Animarr\Source;
|
|
|
|
use Animarr\Database;
|
|
use Animarr\Downloader;
|
|
use Animarr\Extractor\SceneExtractor;
|
|
use Animarr\Release\Release;
|
|
use Animarr\Request;
|
|
|
|
class NyaaSi implements Source{
|
|
|
|
const CATEGORY_ANIME_RAW = "1_4";
|
|
const CATEGORY_ANIME_ENGLISH = "1_2";
|
|
const CATEGORY_ANIME_NON_ENGLISH = "1_3";
|
|
|
|
const FILTER_ALL = 0;
|
|
const FILTER_REMAKES = 1;
|
|
const FILTER_TRUSTED_ONLY = 2;
|
|
|
|
private $category;
|
|
private $filter;
|
|
private $uploader = null;
|
|
private $extractor;
|
|
|
|
public function __construct(SceneExtractor $extractor, $category = self::CATEGORY_ANIME_ENGLISH, $filter = self::FILTER_ALL){
|
|
$this->category = $category;
|
|
$this->filter = $filter;
|
|
$this->extractor = $extractor;
|
|
}
|
|
|
|
public function canSearch(){
|
|
return true;
|
|
}
|
|
|
|
public function getName(){
|
|
return "NyaaSi";
|
|
}
|
|
|
|
public function getTorrentAPIInformation($id){
|
|
//TODO: make this work
|
|
$json = Request::getAuthURL(Database::getConfigKey("tracker.nyaasi.api.baseurl", "https://nyaa.si/api/") ."info/$id", Database::getConfigKey("tracker.nyaasi.api.auth.username", null), trim(file_get_contents(Database::getConfigKey("tracker.nyaasi.api.auth.passwordFile", null)), "\r\n\t"));
|
|
$data = json_decode($json, true);
|
|
return $data;
|
|
}
|
|
|
|
|
|
/**
|
|
* @param $query
|
|
* @param int $maxResults
|
|
* @return Release[]
|
|
*/
|
|
public function find($query, $maxResults = -1, $extraQuery = ""){
|
|
$url = Database::getConfigKey("tracker.nyaasi.rss.baseurl", "https://nyaa.si/?page=rss");
|
|
|
|
if($query !== null){
|
|
$url .= "&q=". urlencode($query . $extraQuery);
|
|
}
|
|
|
|
$url .= "&c={$this->category}";
|
|
$url .= "&f={$this->filter}";
|
|
|
|
if($this->uploader !== null){
|
|
$url .= "&u={$this->uploader}";
|
|
}
|
|
|
|
$results = [];
|
|
|
|
$offset = 1;
|
|
|
|
do{
|
|
$lastCount = count($results);
|
|
$feed = Request::getURL($url/* . "&offset={$offset}"*/); //TODO: add offset later
|
|
if($feed == ""){
|
|
break;
|
|
}
|
|
$xml = new \SimpleXMLElement($feed);
|
|
foreach($xml->channel->item as $item){
|
|
$title = (string) $item->title;
|
|
|
|
$release = $this->extractor->extractInformation($title);
|
|
if($release !== null){
|
|
$extraInfo = $item->children("nyaa", true);
|
|
$release->setInfoLink((string) $item->guid);
|
|
$release->setDownloadLink((string) $item->link);
|
|
$release->setUploadDate(\DateTime::createFromFormat(\DateTime::RSS, (string) $item->pubDate)->getTimestamp());
|
|
$release->setSeeds((string) $extraInfo->seeders);
|
|
|
|
/*if(preg_match("/^(?P<seeds>[0-9]+) seeder\\(s\\), (?P<leechs>[0-9]+) leecher\\(s\\), (?P<downloads>[0-9]+) download\\(s\\) \\- (?P<size>[0-9\\.]+ [TGMK]iB)(?P<extra>.*)$/", (string) $item->description, $matches) > 0){
|
|
$release->setSeeds((int) $matches["seeds"]);
|
|
foreach(explode("-", $matches["extra"]) as $w){
|
|
$w = trim($w);
|
|
if($w === "Trusted"){
|
|
$release->setTrusted(true);
|
|
}
|
|
if($w === "A+"){
|
|
$release->setBest(true);
|
|
}
|
|
}
|
|
}*/
|
|
|
|
|
|
|
|
if(isset(Database::getConfigKey("tracker.nyaasi.trusted", [])[$release->getGroup()])){
|
|
$release->setTrusted(Database::getConfigKey("tracker.nyaasi.trusted", [])[$release->getGroup()]);
|
|
}else if(Database::getConfigKey("tracker.nyaasi.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.nyaasi.unknown.source", [])[$release->getGroup()])){
|
|
$release->setSource(constant(Release::class . "::SOURCE_" . Database::getConfigKey("tracker.nyaasi.unknown.source", [])[$release->getGroup()]));
|
|
}else{
|
|
$release->setSource(constant(Release::class . "::SOURCE_" . Database::getConfigKey("tracker.nyaasi.unknown.source.default", "TV")));
|
|
}
|
|
}
|
|
|
|
if($release->getQuality() === Release::QUALITY_UNKNOWN){
|
|
if(isset(Database::getConfigKey("tracker.nyaasi.unknown.quality", [])[$release->getGroup()])){
|
|
$release->setQuality(constant(Release::class . "::QUALITY_" . Database::getConfigKey("tracker.nyaasi.unknown.quality", [])[$release->getGroup()]));
|
|
}else{
|
|
$release->setQuality(constant(Release::class . "::QUALITY_" . Database::getConfigKey("tracker.nyaasi.unknown.quality.default", "720")));
|
|
}
|
|
}
|
|
|
|
if($release->getVideoCodec() === Release::VIDEO_CODEC_UNKNOWN){
|
|
if(isset(Database::getConfigKey("tracker.nyaasi.unknown.videoCodec", [])[$release->getGroup()])){
|
|
$release->setVideoCodec(constant(Release::class . "::VIDEO_CODEC_" . Database::getConfigKey("tracker.nyaasi.unknown.videoCodec", [])[$release->getGroup()]));
|
|
}else{
|
|
$release->setVideoCodec(constant(Release::class . "::VIDEO_CODEC_" . Database::getConfigKey("tracker.nyaasi.unknown.videoCodec.default", "H264")));
|
|
}
|
|
}
|
|
|
|
|
|
$results[$release->getId()] = $release;
|
|
}
|
|
}
|
|
++$offset;
|
|
|
|
break; //TODO: add offset later
|
|
}while(($maxResults === -1 or count($results) < $maxResults) and $lastCount !== count($results));
|
|
|
|
return $results;
|
|
}
|
|
|
|
public function setUploader($uploader){
|
|
$this->uploader = ($uploader === null ? null : $uploader);
|
|
}
|
|
}
|
|
|
|
|