<?php
/*Alexus finder 3.0
*Поисковая система на основе поиска от wappc.ru
*Оффсайт скрипта: http://youjob.org.ua
*Автор скрипта: Васильев Александр (Alexus)
*Автор библиотеки wappc: Denvas
*Дата: 29 марта 2009 года
*Страница: search.php - страница вывода поисковых результатов с сайта wappc.ru.
*-----------------------------------------------------
*СКРИПТ ЗАПРЕЩЕНО ПРОДАВАТЬ!!!
*/
$nrowpage=10;
include('config.php');
include('func.php');
$wappc_nametemp = "temp";
//Проверяем не пустое ли поле формы
if(empty($_GET['search']))
{
include('header.php');
echo "ОШИБКА!<br />Вы оставили поле формы пустым!<br />Введите свой запрос!";
include('footer.php');
exit();
};
//вывод данных
$namelast="temp/wappclastsearch.txt";
if(file_exists($namelast))$datalast=file($namelast); else $datalast=array();
if(!empty($_GET["search"])){
$search=trim($_GET["search"]);
include('header.php');
//Подключение популярных запросов
if($on_off_p_links == "on")
{
include("pop_links.php");
}
else
{
echo "";
}
print "<div>Ваш запрос: ".$search."</div>";
print "<hr />";
print "<div>";
$codesearch=GetFeedSearch($search);
if($codesearch){
$n=count($datalast);$flag=true;
for($i=0;$i<$n;$i++){
if(strcmp($datalast[$i],$search."\n")==0){$flag=false;break;};
};
if($flag){
$datalast[]=$search."\n";
if(count($datalast)>7)array_splice($datalast,0,1);
$fd=fopen($namelast,"wb");
fwrite($fd,join($datalast));
fclose($fd);
};
print $codesearch;
}
else{
print "По вашему запросу ничего не найдено<br/>";
};
}
else{
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.0//EN\" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>".$title."</title><meta http-equiv=\"Content-Type\" content=\"application/vnd.wap.xhtml+xml; charset=utf-8\"/><link rel=\"stylesheet\" type=\"text/css\" href=\"pic/style.css\"/></head><body><div class='main'>";
print "<div>".$title."</div>";
print "<div>";
$search="";
};
//Выводим последние поиски
$n=count($datalast);
if($n>1){
print "<hr />";
print "Последние поиски: ";
for($i=0;$i<$n;$i++){
$s=trim($datalast[$i]);
print "<a href='search.php?search=".urlencode($s)."'>".$s."</a> ";
};
print "<br/>";
};
print "</div>";
include('footer.php');
//==================================================//
function GetFeedSearch($search){
global $wappc_nametemp,$wappc_aff,$charset,$rows,$dataip;
//загрузка базы IP
$dataip=array();
$nameip=rtrim($wappc_nametemp,"/")."/ip.ppctemp";
if(file_exists($nameip)){
$content=file($nameip);
$oldtime=(int)$content[0];
$dataip=unserialize($content[1]);
}
else
$oldtime=0;
if(time()-$oldtime>10*24*60*60){
$ch=curl_init("http://wap.wappc.ru/exportip.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html=curl_exec($ch);
curl_close($ch);
if(strpos($html,"ok:")!==false){
$html=explode("\n",$html);
$fd=fopen($nameip,"wb");
if($fd){fwrite($fd,time()."\n".$html[1]);fclose($fd);};
$dataip=unserialize($html[1]);
};
};
//загрузка списка рекламы
$content="";
$nametemp=rtrim($wappc_nametemp,"/")."/".md5($search).".wappctemp";
if(file_exists($nametemp)){
$content=file_get_contents($nametemp);
$oldtime=(int)substr($content,0,strpos($content,"\n"));
} else $oldtime=0;
if(time()-$oldtime>5*60){//кешировать на 5 минут (чаще запрашивать нельзя, сервер будет блокировать запросы)
$url="http://wap.wappc.ru/export.php?charset=utf-8&user=".WAPPC_ID."&i=0&search=".urlencode($search)."&num=40&minprice=2&rnd=".mt_rand(0,1000);
//забор средствами php
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html=curl_exec($ch);
curl_close($ch);
//кэширование
if($html)$content=$html;
$fd=fopen($nametemp,"wb");
if($fd){fwrite($fd,time()."\n".$content);fclose($fd);};
}//if
//очистить временный каталог (очистка вызывается 1 раз из 100 запросов)
elseif(mt_rand(0,100)==0){
$handle=opendir($wappc_nametemp);
while ($namefile = readdir($handle)){
if((strpos($namefile,".wappctemp")===false))continue;
@unlink(rtrim($wappc_nametemp,"/\\")."/".$namefile);
};//while ($file = readdir($handle))
closedir($handle);
};
//подготовка данных
global $user_agent, $ip, $wapver;
$user_agent=(isset($_SERVER['HTTP_USER_AGENT'])?strtr($_SERVER['HTTP_USER_AGENT'],array("\r"=>"","\n"=>"","|"=>"")):"");
$ip=(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:"");
$userallinfo=array(
"referer"=>"http://".@$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]
);
$wapver=2;
$data=ParseResultSearch($content);
$rows=count($data);
if($rows>0){
$code="";
//прогнать по таркетингу, если это не поисковик. Если поисковик, то показать все результаты
if(strpos($user_agent,"http://")===false){
for($j=0;$j<$rows;$j++){
$row=&$data[$j];
if((!empty($row[6]))&&(CheckTargeting($userallinfo,$row[6]))){
array_splice($data,$j,1);
$j--;$rows--;
};//if
};//for
};
//вывести результат
list($start,$stop)=GetPage();
for($i=$start;$i<$stop;$i++){
$slink=$data[$i];
$code.="<div class='line".($i%2)."'><a href='".$slink[4]."'>".$slink[2]."</a><br/><small>".trim($slink[3]," \r\n.!")."<a href='".$slink[4]."'>...</a></small><br/></div>";
};
$code.=ShowPage();
return $code;
};
return "";//нет данных
};//function
//==================================================//
/*
Функция разбирает данные и возвращает массив
*/
function ParseResultSearch($content,$badwords=array()){
if(empty($content))return array();
$data=array();
$lines=explode("\n",$content);
$nlines=count($lines);
$nbadwords=count($badwords);
for($j=1;$j<$nlines;$j++){
$line=trim($lines[$j]);
$flag=false;
for($i=0;$i<$nbadwords;$i++)if(strpos($line,$badwords[$i])!==false){$flag=true;break;};
if($flag)continue;
$elem=explode("|",$line);
if(count($elem)<3)continue;
$data[]=$elem;
};
return $data;
};//function
//==================================================//
function CheckTargeting(&$info,$rule){
global $user_agent, $ip, $wapver;
$repeat=0;
//разруливатель по версиям
if(!empty($rule["ver"])){
if(empty($rule["ver"][$wapver]))return "ver";
};
//проверка на прокси
if(!empty($rule["proxy"])){
if((isset($_SERVER["HTTP_X_FORWARDED_FOR"]))||(isset($_SERVER["HTTP_CLIENT_IP"])))return "proxy";
};//if($rule["proxy"])
//разруливатель по хорошим агентам
if(!empty($rule["agent"])){
$nagent=count($rule["agent"]);
$flag=true;
for($i=0;$i<$nagent;$i++){
if(empty($rule["agent"][$i]))continue;
if(strpos($user_agent,$rule["agent"][$i])!==false){
$flag=false;//нашли разрешенный
break;
};
};
if($flag)return "agent";
};//if($rule["agent"])
//разруливатель по плохим агентам
if(!empty($rule["banagent"])){
$nagent=count($rule["banagent"]);
$flag=false;
for($i=0;$i<$nagent;$i++){
if(empty($rule["banagent"][$i]))continue;
if(strpos($user_agent,$rule["banagent"][$i])!==false){
$flag=true;//нашли запрещенный
break;
};
};
if($flag)return "banagent";
};//if($rule["banagent"])
//проверка на разрешенные
if(!empty($rule["ip"])){
$nip=count($rule["ip"]);
$flag=true;
for($i=0;$i<$nip;$i++){
if(empty($rule["ip"][$i]))continue;
if(strpos($ip,$rule["ip"][$i])===0){
$flag=false;//эта сетка разрешена к пересылке
break;
};
};//for
if($flag)return "ip";
};//if($rule["ip"])
//проверка на запрещенные ip
if(!empty($rule["banip"])){
$nip=count($rule["banip"]);
$flag=false;
for($i=0;$i<$nip;$i++){
if(empty($rule["banip"][$i]))continue;
if(strpos($ip,$rule["banip"][$i])===0){
$flag=true;//эта сетка запрещена к переходу
break;
};
};//for
if($flag)return "banip";
};//if($rule["ip"])
//проверка на запрещенные рекламные страницы
if((!empty($info["referer"]))&&(!empty($rule["banreferer"]))){
$nreferer=count($rule["banreferer"]);
$flag=false;
for($i=0;$i<$nreferer;$i++){
if(empty($rule["banreferer"][$i]))continue;
if(strpos($info["referer"],$rule["banreferer"][$i])!==false){
$flag=true;//нашли запрещенный
break;
};
};
if($flag)return "banreferer";
};//if($rule["banagent"])
//проверка на разрешенные host
if(!empty($rule["host"])){
if(empty($info["host"])){
$info["host"]=gethostbyaddr($ip);
};
$host=$info["host"];
$nhost=count($rule["host"]);
$flag=true;
for($i=0;$i<$nhost;$i++){
if(empty($rule["host"][$i]))continue;
if(strpos($host,$rule["host"][$i])!==false){
$flag=false;//эта сетка разрешена к пересылке
break;
};
};//for
if($flag)return "host";
};//if($rule["host"])
//проверка на запрещенные host
if(!empty($rule["banhost"])){
if(empty($info["host"])){
$info["host"]=gethostbyaddr($ip);
};
$host=$info["host"];
$nhost=count($rule["banhost"]);
$flag=false;
for($i=0;$i<$nhost;$i++){
if(empty($rule["banhost"][$i]))continue;
if(strpos($host,$rule["banhost"][$i])!==false){
$flag=true;//эта сетка запрещена к переходу
break;
};
};//for
if($flag)return "banhost";
};//if($rule["host"])
//более сложные разруливания, которые требует чтение дополнительных файлов
//ограничение по операторам
if(!empty($rule["operator"])){
if(empty($info["operator"])){
$info["operator"]=getoperatorGO($ip);
};
$operator=$info["operator"];
$noperator=count($rule["operator"]);
$flag=true;
for($i=0;$i<$noperator;$i++){
if(empty($rule["operator"][$i]))continue;
if(strpos($operator,$rule["operator"][$i])!==false){
$flag=false;//этот оператор разрешен к пересылке
break;
};
};//for
if($flag)return "operator";
};//if(!empty($rule["operator"]))
if(!empty($rule["banoperator"])){
if(empty($info["operator"])){
$info["operator"]=getoperatorGO($ip);
};
$operator=$info["operator"];
$noperator=count($rule["banoperator"]);
$flag=false;
for($i=0;$i<$noperator;$i++){
if(empty($rule["banoperator"][$i]))continue;
if(strpos($operator,$rule["banoperator"][$i])!==false){
$flag=true;//этот оператор запрещен к пересылке
break;
};
};//for
if($flag)return "banoperator";
};//if(!empty($rule["banoperator"]))
};
//==================================================//
function getoperatorGO($ip){
global $dataip;
$ip=IPnormal($ip);
$nbase=count($dataip);
for($i=0;$i<$nbase;$i++){
$row=&$dataip[$i];
if((strcmp($row[0],$ip)<=0)&&(strcmp($row[1],$ip)>=0))return $row[4];
};
return "other";
};
//==================================================//
function IPnormal($ip){
$str=explode(".",$ip);
return str_pad($str[0],3,"0",STR_PAD_LEFT).".".str_pad($str[1],3,"0",STR_PAD_LEFT).".".str_pad($str[2],3,"0",STR_PAD_LEFT).".".str_pad($str[3],3,"0",STR_PAD_LEFT);
};
?>