requests = array( new YahooImageRequest($opts, $mh), ); } public function parse_results($response) { $results = array(); // Merge all results together foreach($this->requests as $request) { if($request->request_successful()) { $engine_result = $request->get_results(); if(!empty($engine_result)) { if(array_key_exists('did_you_mean', $engine_result)) { $results['did_you_mean'] = $engine_result['did_you_mean']; } if(array_key_exists('search_specific', $engine_result)) { $results['search_specific'][] = $engine_result['search_specific']; } if(array_key_exists('search', $engine_result)) { // Merge duplicates and apply relevance scoring foreach($engine_result['search'] as $result) { if(array_key_exists('search', $results)) { $result_urls = array_column($results['search'], "direct_link", "id"); $found_key = array_search($result['direct_link'], $result_urls); } else { $found_key = false; } if($found_key !== false) { // Duplicate result from another source, merge and rank accordingly $results['search'][$found_key]['goosle_rank'] += $result['engine_rank']; } else { // First find, rank and add to results $query_terms = explode(" ", preg_replace("/[^a-z0-9 ]+/", "", strtolower($request->query))); $match_rank = match_count($result['alt'], $query_terms); $result['goosle_rank'] = $result['engine_rank'] + $match_rank; $results['search'][$result['id']] = $result; } unset($result, $result_urls, $found_key, $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); } if(array_key_exists('search', $results)) { // Re-order results based on rank $keys = array_column($results['search'], 'goosle_rank'); array_multisort($keys, SORT_DESC, $results['search']); // Count results per source $results['sources'] = array_count_values(array_column($results['search'], 'source')); 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 '
'; */ if(array_key_exists("search", $results)) { echo "
    "; // Elapsed time $number_of_results = count($results['search']); echo "
  1. Fetched ".$number_of_results." results in ".$results['time']." seconds.
  2. "; // Format sources search_sources($results['sources']); // Did you mean/Search suggestion search_suggestion($opts, $results); echo "
"; // Search results echo "
"; echo "
    "; foreach($results['search'] as $result) { // Extra data $meta = $links = array(); if(!empty($result['height']) && !empty($result['width'])) $meta[] = $result['width']."×".$result['height']; if(!empty($result['filesize'])) $meta[] = $result['filesize']; $links[] = "Website"; if(!empty($result['direct_link'])) $links[] = "Image"; // Put result together echo "
  1. "; echo "\"".$result['alt']."\""; echo "
    ".implode(" - ", $meta)."
    ".implode(" - ", $links)."
    "; echo "
  2. "; } echo "
"; echo "
"; } // No results found if(array_key_exists("error", $results)) { foreach($results['error'] as $error) { echo "
".$error['message']."
"; } } unset($results); } } ?>