| |
|
|
| | Стоит на локальном сервере в сети Яндекс.Сервер с проиндексированным(локально) сайтом организации.
Внутри организации все прелесно работает, однако везде идет подстановка локального ip адреса сайта 10.1.0.5.
Нужно придумать скрипт "буфер" типа отправляем запрос скрипту он его перенаправляет на Яндекс.Сервер
получает XML файл, обрабатывает его и выдает результат в зависимости от того из интернета или локально зашли.
Если с интернета то ввв.сайт.ру если локально ip
Так вот уже несколько дней сижу над тем как написать этот скрипт и пока глухо.
Идею как должно работать я представляю, а вот реализовать пока не получается.
Поэтому и обращаюсь к Вам за помощью.
Яндекс.Сервер можно скачать отсюда: http://company.yandex.ru/technology/products/yandex-server.xml
запросы передаются так http://192.168.1.1:17000/?text=TEST
или в виде XML http://192.168.1.1:17000/?text=TEST&xml=yes
вот пример получаемого xml файла
для удобства я его немного сократил
<?xml version="1.0" encoding="utf-8" ?>
- <yandexsearch version="1.0">
- <request>
<query>news</query>
<page>0</page>
<sortby order="descending" priority="yes">rlv</sortby>
<maxpassages>2</maxpassages>
- <querystring>
<param name="text">news</param>
<param name="xml">yes</param>
</querystring>
</request>
- <response date-iso8601="2007-09-24T20:23:25Z" date="20070924T202325">
<reqid>2615479312</reqid>
<wordstat>news: 58</wordstat>
<found priority="phrase">0</found>
<found priority="strict">36</found>
<found priority="all">36</found>
- <results>
- <grouping attr="" mode="flat" groups-on-page="10" docs-in-group="1">
<found priority="phrase">0</found>
<found priority="strict">36</found>
<found priority="all">36</found>
<page first="1" last="10">0</page>
- <group>
<doccount>1</doccount>
<relevance priority="strict" subpriority="high">31</relevance>
- <doc id="2797">
<relevance priority="strict" subpriority="high">1</relevance>
<url>webds/10.1.0.5/1.htm</url>
<exturl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/1.htm&mime=text/html&charset=windows-1251</exturl>
<hlurl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/1.htm&mime=text/html&reqtext=news&text=news&charset=windows-1251&d=2797&hldoclist=http%3A//192.168.1.1%3A17000/%3Ftext%3Dnews%26xml%3Dyes</hlurl>
- <title>
<hlword priority="phrase">New</hlword>
Page 1
</title>
<headline>Главная страница</headline>
<modtime>2004-11-27T09:04:58Z</modtime>
<size>8238</size>
<charset>windows-1251</charset>
<properties />
</doc>
</group>
- <group>
<doccount>1</doccount>
<relevance priority="strict" subpriority="high">27</relevance>
- <doc id="2799">
<relevance priority="strict" subpriority="high">1</relevance>
<url>webds/10.1.0.5/Vysotzky.htm</url>
<exturl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/Vysotzky.htm&mime=text/html&charset=windows-1251</exturl>
<hlurl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/Vysotzky.htm&mime=text/html&reqtext=news&text=news&charset=windows-1251&d=2799&hldoclist=http%3A//192.168.1.1%3A17000/%3Ftext%3Dnews%26xml%3Dyes</hlurl>
- <title>
<hlword priority="phrase">New</hlword>
Page 1
</title>
<headline>Главная страница</headline>
<modtime>2004-11-27T09:05:00Z</modtime>
<size>8103</size>
<charset>windows-1251</charset>
<properties />
</doc>
</group>
</grouping>
</results>
</response>
</yandexsearch>
|
| |
| |
|
|
| |
|
|
| |
для: zi
(25.09.2007 в 01:16)
| | | Локальные адреса в какой диапазоне? Т.е. в случае локального пользователя, что нам вернёт переменная $_SERVER['REMOTE_ADDR']? | |
| |
|
|
| |
|
|
| |
для: cheops
(25.09.2007 в 11:28)
| | | Если пользователь лезит из локальной сети то адрес везде должен быть 10.1.0.5
например
<url>webds/10.1.0.5/Vysotzky.htm</url>
<exturl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/Vysotzky.htm&mime=text/html&charset=windows-1251</exturl>
<hlurl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/Vysotzky.htm&mime=text/html&reqtext=news&text=news&charset=windows-1251&d=2799&hldoclist=http%3A//192.168.1.1%3A17000/%3Ftext%3Dnews%26xml%3Dyes</hlurl>
|
если из интернета то - ввв.сайт.ру
<url>webds/ввв.сайт.ру/Vysotzky.htm</url>
<exturl>http://192.168.1.1:17000/hl?url=webds/ввв.сайт.ру/Vysotzky.htm&mime=text/html&charset=windows-1251</exturl>
<hlurl>http://192.168.1.1:17000/hl?url=webds/ввв.сайт.ру/Vysotzky.htm&mime=text/html&reqtext=news&text=news&charset=windows-1251&d=2799&hldoclist=http%3A//192.168.1.1%3A17000/%3Ftext%3Dnews%26xml%3Dyes</hlurl>
|
| |
| |
|
|
| |
|
|
| |
для: zi
(25.09.2007 в 23:05)
| | | Нет, имеется в виду у пользователей в локальной сети какие IP-адреса? Или они все через прокси-сервер идут? | |
| |
|
|
| |
|
|
| |
для: cheops
(26.09.2007 в 10:52)
| | | Внутренние IP адреса начинаются с 10-тки
ip 10.*
маска 255.0.0.0
Обычно на сайте я делаю так - в зависимости кому предназначается информация
<?
if (($_SERVER["REMOTE_ADDR"] == "10.5.15.15") )
{$url="http://".$_SERVER["HTTP_HOST"].":84/";}
else
{$url="http://новости.сайт.ру";}
?>
<a href="<? echo $url; ?>" target="_blank">Новости<br>
|
| |
| |
|
|
| |
|
|
| |
для: zi
(26.09.2007 в 13:34)
| | | Хм... так и тут так делайте - в зависимости от типа пользователя, либо оставляйте код без изменений, либо заменяйте при помощи функции str_replace() строку "192.168.1.1:17000" на "ввв.сайт.ру". | |
| |
|
|
| |
|
|
| |
для: zi
(25.09.2007 в 01:16)
| | | Вопрос. Может ли мне кто-нибудь помочь:
1) С написанием парсера этого xml
2) С написанием второго парсера
с автоматической заменой выделенных частей жирным на http://ввв.сайт.ру
<url>webds/10.1.0.5/1.htm</url>
и точно так же эти выделенные части
<exturl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/1.htm&mime=text/html&charset=windows-1251</exturl>
<hlurl>http://192.168.1.1:17000/hl?url=webds/10.1.0.5/1.htm&mime=text/html&reqtext=news&text=news&charset=windows-1251&d=2797&hldoclist=http%3A//192.168.1.1%3A17000/%3Ftext%3Dnews%26xml%3Dyes</hlurl> | |
| |
|
|
| |
|
|
| |
для: zi
(27.09.2007 в 19:48)
| | | 1) Можно отталкиваться от следующего скрипта
// text - содержит поисковое слово
$text = rawurlencode(stripslashes($_REQUEST["text"]));
$p = $_REQUEST["p"];
if(empty($p)) $p = 1;
$url = "http://адрес_яндекс_сервера?text=$text&p=$p&xml=yes";
$xml = file_get_contents($url);
$xml = iconv("UTF-8", "CP1251", $xml);
// Извлекаем количество запросов
preg_match("|<found priority=\"all\">(.*?)</found>|is", $xml, $out);
$total = $out[1];
preg_match_all("|<group>(.*?)</group>|is", $xml, $out);
for($i = 0; $i < count($out[1]); $i++)
{
preg_match("|<url>(.*?)</url>|is", $out[1][$i], $ur);
$url = $ur[1];
if(substr($url, 0, 5) == "webds")
{
$url = substr($url, 6);
$url = "http://".htmlspecialchars_decode($url);
}
preg_match("|<title>(.*?)</title>|is", $out[1][$i], $tl);
$title = $tl[1];
preg_match_all("|<passage>(.*?)</passage>|is", $out[1][$i], $ps);
echo "<a class=menuinfo target='_blank' href=$url>".$title."</a><br>";
for($j = 0; $j < count($ps[1]); $j++)
{
$ps[1][$j] = preg_replace("|<hlword[^>]+>(.*?)</hlword>|is", "<b>\\1</b>", $ps[1][$j]);
echo "<span class=texthelp>".$ps[1][$j]."</span><br>";
}
echo "<br>";
unset($passage);
}
if(!empty($_GET['error']))
{
echo "<pre>";
echo $xml;
echo "</pre>";
}
// Выводим ссылки на другие страницы
$page_link = 1;
$numberthemes = 10;
$number = (int)($total/$numberthemes);
if((float)($total/$numberthemes)-$number != 0) $number++;
echo "<p class=texthelp>";
// Передаём параметры поиска
$url = "text=$text&id_forum=".$_GET['id_forum'];
if($p - $page_link > 1)
{
echo "<a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=1> <nobr>[1-$numberthemes]</nobr></a> <em class=currentpage><nobr> ... </nobr> </em> ";
// Есть
for($i = $p - $page_link; $i<$p; $i++)
{
echo " <a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a> ";
}
}
else
{
// Нет
for($i = 1; $i<$p; $i++)
{
echo " <a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a> ";
}
}
// Проверяем есть ли ссылки справа
if($p + $page_link < $number)
{
// Есть
for($i = $p; $i<=$p + $page_link; $i++)
{
if($p == $i)
echo "<em class=currentpage><nobr> [".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."] </nobr> </em>";
else
echo " <a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a> ";
}
echo "<em class=currentpage><nobr> ... </nobr> </em> <a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$number> <nobr>[".(($number - 1)*$numberthemes + 1)."-$total]</nobr></a> ";
}
else
{
// Нет
for($i = $p; $i<=$number; $i++)
{
if($number == $i)
{
if($p == $i)
echo "<em class=currentpage><nobr> [".(($i - 1)*$numberthemes + 1)."-$total] </nobr></em>";
else
echo " <a title='Открыть последнюю страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i>[".(($i - 1)*$numberthemes + 1)."-$total]</a> ";
}
else
{
if($p == $i)
echo "<em class=currentpage><nobr> [".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."] </nobr> </em>";
else
echo " <a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a> ";
}
}
}
echo "</td></tr>";
echo "</table>";
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(30.09.2007 в 02:19)
| | | Спасибо за решение, однако у меня не пошло, поэтому я немного переписал:
http://localhost/ya.php?text=TEXT&p=1
$text = rawurlencode(stripslashes($_REQUEST["text"]));
$p = $_REQUEST["p"];
if(empty($p)) $p = 1;
echo "<font color=green>Страница - ".$p."</font>";
echo "Поиск по ключевому слову: ".$text."<hr>";
// Формируем ссылку для поиска
$url = "http://192.168.1.1:17000/?text=$text&p=$p&xml=yes";
// echo "<font color=blue>".$url."</font><hr>";
// Получаем результаты поиска
$xml = file_get_contents($url);
// Конвертируем полученные данные из кодировки UTF-8 в cp2151
$xml = iconv("UTF-8", "CP1251", $xml);
// echo "<font color=green>".$xml."</font><hr>";
// Извлекаем количество найденных документов(записей)
// Элемент $matches[0] будет содержать часть строки, соответствующую вхождению всего шаблона,
// $matches[1] - часть строки, соответствующую первой подмаске, и так далее.
preg_match("|<found priority=\"all\">(.*?)</found>|is", $xml, $out);
$total = $out[1];
echo "Найдено документов: ".$total."<hr>";
preg_match("|<reqid>(.*?)</reqid>|is", $xml, $reqid1);
$reqid = $reqid1[1];
// в <group> ... </group> хранятся строки с результатами поиска
preg_match_all("|<group>(.*?)</group>|is", $xml, $out);
// В цикле обрабатываем по очереди обработку данных из <group> ... </group>
for($i = 0; $i < count($out[1]); $i++)
{
preg_match("|<url>(.*?)</url>|is", $out[1][$i], $ur);
$url = $ur[1];
if(substr($url, 0, 5) == "webds")
{
$url = substr($url, 6);
// $url = "http://".htmlspecialchars_decode($url);
$url = "http://".htmlspecialchars($url);
}
// Получаем название(заголовок страницы) из <title>
preg_match("|<title>(.*?)</title>|is", $out[1][$i], $tl);
$title = $tl[1];
// Получаем описание из <headline>
preg_match("|<headline>(.*?)</headline>|is", $out[1][$i], $t2);
$headline = $t2[1];
// Получаем Дату и время модификации из <modtime>
preg_match("|<modtime>(.*?)</modtime>|is", $out[1][$i], $t3);
$modtime = $t3[1];
// Получаем ключевое влово из <passage>
preg_match_all("|<passage>(.*?)</passage>|is", $out[1][$i], $ps);
// ОФОРМЛЯЕМ ВЫВОД ПОЛУЧЕННОЙ ИНФОРМАЦИИ
// Выводим полученную информацию
echo "<a class=menuinfo target='_blank' href=$url>".$title."</a><br>";
echo $headline."<br>";
echo $url." ".$modtime ;
/*
for($j = 0; $j < count($ps[1]); $j++)
{
$ps[1][$j] = preg_replace("|<hlword[^>]+>(.*?)</hlword>|is", "<b>\\1</b>", $ps[1][$j]);
echo "<span class=texthelp>".$ps[1][$j]."</span><br>";
}
*/
echo "<br>";
unset($passage);
}
/*
if(!empty($_GET['error']))
{
echo "<pre>";
echo $xml;
echo "</pre>";
}
*/
echo "<br>";
$url = "text=$text&reqid=$reqid";
// Вывод страниц 1 2 3 4 5 6 7 8 9 10 11 ...
$j = 1;
if ($total > 10) {
for ($i = 1; $i < $total; $i++) {
if ($i % 10 == 0) {
echo "<a href=$_SERVER[PHP_SELF]?$url&p=$j>".$j."</a> ";
$j++;
}
}
}
echo "<br>";
|
| |
| |
|
|
| |
|
|
| |
для: zi
(01.10.2007 в 19:23)
| | | возник прикол после недельного тестирования
если по результатам запроса выдается более сотни найденных страниц и когда нажимаешь по ссылкам 1 2 3 4 5 6 7 8 9 10 11 ... (внизу страницы), появляется глюк
все страницы вроде нормально выводятся, а иногда 9, 10 выводятся пустыми, а 5, 6 могут быть на половину заполнены, т.е. вместо 10 ответов на странице пять шесть
причем каждый раз по разному
даже не знаю в чем глюк | |
| |
|
|
| |
|
|
| |
для: zi
(27.09.2007 в 19:48)
| | | 2) Это можно сделать при помощи функции str_replace() | |
| |
|
|