Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Патч для awstats, декодирующий рефереры яндекса. (WingedFox)
Author Message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu Jun 08, 2006 12:42 pm (написано за 6 минут 3 секунды)
   Post subject: Патч для awstats, декодирующий рефереры яндекса.
Reply with quote

Яндекс, как самый умный, при постраничном выводе результатов перекодирует строку запроса в неудобоваримый вид.
Из-за этого AWSTATS правильно определяет строку запроса только для 1й страницы результатов.

Патч сие дело исправляет.
Специально для яндекса производится перекодировка из KOI-8 в CP-1251.
Code (perl): скопировать код в буфер обмена
if ($param =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/^$SearchEnginesKnownUrl{$tmprefererserver}//) {
        # We found good parameter
        # Now param is keyphrase: "cache:mmm:www/zzz+aaa+bbb/ccc+ddd%20eee'fff,ggg"
        $param =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/^(cache|related):[^\+]+//;  # Should be useless since this is for hit on 'not pages'
        &ChangeWordSeparatorsIntoSpace($param); # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg]
        $param =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/^ +//; $param =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/ +$//; $param =~ tr (www.perldoc.com/perl5.6/pod/func/tr.html)/ /\+/s (www.perldoc.com/perl5.6/pod/func/s.html);
        if ((length (www.perldoc.com/perl5.6/pod/func/length.html) $param) > 0) { $_keyphrases{$param}++; }
        last;
} else {
  $param =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/\w+=//;
  $param =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/%([a-fA-F0-9][a-fA-F0-9])/pack (www.perldoc.com/perl5.6/pod/func/pack.html)("C", hex (www.perldoc.com/perl5.6/pod/func/hex.html)($1))/seg;
  foreach my $p1 (split (www.perldoc.com/perl5.6/pod/func/split.html)(/&/, $param)) {
    if ($p1 =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/^$SearchEnginesKnownUrl{$tmprefererserver}//) {
        if ($tmprefererserver =~ /yandex/i) {
          use Encode;
          $p1 =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/%([a-fA-F0-9][a-fA-F0-9])/pack (www.perldoc.com/perl5.6/pod/func/pack.html)("C", hex (www.perldoc.com/perl5.6/pod/func/hex.html)($1))/seg;
          $p1 = encode("cp1251",decode("koi8-r",$p1));
          $p1 =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
        }
        # We found good parameter
        # Now param is keyphrase: "cache:mmm:www/zzz+aaa+bbb/ccc+ddd%20eee'fff,ggg"
        $p1 =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/^(cache|related):[^\+]+//;  # Should be useless since this is for hit on 'not pages'
        &ChangeWordSeparatorsIntoSpace($p1); # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg]
        $p1 =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/^ +//; $p1 =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/ +$//; $p1 =~ tr (www.perldoc.com/perl5.6/pod/func/tr.html)/ /\+/s (www.perldoc.com/perl5.6/pod/func/s.html);
        if ((length (www.perldoc.com/perl5.6/pod/func/length.html) $p1) > 0) { $_keyphrases{$p1}++; }
        last;
    }
  }
}
Установка заключается в замене стандартного блока обработки рефереров в районе 7170й строки для awstats 6.6.
Начало блока отмечено комментарием
Quote:
# Extract params of referer query string


Last edited by WingedFox on Wed Jun 28, 2006 4:21 am; edited 2 times in total
Back to top
View user's profile Send private message
CMS
Участник форума



Joined: 21 Apr 2005
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Mon Jun 12, 2006 9:03 pm (спустя 4 дня 8 часов 20 минут; написано за 30 секунд)
   Post subject:
Reply with quote

у кого-нибудь есть информация для чего Ya конвертит в koi8-r?
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Mon Jun 12, 2006 9:30 pm (спустя 27 минут; написано за 1 минуту 10 секунд)
   Post subject:
Reply with quote

CMS
Даже у них самих её нет. Есть просто факт 8*)
Могу предположить, что у них база с древних времён идёт в KOI-8.
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Wed Jun 28, 2006 4:21 am (спустя 15 дней 6 часов 50 минут; написано за 3 минуты 35 секунд)
   Post subject:
Reply with quote

Поправил патч.
Раньше Яндекс подставлял закодированный параметр text в конец запроса, а теперь он идёт в начале.
Я не обратил внимание что ключевые слова ищутся от начала строки, а теперь там 'qs=text='.

В общем, перед декодированием параметра теперь отрезается его имя.
Back to top
View user's profile Send private message
knutov
Заглянувший



Joined: 23 May 2005
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Thu Nov 15, 2007 3:08 pm (спустя 1 год 4 месяца 17 дней 10 часов 47 минут; написано за 35 секунд)
   Post subject:
Reply with quote

Есть ли такой патч для версии 6.7 ?
Именно этот, судя по исходному коду 6.7 не подойдет.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu Nov 15, 2007 5:07 pm (спустя 1 час 58 минут; написано за 24 секунды)
   Post subject:
Reply with quote

Когда у меня появится 6.7, сделаю =)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML