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

Форум PHP

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

 

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

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

тема: Как узнать поисковую фразу Рамблера?
 
 автор: Владимир55   (26.03.2009 в 00:03)   письмо автору
 
 

Ниже приведен код, позаимствованный из счетчика софттайм. Поисковые фразы яндекса и гугля воспроизводятся нормально, а Рамблера отсутствуют.

Можно ли это исправить?

            // Это строчка с реферером - URL страницы, с которой  посетитель пришёл на сайт
              if(!isset($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER'] = "";
              $reff = urldecode($_SERVER['HTTP_REFERER']);

              // Выясняем принадлежность к поисковым системам
              $p_s = 'no';
              if(strpos($reff,"yandex"))  $p_s = 'yandex';
              if(strpos($reff,"rambler")) $p_s = 'rambler';
              if(strpos($reff,"google"))  $p_s = 'google';
              if(strpos($reff,"aport"))   $p_s = 'aport';
              if(strpos($reff,"mail") && strpos($reff,"search"))   $p_s = 'mail';
              if(strpos($reff,"msn") && strpos($reff,"results"))   $p_s = 'msn';


            // Определяем поисковый запрос, по которому пришел посетитель
            $p_zapros = "no";
              if(!empty($reff) && $p_s != "no")
              {
                switch($p_s)
                {
                      case 'yandex':
                      {
                        preg_match("|text=([^&]+)|is", $reff."&", $out);
                        if(strpos($reff,"yandpage")!=null)
                          $p_zapros = convert_cyr_string(urldecode($out[1]),"k","w");
                    else
                          $p_zapros = utf8_win($out[1]);
                        break;
                      }
                      case 'rambler':
                      {
                        preg_match("|words=([^&]+)|is", $reff."&", $out);
                            $p_zapros = $out[1];
                        break;
                      }
                      case 'mail':
                      {
                            preg_match("|q=([^&]+)|is", $reff."&", $out);
                            $p_zapros = $out[1];
                            break;
                      }
                      case 'google':
                      {
                            preg_match("|[^a]q=([^&]+)|is", $reff."&", $out);
                            $p_zapros = utf8_win($out[1]);
                            break;
                      }
                      case 'msn':
                      {
                            preg_match("|q=([^&]+)|is", $reff."&", $out);
                            $p_zapros = utf8_win($out[1]);
                            break;
                      }
                      case 'aport':
                      {
                            preg_match("|r=([^&]+)|is", $reff."&", $out);
                            $p_zapros = $out[1];
                            break;
                      }
                    }
                $symbols = array("\"", "'", "(", ")", "+", ",", "-");
                    $p_zapros = str_replace($symbols, " ", $p_zapros);
                    $p_zapros = trim($p_zapros);
                    $p_zapros = preg_replace('|[\s]+|',' ',$p_zapros);

                    $p_zapros = substr ($p_zapros, 0, 98);

                    // echo "<br> p_s $p_s <br> p_zapros ", $p_zapros, "<br>";
              }

  Ответить  
 
 автор: mihdan   (26.03.2009 в 11:13)   письмо автору
 
   для: Владимир55   (26.03.2009 в 00:03)
 

Так как Рамблер поменял дизаин и ссылки на сайте, то запрос теперь выглядит, как:
http://nova.rambler.ru/search?btnG=Найти!&query=тест


Поэтому:

<?php
...
case 
'rambler': { 
   
preg_match("|query=([^&]+)|is"$reff."&"$out); 
   
$p_zapros $out[1]; 
   break; 

...
?>

  Ответить  
 
 автор: Владимир55   (26.03.2009 в 17:58)   письмо автору
 
   для: mihdan   (26.03.2009 в 11:13)
 

В принципе, ситуация изменилась, Спасибо!

Однако она изменилась как-то странно - в большинстве случаев поисковая фраза все же отсутствует, а иногда она в виде кракозябров типа Р?менР

Как я понимаю, приведенная Вами форма запроса
http://nova.rambler.ru/search?btnG=Найти!&query=тест 
отнюдь не единственная, ибо я обнаружил по крайней мере две других.

  Ответить  
 
 автор: а-я   (26.03.2009 в 19:14)   письмо автору
 
   для: Владимир55   (26.03.2009 в 00:03)
 

если хочешь, можешь протестировать мой вариант..
сайт на utf-8. вроде все нормально показывает.


<?

function search_query($A=''){
$A trim($A);
 if(empty(
$A)) return false//пустая переменная отправляем false

$words_A = array(// массив из ключевых слов поисковиков
 
'google.com' => 'q',     //google.com
 
'yandex.ru'  => 'text',  //yandex.ru
 
'mail.ru'    => 'q',     //mail.ru
 
'rambler.ru' => 'query'//rambler.ru
 
'yahoo.com'  => 'p',     //yahoo.com
 
'ask.com'    => 'q',     //ask.com
 
'msn.com'    => 'q'      //msn.com
);

$ref_host parse_url($APHP_URL_HOST); // хост

 
foreach($words_A as $host => $k)        // с каким поисковиком работаем
  
if(strripos($ref_host$host)) break;

$word $words_A[$host];                 // ключевое слово на данный процесс
$query parse_url($APHP_URL_QUERY);   // возвращаем QUERY из полного URLa
parse_str($query$output);              // создаем массив из переменных QUERY 
$result trim($output[$word]);          // значение по ключевому слову

 
if('mail.ru' == $host)                  //исключение для mail.ru
 
$result iconv('windows-1251','utf-8',$result);

return empty(
$result) ? false $result//возвращаем результат
}

echo 
search_query($_SERVER['HTTP_REFERER']);
?>

  Ответить  
Rambler's Top100
вверх

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