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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Обработка и выдача результатов Яndex Server в локально и в интернете

Сообщения:  [1-10]   [11-11] 

 
 автор: 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 ответов на странице пять шесть
причем каждый раз по разному
даже не знаю в чем глюк

   
 
 автор: 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>";

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

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

   
 
 автор: 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>";

   
 
 автор: 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>

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

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

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

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

   

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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