requests = array(); if($opts->enable_magnet_search == 'on') { // Extra functions to process magnet results require ABSPATH.'functions/tools-magnet.php'; if($opts->magnet['limetorrents'] == 'on') { require ABSPATH.'engines/magnet/lime.php'; $this->requests[] = new LimeRequest($search, $opts, $mh); } if($opts->magnet['piratebay'] == 'on') { require ABSPATH.'engines/magnet/thepiratebay.php'; $this->requests[] = new PirateBayRequest($search, $opts, $mh); } if($opts->magnet['yts'] == 'on') { if($search->safe !== 0) { require ABSPATH.'engines/magnet/yts.php'; $this->requests[] = new YTSRequest($search, $opts, $mh); } } if($opts->magnet['nyaa'] == 'on') { if($search->safe !== 0) { require ABSPATH.'engines/magnet/nyaa.php'; $this->requests[] = new NyaaRequest($search, $opts, $mh); } } if($opts->magnet['sukebei'] == 'on') { if($opts->show_nsfw_magnets == 'on' || ($opts->show_nsfw_magnets == 'off' && $search->safe === 0)) { require ABSPATH.'engines/magnet/sukebei.php'; $this->requests[] = new SukebeiRequest($search, $opts, $mh); } } if($opts->magnet['eztv'] == 'on') { if(substr(strtolower($search->query), 0, 2) == 'tt') { require ABSPATH.'engines/magnet/eztv.php'; $this->requests[] = new EZTVRequest($search, $opts, $mh); } } } } public function parse_results($response) { $goosle_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(isset($engine_result['search'])) { $how_many_results = 0; // Merge duplicates and apply relevance scoring foreach($engine_result['search'] as $result) { // Safe search, skip nsfw? if($request->opts->show_nsfw_magnets == 'off' && $request->search->safe !== 0 && $result['nsfw']) continue; if(isset($goosle_results['search'])) { $result_urls = array_column($goosle_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; } $how_many_results++; if($found_id !== false) { // Duplicate result from another engine // If seeders or leechers mismatch, assume they're different peers if($goosle_results['search'][$found_id]['seeders'] != $result['seeders']) $goosle_results['search'][$found_id]['combo_seeders'] += intval($result['seeders']); if($goosle_results['search'][$found_id]['leechers'] != $result['leechers']) $goosle_results['search'][$found_id]['combo_leechers'] += intval($result['leechers']); $goosle_results['search'][$found_id]['combo_source'][] = $engine_result['source']; // If duplicate result has more info, add it if(is_null($goosle_results['search'][$found_id]['year']) && !is_null($result['year'])) $goosle_results['search'][$found_id]['year'] = $result['year']; if(is_null($goosle_results['search'][$found_id]['category']) && !is_null($result['category'])) $goosle_results['search'][$found_id]['category'] = $result['category']; if(is_null($goosle_results['search'][$found_id]['runtime']) && !is_null($result['runtime'])) $goosle_results['search'][$found_id]['runtime'] = $result['runtime']; if(is_null($goosle_results['search'][$found_id]['url']) && !is_null($result['url'])) $goosle_results['search'][$found_id]['url'] = $result['url']; if(is_null($goosle_results['search'][$found_id]['timestamp']) && !is_null($result['timestamp'])) $goosle_results['search'][$found_id]['timestamp'] = $result['timestamp']; if(is_null($goosle_results['search'][$found_id]['quality']) && !is_null($result['quality'])) $goosle_results['search'][$found_id]['quality'] = $result['quality']; if(is_null($goosle_results['search'][$found_id]['type']) && !is_null($result['type'])) $goosle_results['search'][$found_id]['type'] = $result['type']; if(is_null($goosle_results['search'][$found_id]['audio']) && !is_null($result['audio'])) $goosle_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 // Add result to final results $goosle_results['search'][$result['id']] = $result; } unset($result, $result_urls, $found_id, $social_media_multiplier, $goosle_rank, $match_rank); } // Count results per source $goosle_results['sources'][$engine_result['source']] = $how_many_results; unset($how_many_results); } } } 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')); $goosle_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); } if(array_key_exists('search', $goosle_results)) { // Re-order results based on seeders $keys = array_column($goosle_results['search'], 'combo_seeders'); array_multisort($keys, SORT_DESC, $goosle_results['search']); // Count all results $goosle_results['number_of_results'] = count($goosle_results['search']); unset($keys); } else { // Add error if there are no search results $goosle_results['error'][] = array( 'message' => "No results found. Please try with more specific or different keywords!" ); } } else { $goosle_results['error'][] = array( 'message' => "It appears that all Magnet Search engines are disabled or that searching for magnet links is disabled." ); } return $goosle_results; } public static function print_results($goosle_results, $search, $opts) { // Uncomment for debugging /* echo "
Settings: ";
print_r($opts);
echo "
"; echo "
Search data: ";
print_r($search);
echo "
"; echo "
Search results: ";
print_r($goosle_results);
echo "
"; */ // Latest additions to yts if($opts->show_yts_highlight == 'on') { require ABSPATH.'engines/boxoffice/yts.php'; echo "

Latest releases from YTS

"; echo "

View these and more new releases on the query."&t=9&a=".$opts->hash."\">box office page!

"; echo ""; } // Main content if(array_key_exists('search', $goosle_results)) { // Is this a shared search? Move shared result to position 1 if($opts->show_share_option == 'on' && !empty($search->share)) { $keys = array_keys($goosle_results['search']); $found_id = array_search(md5($search->share), $keys); // Return the shared key ID $found_id = $keys[$found_id]; // Get the actual shared ID // Get the result $first = array($found_id => $goosle_results['search'][$found_id]); // Delete the result wherever it is unset($goosle_results['search'][$found_id], $keys, $found_id); // Add the result as the first item $goosle_results['search'] = array_merge($first, $goosle_results['search']); } // Pagination offset if($opts->cache_type !== 'off') { $offset = ((($search->page - 1) * $opts->search_results_per_page)); $goosle_results['search'] = array_slice($goosle_results['search'], $offset, $opts->search_results_per_page); } echo ""; // Pagination navigation if($opts->cache_type !== 'off' && $goosle_results['number_of_results'] > $opts->search_results_per_page) { echo "

".search_pagination($search, $opts, $goosle_results['number_of_results'])."

"; } echo "

Goosle does not index, offer or distribute torrent files.

"; // Torrent site warning popup (Normally hidden) echo "
"; echo "
"; echo "

Be careful when you visit torrent sites

"; echo "

Many torrent websites have intrusive popup ads and malware! Be careful what you click on and close any popups/redirects that appear.

"; echo "

Close

"; echo "
"; echo "
"; // Verified magnet info popup (Normally hidden) echo "
"; echo "
"; echo "

Trusted uploaders

"; echo "

Some websites have a group of verified and/or trusted uploaders. These are users that are known to provide good quality downloads.

"; echo "

Downloads with a blue shield and checkmark are uploaded by a verified or trusted user according to the torrent site.

"; echo "

Downloads with a red shield and questionmark indicate that the user is not verified by the website providing the download. This can mean this is a new user, or that the file is provided from an anonymous source. Unverified magnet links are not necessarily bad but may contain low quality or misleading content or simply have a poorly written title.

"; echo "

Close

"; echo "
"; echo "
"; } // No results found if(array_key_exists('error', $goosle_results)) { foreach($goosle_results['error'] as $error) { echo "
".$error['message']."
"; } } } } ?>