use engine request for torrent search

This commit is contained in:
davidovski 2023-08-22 13:25:44 +01:00
parent 0bd726d897
commit 4941a6aa58
9 changed files with 268 additions and 308 deletions

View File

@ -1,9 +1,13 @@
<?php
$_1337x_url = "https://1337x.to/search/$query/1/";
class _1337xRequest extends EngineRequest {
public function get_request_url() {
$query = urlencode($this->query);
return "https://1337x.to/search/$query/1/";
}
public function get_results() {
$response = curl_multi_getcontent($this->ch);
function get_1337x_results($response)
{
global $config;
$xpath = get_xpath($response);
$results = array();
@ -31,4 +35,5 @@
return $results;
}
}
?>

View File

@ -4,68 +4,32 @@
$this->query = $query;
$this->page = $page;
// TODO make these engine requests
require "engines/bittorrent/thepiratebay.php";
require "engines/bittorrent/rutor.php";
require "engines/bittorrent/nyaa.php";
require "engines/bittorrent/yts.php";
require "engines/bittorrent/torrentgalaxy.php";
require "engines/bittorrent/1337x.php";
require "engines/bittorrent/sukebei.php";
$query = urlencode($query);
$torrent_urls = array(
$thepiratebay_url,
$rutor_url,
$nyaa_url,
$yts_url,
$torrentgalaxy_url,
$_1337x_url,
$sukebei_url
$this->requests = array(
new PirateBayRequest($query, $page, $mh, $config),
new _1337xRequest($query, $page, $mh, $config),
new NyaaRequest($query, $page, $mh, $config),
new RutorRequest($query, $page, $mh, $config),
new SukebeiRequest($query, $page, $mh, $config),
new TorrentGalaxyRequest($query, $page, $mh, $config),
new YTSRequest($query, $page, $mh, $config),
);
$this->chs = array();
foreach ($torrent_urls as $url)
{
$ch = curl_init($url);
curl_setopt_array($ch, $config->curl_settings);
array_push($this->chs, $ch);
curl_multi_add_handle($mh, $ch);
}
}
public function get_results() {
$query = urlencode($this->query);
$results = array();
for ($i=0; count($this->chs)>$i; $i++)
{
$response = curl_multi_getcontent($this->chs[$i]);
switch ($i)
{
case 0:
$results = array_merge($results, get_thepiratebay_results($response));
break;
case 1:
$results = array_merge($results, get_rutor_results($response));
break;
case 2:
$results = array_merge($results, get_nyaa_results($response));
break;
case 3:
$results = array_merge($results, get_yts_results($response));
break;
case 4:
//$results = array_merge($results, get_torrentgalaxy_results($response));
break;
case 5:
//$results = array_merge($results, get_1337x_results($response));
break;
case 6:
$results = array_merge($results, get_sukebei_results($response));
break;
foreach ($this->requests as $request) {
error_log($request->get_request_url());
error_log( curl_getinfo($request->ch)['http_code'] );
if ($request->successful()) {
$results = array_merge($results, $request->get_results());
}
}
@ -78,10 +42,12 @@
public static function print_results($results) {
echo "<div class=\"text-result-container\">";
if (!empty($results))
{
foreach($results as $result)
{
if (empty($results)) {
echo "<p>There are no results. Please try different keywords!</p>";
return;
}
foreach($results as $result) {
$source = $result["source"];
$name = $result["name"];
$magnet = $result["magnet"];
@ -99,9 +65,6 @@
echo "$size</span>";
echo "</div>";
}
}
else
echo "<p>There are no results. Please try different keywords!</p>";
echo "</div>";
}

View File

@ -1,19 +1,33 @@
<?php
$nyaa_url = "https://nyaa.si/?q=$query";
class NyaaRequest extends EngineRequest {
public $SOURCE = "nyaa.si";
function get_nyaa_results($response)
{
global $config;
public function get_request_url() {
return "https://$this->SOURCE/?q=" . urlencode($this->query);
}
public function get_results() {
$response = curl_multi_getcontent($this->ch);
$xpath = get_xpath($response);
$results = array();
foreach($xpath->query("//tbody/tr") as $result)
{
$name = $xpath->evaluate(".//td[@colspan='2']//a[not(contains(@class, 'comments'))]/@title", $result)[0]->textContent;
$name_node = $xpath->evaluate(".//td[@colspan='2']//a[not(contains(@class, 'comments'))]/@title", $result);
if ($name_node->length > 0) {
$name = $name_node[0]->textContent;
} else {
$name = "";
}
$centered = $xpath->evaluate(".//td[@class='text-center']", $result);
$magnet = $xpath->evaluate(".//a[2]/@href", $centered[0])[0]->textContent;
$magnet_node = $xpath->evaluate(".//a[2]/@href", $centered[0]);
if ($magnet_node->length > 0) {
$magnet = $magnet_node[0]->textContent;
$magnet_without_tracker = explode("&tr=", $magnet)[0];
$magnet = $magnet_without_tracker . $config->bittorent_trackers;
$magnet = $magnet_without_tracker . $this->config->bittorent_trackers;
} else {
$magnet = "";
}
$size = $centered[1]->textContent;
$seeders = $centered[3]->textContent;
$leechers = $centered[4]->textContent;
@ -25,11 +39,12 @@
"leechers" => (int) $leechers,
"magnet" => htmlspecialchars($magnet),
"size" => htmlspecialchars($size),
"source" => "nyaa.si"
"source" => $this->SOURCE
)
);
}
return $results;
}
}
?>

View File

@ -1,9 +1,11 @@
<?php
$rutor_url = "http://rutor.info/search/$query";
class RutorRequest extends EngineRequest {
public function get_request_url() {
return "http://rutor.info/search/" . urlencode($this->query);
}
function get_rutor_results($response)
{
global $config;
public function get_results() {
$response = curl_multi_getcontent($this->ch);
$xpath = get_xpath($response);
$results = array();
@ -13,7 +15,7 @@
$name = $xpath->evaluate(".//td/a", $result)[2]->textContent;
$magnet = $xpath->evaluate(".//td/a/@href", $result)[1]->textContent;
$magnet_without_tracker = explode("&tr=", $magnet)[0];
$magnet = $magnet_without_tracker . $config->bittorent_trackers;
$magnet = $magnet_without_tracker . $this->config->bittorent_trackers;
$td = $xpath->evaluate(".//td", $result);
$size = $td[count($td) == 5 ? 3 : 2]->textContent;
$seeders = $xpath->evaluate(".//span", $result)[0]->textContent;
@ -33,4 +35,5 @@
return $results;
}
}
?>

View File

@ -1,44 +1,6 @@
<?php
$sukebei_url = "https://sukebei.nyaa.si/?q=$query";
function get_sukebei_results($response)
{
global $config;
$xpath = get_xpath($response);
$results = array();
foreach($xpath->query("//tbody/tr") as $result)
{
$name_node = $xpath->evaluate(".//td[@colspan='2']//a[not(contains(@class, 'comments'))]/@title", $result);
if ($name_node->length > 0) {
$name = $name_node[0]->textContent;
} else {
$name = "";
}
$centered = $xpath->evaluate(".//td[@class='text-center']", $result);
$magnet_node = $xpath->evaluate(".//a[2]/@href", $centered[0]);
if ($magnet_node->length > 0) {
$magnet = $magnet_node[0]->textContent;
$magnet_without_tracker = explode("&tr=", $magnet)[0];
$magnet = $magnet_without_tracker . $config->bittorent_trackers;
} else {
$magnet = "";
}
$size = $centered[1]->textContent;
$seeders = $centered[3]->textContent;
$leechers = $centered[4]->textContent;
array_push($results,
array (
"name" => htmlspecialchars($name),
"seeders" => (int) $seeders,
"leechers" => (int) $leechers,
"magnet" => htmlspecialchars($magnet),
"size" => htmlspecialchars($size),
"source" => "sukebei.nyaa.si"
)
);
}
return $results;
include "engines/bittorrent/nyaa.php";
class SukebeiRequest extends NyaaRequest {
public $SOURCE = "sukebei.nyaa.si";
}
?>

View File

@ -1,10 +1,11 @@
<?php
class PirateBayRequest extends EngineRequest {
public function get_request_url() {
return "https://apibay.org/q.php?q=" . urlencode($this->query);
}
$thepiratebay_url = "https://apibay.org/q.php?q=$query";
function get_thepiratebay_results($response)
{
global $config;
public function get_results() {
$response = curl_multi_getcontent($this->ch);
$results = array();
$json_response = json_decode($response, true);
@ -41,4 +42,5 @@
return $results;
}
}
?>

View File

@ -1,9 +1,12 @@
<?php
$torrentgalaxy_url = "https://torrentgalaxy.to/torrents.php?search=$query#results";
class TorrentGalaxyRequest extends EngineRequest {
public function get_request_url() {
$query = urlencode($this->query);
return "https://torrentgalaxy.to/torrents.php?search=$query#results";
}
function get_torrentgalaxy_results($response)
{
global $config;
public function get_results() {
$response = curl_multi_getcontent($this->ch);
$xpath = get_xpath($response);
$results = array();
@ -12,7 +15,7 @@
$name = $xpath->evaluate(".//div[contains(@class, 'clickable-row')]", $result)[0]->textContent;
$magnet = $xpath->evaluate(".//div[@class='tgxtablecell collapsehide rounded txlight']/a/@href", $result)[1]->textContent;
$magnet_without_tracker = explode("&tr=", $magnet)[0];
$magnet = $magnet_without_tracker . $config->bittorent_trackers;
$magnet = $magnet_without_tracker . $this->config->bittorent_trackers;
$size = $xpath->evaluate(".//div[@class='tgxtablecell collapsehide rounded txlight']/span", $result)[0]->textContent;
$seeders = $xpath->evaluate(".//div[@class='tgxtablecell collapsehide rounded txlight']/span/font", $result)[1]->textContent;
$leechers = $xpath->evaluate(".//div[@class='tgxtablecell collapsehide rounded txlight']/span/font", $result)[2]->textContent;
@ -31,4 +34,5 @@
return $results;
}
}
?>

View File

@ -1,8 +1,11 @@
<?php
$yts_url = "https://yts.mx/api/v2/list_movies.json?query_term=$query";
class YTSRequest extends EngineRequest {
public function get_request_url() {
return "https://yts.mx/api/v2/list_movies.json?query_term=" . urlencode($this->query);
}
function get_yts_results($response)
{
public function get_results() {
$response = curl_multi_getcontent($this->ch);
global $config;
$results = array();
$json_response = json_decode($response, true);
@ -34,12 +37,11 @@
"source" => "yts.mx"
)
);
}
}
}
return $results;
}
}
?>

View File

@ -17,6 +17,10 @@
return "";
}
public function successful() {
return curl_getinfo($this->ch)['http_code'] == '200';
}
abstract function get_results();
static public function print_results($results){}
}