Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка и выдача результатов Яndex Server в локально и в интернете
 
 автор: zi   (25.09.2007 в 01:16)   письмо автору
 
 

Стоит на локальном сервере в сети Яндекс.Сервер с проиндексированным(локально) сайтом организации.
Внутри организации все прелесно работает, однако везде идет подстановка локального 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>

   
 
 автор: cheops   (25.09.2007 в 11:28)   письмо автору
 
   для: zi   (25.09.2007 в 01:16)
 

Локальные адреса в какой диапазоне? Т.е. в случае локального пользователя, что нам вернёт переменная $_SERVER['REMOTE_ADDR']?

   
 
 автор: zi   (25.09.2007 в 23:05)   письмо автору
 
   для: 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>  

   
 
 автор: cheops   (26.09.2007 в 10:52)   письмо автору
 
   для: zi   (25.09.2007 в 23:05)
 

Нет, имеется в виду у пользователей в локальной сети какие IP-адреса? Или они все через прокси-сервер идут?

   
 
 автор: zi   (26.09.2007 в 13:34)   письмо автору
 
   для: 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>

   
 
 автор: cheops   (30.09.2007 в 02:14)   письмо автору
 
   для: zi   (26.09.2007 в 13:34)
 

Хм... так и тут так делайте - в зависимости от типа пользователя, либо оставляйте код без изменений, либо заменяйте при помощи функции str_replace() строку "192.168.1.1:17000" на "ввв.сайт.ру".

   
 
 автор: zi   (27.09.2007 в 19:48)   письмо автору
 
   для: 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>

   
 
 автор: cheops   (30.09.2007 в 02:19)   письмо автору
 
   для: 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>&nbsp;<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;";
      // Есть
      for($i = $p - $page_link; $i<$p; $i++)
      {
        echo "&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a>&nbsp;";
      }
    }
    else
    {
      // Нет
      for($i = 1; $i<$p; $i++)
      {
          echo "&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a>&nbsp;";
      }
    }
    // Проверяем есть ли ссылки справа
    if($p + $page_link < $number)
    {
      // Есть
      for($i = $p; $i<=$p + $page_link; $i++)
      {
        if($p == $i)
          echo "<em class=currentpage><nobr>&nbsp;[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]&nbsp;</nobr> </em>";
        else
          echo "&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a>&nbsp;";
      }
      echo "<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$number> <nobr>[".(($number - 1)*$numberthemes + 1)."-$total]</nobr></a>&nbsp;";
    }
    else
    {
    // Нет
      for($i = $p; $i<=$number; $i++)
      {
       if($number == $i)
       {
         if($p == $i)
           echo "<em class=currentpage><nobr>&nbsp;[".(($i - 1)*$numberthemes + 1)."-$total]&nbsp;</nobr></em>";
         else
           echo "&nbsp;<a title='Открыть последнюю страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i>[".(($i - 1)*$numberthemes + 1)."-$total]</a>&nbsp;";
        }
        else
        {
          if($p == $i)
            echo "<em class=currentpage><nobr>&nbsp;[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]&nbsp;</nobr> </em>";
          else
            echo "&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=$_SERVER[PHP_SELF]?$url&p=$i> <nobr>[".(($i - 1)*$numberthemes + 1)."-".$i*$numberthemes."]</nobr></a>&nbsp;";
        }
      }
    }
    echo "</td></tr>";
    echo "</table>";

   
 
 автор: zi   (01.10.2007 в 19:23)   письмо автору
 
   для: 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   (05.10.2007 в 11:38)   письмо автору
 
   для: zi   (01.10.2007 в 19:23)
 

возник прикол после недельного тестирования
если по результатам запроса выдается более сотни найденных страниц и когда нажимаешь по ссылкам 1 2 3 4 5 6 7 8 9 10 11 ... (внизу страницы), появляется глюк
все страницы вроде нормально выводятся, а иногда 9, 10 выводятся пустыми, а 5, 6 могут быть на половину заполнены, т.е. вместо 10 ответов на странице пять шесть
причем каждый раз по разному
даже не знаю в чем глюк

   
 
 автор: cheops   (30.09.2007 в 02:21)   письмо автору
 
   для: zi   (27.09.2007 в 19:48)
 

2) Это можно сделать при помощи функции str_replace()

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования