requests = array();
// Extra functions to process magnet results
require ABSPATH.'functions/tools-magnet.php';
if($opts->enable_limetorrents == 'on') {
require ABSPATH.'engines/magnet/lime.php';
$this->requests[] = new LimeRequest($opts, $mh);
}
if($opts->enable_piratebay == 'on') {
require ABSPATH.'engines/magnet/thepiratebay.php';
$this->requests[] = new PirateBayRequest($opts, $mh);
}
if($opts->enable_yts == 'on') {
require ABSPATH.'engines/magnet/yts.php';
$this->requests[] = new YTSRequest($opts, $mh);
}
if($opts->enable_nyaa == 'on') {
require ABSPATH.'engines/magnet/nyaa.php';
$this->requests[] = new NyaaRequest($opts, $mh);
}
if($opts->enable_sukebei == 'on') {
require ABSPATH.'engines/magnet/sukebei.php';
$this->requests[] = new SukebeiRequest($opts, $mh);
}
if($opts->enable_eztv == 'on') {
if(substr(strtolower($opts->query), 0, 2) == 'tt') {
require ABSPATH.'engines/magnet/eztv.php';
$this->requests[] = new EZTVRequest($opts, $mh);
}
}
}
public function parse_results($response) {
$results = array();
if(count($this->requests) !== 0) {
foreach($this->requests as $request) {
if($request->request_successful()) {
$engine_result = $request->get_results();
if(!empty($engine_result)) {
if(array_key_exists('search', $engine_result)) {
// Count results per source
$results['sources'][$engine_result['source']] = $engine_result['amount'];
// Merge duplicates and apply relevance scoring
foreach($engine_result['search'] as $result) {
if(array_key_exists('search', $results)) {
$result_urls = array_column($results['search'], 'hash', 'id');
$found_id = array_search($result['hash'], $result_urls); // Return the result ID, or false if not found
} else {
$found_id = false;
}
if($found_id !== false) {
// Duplicate result from another engine
// If seeders or leechers mismatch, assume they're different peers
if($results['search'][$found_id]['seeders'] != $result['seeders']) $results['search'][$found_id]['combo_seeders'] += intval($result['seeders']);
if($results['search'][$found_id]['leechers'] != $result['leechers']) $results['search'][$found_id]['combo_leechers'] += intval($result['leechers']);
$results['search'][$found_id]['combo_source'][] = $engine_result['source'];
// If duplicate result has more info, add it
if(is_null($results['search'][$found_id]['year']) && !is_null($result['year'])) $results['search'][$found_id]['year'] = $result['year'];
if(is_null($results['search'][$found_id]['category']) && !is_null($result['category'])) $results['search'][$found_id]['category'] = $result['category'];
if(is_null($results['search'][$found_id]['runtime']) && !is_null($result['runtime'])) $results['search'][$found_id]['runtime'] = $result['runtime'];
if(is_null($results['search'][$found_id]['url']) && !is_null($result['url'])) $results['search'][$found_id]['url'] = $result['url'];
if(is_null($results['search'][$found_id]['date_added']) && !is_null($result['date_added'])) $results['search'][$found_id]['date_added'] = $result['date_added'];
if(is_null($results['search'][$found_id]['quality']) && !is_null($result['quality'])) $results['search'][$found_id]['quality'] = $result['quality'];
if(is_null($results['search'][$found_id]['type']) && !is_null($result['type'])) $results['search'][$found_id]['type'] = $result['type'];
if(is_null($results['search'][$found_id]['audio']) && !is_null($result['audio'])) $results['search'][$found_id]['audio'] = $result['audio'];
} else {
// First find, rank and add to results
// Ranks by combo_seeders instead of regular ranking
$result['combo_seeders'] = intval($result['seeders']);
$result['combo_leechers'] = intval($result['leechers']);
$result['combo_source'][] = $engine_result['source'];
$result['id'] = md5($result['hash']); // Predictable/repeatable 'unique' string
$results['search'][$result['id']] = $result;
}
unset($result, $result_urls, $found_id, $social_media_multiplier, $goosle_rank, $match_rank);
}
}
}
} else {
$request_result = curl_getinfo($request->ch);
$http_code_info = ($request_result['http_code'] > 200 && $request_result['http_code'] < 600) ? " - What's this?" : "";
$github_issue_url = "https://github.com/adegans/Goosle/discussions/new?category=general&".http_build_query(array('title' => get_class($request)." failed with error ".$request_result['http_code'], 'body' => "```\nEngine: ".get_class($request)."\nError Code: ".$request_result['http_code']."\nRequest url: ".$request_result['url']."\n```", 'labels' => 'request-error'));
$results['error'][] = array(
'message' => "Ohno! A search query ran into some trouble. Usually you can try again in a few seconds to get a result!
Engine: ".get_class($request)."
Error code: ".$request_result['http_code'].$http_code_info."
Request url: ".$request_result['url']."
Need help? Find similar issues, or ask your own question."
);
}
unset($request);
}
} else {
$results['error'][] = array(
'message' => "Configuration issue! It appears that all Magnet Search engines are disabled. Please enable at least one in your config.php file.
Need help? Find similar issues."
);
}
if(array_key_exists('search', $results)) {
// Re-order results based on seeders
$keys = array_column($results['search'], 'combo_seeders');
array_multisort($keys, SORT_DESC, $results['search']);
// Cap results
$results['search'] = array_slice($results['search'], 0, 200);
unset($keys);
} else {
// Add error if there are no search results
$results['error'][] = array(
'message' => "No results found. Please try with more specific or different keywords!"
);
}
return $results;
}
public static function print_results($results, $opts) {
/*
// Uncomment for debugging
echo '
Settings: '; print_r($opts); echo ''; echo '
Search results: '; print_r($results); echo ''; */ // Latest additions to yts if($opts->show_yts_highlight == 'on') { require ABSPATH.'engines/boxoffice/yts.php'; echo "
View these and more new releases on the query."&t=9&a=".$opts->hash."\">box office page!
"; echo "".$highlight['summary']."
"; echo "hash."&t=0\" title=\"Search on Goosle Web Search!\">Search on Goosle • hash."&t=9\" title=\"Search on Goosle Magnet Search! For new additions results may be limited.\">Find more Magnet links
"; echo "Genre: ".$highlight['category']."
Released: ".$highlight['year']."
Rating: ".movie_star_rating($highlight['rating'])." (".$highlight['rating']." / 10)
"; foreach($highlight['magnet_links'] as $magnet) { if(!is_null($magnet['quality'])) $meta[] = $magnet['quality']; if(!is_null($magnet['type'])) $meta[] = $magnet['type']; $meta[] = human_filesize($magnet['filesize']); echo ""; unset($meta); } echo "
"; echo " "; echo "".implode(" • ", $base)."
"; echo "".implode(" • ", $meta)."
"; echo "Tap or click on the field below to copy the magnet result to your clipboard.
"; echo ""; echo " "; echo "