1
0
mirror of https://github.com/php/web-php.git synced 2026-03-23 23:02:13 +01:00
Files
archived-web-php/results.php
Rasmus Lerdorf 9fd1bae95f Switching search backend from Yahoo to Bing.
and to head off the inevitable bitching about this, it
is because the Yahoo BOSS v1 API we are using is going
away on July 20 and Yahoo was not willing to give us
free access to the new v2 API. It would end up costing
us about $600/year at our current usage pattern.
The new Google REST API would cost us about $7500/year.
The Bing API is free.
2011-07-14 05:24:48 +00:00

151 lines
6.4 KiB
PHP

<?php
// $Id$
$_SERVER['BASE_PAGE'] = 'results.php';
include $_SERVER['DOCUMENT_ROOT'] . '/include/prepend.inc';
#include $_SERVER['DOCUMENT_ROOT'] . '/include/loadavg.inc';
function exit_with_pretty_error($title, $header, $msg) {
if ($title) {
site_header($title, array("noindex"));
}
echo '<h2>' .$header. '</h2>';
echo '<p>' .$msg. '</p>';
site_footer();
exit;
}
if (!isset($_GET['q']) || (!is_string($_GET['q']) || strlen($_GET['q']) < 3)) {
exit_with_pretty_error("Search results", "Empty query", "You need to specify what you want to search for, 3chars at least");
}
if (!isset($_GET['l']) || !is_string($_GET['l'])) {
$_GET['l'] = null;
}
// Prepare data for search
if ($MQ) {
$q = stripslashes($_GET['q']); //query
$l = stripslashes($_GET['l']); // language
} else {
$q = isset($_GET['q']) ? $_GET['q'] : '';
$l = isset($_GET['l']) ? $_GET['l'] : 'en';
}
if(strlen($l)>2) $l = substr($l,0,2); // Just take the first 2 chars. eg. pt_BR = pt
$q = urlencode($q);
$l = urlencode($l);
$s = (isset($_GET['start']) && is_numeric($_GET['start'])) ? (int)$_GET['start'] : 0;
$profile = (isset($_GET['p']) && is_string($_GET['p'])) ? $_GET['p'] : 'all';
$per_page = 10;
$valid_profiles = array('all', 'local', 'manual', 'news', 'bugs', 'pear', 'pecl', 'talks');
$scope = in_array($profile, $valid_profiles) ? $profile : 'all';
$srch_host = "www.php.net";
$srch_rqst = "/ws.php?profile=$scope&q=$q&lang=$l&results=$per_page&start=$s&mirror=".trim(substr($MYSITE,7),'/');
$url = "http://".$srch_host.$srch_rqst;
$data = fetch_contents($url);
if (is_array($data)) {
// FIXME: if (is_authenticated()) ...
$comment = '<!-- ' .print_r($data, true). '-->';
exit_with_pretty_error("Search error", "Internal error", "This mirror does not support searches, please report this error to <a href='/contact'>our webmasters</a>" . $comment);
}
$res = unserialize($data);
// HTTP status line is passed on, signifies an error
site_header('Search results', array("noindex", "current" => "FIXME"));
if (!is_array($res)) {
exit_with_pretty_error(null, 'Internal error', 'Please try again later');
}
// No results for query
if ($res['ResultSet']['totalResultsAvailable'] == 0) {
exit_with_pretty_error(null, 'No matches', 'No pages matched your query');
exit;
}
$start_result = $s + ($s<2?0:1);
$end_result = $s + $res['ResultSet']['totalResultsReturned'] - ($s<2 || $res['ResultSet']['totalResultsReturned'] < 10?1:0);
$results_count = ($res['ResultSet']['totalResultsAvailable'] < 100 ? $res['ResultSet']['totalResultsAvailable'] : 'more than 100');
$disp_start_result = $start_result + 1;
$disp_end_result = $end_result + 1;
echo <<<EOB
<h2>Showing results $disp_start_result to $disp_end_result of $results_count</h2>
<ul id="search-results">
EOB;
$pos = $res['ResultSet']['firstResultPosition'];
$php_img_dir = 'http://static.php.net/www.php.net/images';
$types = array(
'pear' => '<img src="'. $php_img_dir .'/pear_item.gif" height="19" width="17" style="float:left; margin-left:-30px;"/>',
'pecl' => '<img src="'. $php_img_dir .'/pecl_item.gif" height="19" width="17" style="float:left; margin-left:-30px;"/>',
'pecl4win' => '<img src="'. $php_img_dir .'/pecl_item_win.gif" height="22" width="21" style="float:left; margin-left:-31px;"/>',
'peclbugs' => '<img src="'. $php_img_dir .'/pecl_item_bug.gif" height="19" width="17" style="float:left; margin-left:-30px;"/>',
'pearbugs' => '<img src="'. $php_img_dir .'/pear_item_bug.gif" height="19" width="17" style="float:left; margin-left:-30px;"/>',
'talks' => '<img src="'. $php_img_dir .'/ele-icon.gif" height="20" width="32" style="float:left; margin-left:-40px;"/>',
'snaps' => '<img src="'. $php_img_dir .'/logos/php_xpstyle_ico.png" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'cvsweb' => '<img src="'. $php_img_dir .'/logos/php_script_ico.png" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'viewcvs' => '<img src="'. $php_img_dir .'/logos/php_script_ico.png" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'news' => '<img src="'. $php_img_dir .'/logos/php-icon-white.gif" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'php' => '<img src="'. $php_img_dir .'/logos/php-icon-white.gif" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'doc' => '<img src="'. $php_img_dir .'/logos/php-icon-white.gif" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'bugs' => '<img src="'. $php_img_dir .'/php_bug.gif" height="32" width="32" style="float:left; margin-left:-40px;"/>',
'gtk' => '<img src="'. $php_img_dir .'/logos/php-gtk-white.gif" height="26" width="32" style="float:left; margin-left:-40px;"/>'
);
foreach($res['ResultSet']['Result'] as $i => $hit) {
$cnt = $pos + $i;
$d = date('j M Y', $hit['ModificationDate']);
$cachelink = '';
if (isset($hit['Cache'])) {
$cachelink = " - <a href=\"{$hit['Cache']}\">Cached</a>";
}
// rewrite mirrors urls (\w\w\d? or www, but not qa, doc, gtk and ~/user)
$real_url = preg_replace('@^http://(?!doc|qa|gtk)\w{2,3}\.php\.net(?!/~)(.*)$@', '$1', $hit['Url']);
$displayurl = preg_replace('@^http://(?:(?!doc|qa|php|gtk)\w{2,3}\.)?(.+[^/])/?$@', '$1', $hit['Url']);
$type = substr($displayurl,0,strpos($displayurl,'.'));
if($type=='pecl' && strstr($displayurl,"/bugs/")) $type = "peclbugs";
if($type=='pear' && strstr($displayurl,"/bugs/")) $type = "pearbugs";
if($type=='smarty') continue;
$display_title = str_replace(array('PHP:', '&amp;'), array('', '&'), $hit['Title']);
// Fall back to the PHP logo for unknown hits
if (!isset($types[$type])) {
$type = "php";
}
// Fix &amp;gt; double escaping
$summary = str_replace('&amp;', '&', $hit['Summary']);
echo <<<EOB
<li>
<p class="result">{$types[$type]}<a href="{$real_url}">{$display_title}</a></p>
<p class="summary">{$summary}</p>
<p class="meta">{$displayurl} - {$d} {$cachelink}</p>
</li>
EOB;
}
echo <<<EOB
</ul>
<span style="margin-left: 3em; margin-top: 1em; float: left; font-family: Verdana, Tahoma, Helvetica, Arial;
font-size: 11px; color:#555;">Results by <img src="/images/bing.png"/></span>
<div id="results_nav"><h4>Results Page:</h4>
<ul id="results_nav_list">
EOB;
$start = 0;
for($z=1; $z < 11; $z++) {
if($start > $res['ResultSet']['totalResultsAvailable']) {
break;
}
printf('<li><a href="/results.php?q=%s&start=%d&p=%s&l=%s">%d</a></li>', $q, $start, $scope, $l, $z);
$start += $per_page;
}
echo '</ul></div>';
site_footer();
?>