← На главную

Набор скриптов для анализа сайта

Решил поделиться своими старенькими наработками, которые я использовал около года назад на одном из своих блогов. Архив со всеми скриптами находится здесь. Далее по тексту я вкратце расскажу о его содержимом.

После распаковки архива вы увидите три каталога.

1. Каталог ./counter

Содержит скрипты на Perl, предназначенные для создания картинки-информера. Основной скрипт здесь – это cnt.pl.

#!/usr/bin/perl use GD; use strict; # cnt.pl # (c) Alexandr Alexeev 2009, http://eax.me/ my $png = shift; my $log = shift; unless($png && $log) { print "usage: $0 outfile.png stat.log\n"; exit 1; } chomp(my $rss = `./feedburner-grab.pl eaxme`); if($?) { print "feedburner-grab returns $?\n"; exit 3; } #chomp(my $email = `./subscribe-grab.pl inet.thoughts.eaxme`); chomp(my $email = `./feedburner-grab.pl eaxme_email`); if($?) { print "email-grab returns $?\n"; exit 4; } chomp(my $lj = `./livejournal-grab.pl afiskon.livejournal.com`); if($?) { print "livejournal-grab returns $?\n"; exit 5; } chomp(my $twitter = `./twitter-grab.pl afiskon`); if($?) { print "twitter-grab returns $?\n"; exit 6; } my $none = "---split---"; chomp(my $pr = `./google-grab.pl eax.me`); if($?) { print "google-grab returns $?\n"; exit 7; } chomp(my $ya = `./yandex-grab.pl eax.me`); if($?) { print "yandex-grab returns $?\n"; exit 8; } open LOG, ">>$log" or die "Failed to open $log\n"; chomp(my $date = `date "+%Y-%m-%d"`); print LOG "date=$date:rss=$rss:email=$email:lj=$lj:". "twitter=$twitter:pr=$pr:ya=$ya\n"; close LOG; my $im = new GD::Image("template.png"); my $top = 3; foreach my $i ($rss, $email, $lj, $twitter, $none, $pr, $ya) { if($i ne "---split---") { $im->line(84-6*length($i), $top+10, 87, $top+10, 0); $im->string(gdSmallFont, 84-6*length($i), $top, $i, 2); $top += 10; } $top += 6; } open PNG, ">$png" or die "Failed to open $png\n"; binmode PNG; print PNG $im->png; close PNG;

Пример информера

С помощью скриптов *-grab.pl происходит определение числа rss-подписчиков на сайт, количество друзей в Twitter и LiveJournal, а также тИЦ и PR сайта. Эти скрипты не особо интересные – они просто загружают определенные веб-страницы и обрабатывают их с помощью регулярных выражений. Затем полученные цифры подставляются в картинку-шаблон. Самое сложное здесь – найти правильные координаты для вывода значений. Справа вы видите (никогда не угадаете!) пример информера.

Внимательный читатель спросит, а зачем cnt.pl пишет какие-то логи? Это сделано для того, чтобы потом можно было отследить динамику изменения числа подписчиков на сайт. За построение соответствующего графика отвечает скрипт graph.pl. Вот наиболее интересная его часть:

my $graph = GD::Graph::lines->new(1000, 600); $graph->set( x_label => decode($cp, 'Дата'), y_label => decode($cp, 'Кол-во'), title => decode($cp, 'Число подписчиков'), y_max_value => $max, ) or die $graph->error; $graph->set_legend('RSS', 'E-Mail', 'LJ', 'Twitter'); my $gd = $graph->plot(\@data) or die $graph->error; open(IMG, '>file.png') or die $!; binmode IMG; print IMG $gd->png; close IMG; my $msg = MIME::Lite->new( To => 'webmaster@example.ru', Subject => 'Graph', Type => 'multipart/mixed'); $msg->attach( Type => "text/plain; charset=$cp", Data => "Текст нашего письма. Картинка прилагается." ); $msg->attach( Type => 'image/png', Path => 'file.png', Filename => 'file.png', Disposition => 'attachment' ); $msg->send();

Первая половина кода строит график (данные подгружаются из лог-файла), вторая половина шлет этот график вебмастеру на e-mail. Осталось только прописать скрипт в crontab и ждать ежедневных/недельных/месячных отчетов.

2. Каталог ./pages-count

Здесь вы найдете скрипты, предназначенные для определения числа страниц сайта, проиндексированных различными поисковыми системами – Яндексом, Рабмлером, Google, Bing и Yahoo. Для примера давайте возьмем Рамблер:

#!/usr/bin/perl # rambler-pages.pl # (c) 2009 Alexandr Alexeev, http://eax.me/ use strict; my $url = shift; unless($url) { print "usage: $0 example.ru\n"; exit 1; } # urlencode $url =~ s/([^a-zA-Z0-9\.\-\_]{1})/sprintf("%%%02x",ord($1))/eg; $url = "http://nova.rambler.ru/srch\\?query=\\&limitcontext=0\\&filter=$url"; my $data = `wget -q $url -O -`; if((!$data) or $?) { print "failed to download\n"; exit 2; } my ($cnt) = $data =~ /(\d+)\)<\/a>(?:.{5}<span.+<\/span>)?<\/div>⏎ <ul><li><a class\=\"title n_title_2\" href/; unless($cnt) { print "failed to parse\n"; exit 3; } print "$cnt\n";

Как видите, ничего сверхъестественного. Особого внимания в этом каталоге заслуживает скрипт yahoo-links.pl, который определяет число ссылок на сайт, а не количество страниц в индексе. Самый «главный» скрипт в каталоге, all-pages.pl, определяет количество страниц сайта в индексе всех поисковиков, названных выше.

3. Каталог ./visitors

Единственный скрипт в каталоге – cnt.php. Он предназначен для сбора информации о посетителях сайта. Просто подключаем его во всех страницах с помощью include, и скрипт будет писать на диск логи вроде таких:

time=1251721248|ip=69.41.186.122|dn=example.ru|query=%2F|referer=|⏎ browser=DobroBot+%28%2Bhttp%3A%2F%2Fwww.dobrobot.com%2F%29 |⏎ uid=5838e4b8fa8f9c6ca16e0e7c7f1d5adc|

Для того, чтобы логи лучше воспринимались, требуется анализатор, до разработки которого у меня не дошли руки. Используйте этот скрипт только если перед вами стоит очень необычная аналитическая задача. Честно говоря, с лету я не могу такую придумать и вообще плохо помню, зачем это писалось. Не исключено, что просто от скуки.

4. Кому все это нужно?

Данные скрипты можно использовать для создания своей кнопки-информера, отображающей пузомерки сайта, его посещаемость и другие параметры. Можно создать собственный сервис анализа сайтов типа pr-cy.ru. Можно анализировать конкурентов или следить за своими сайтами. Надеюсь, кому-нибудь они пригодятся.

Важно помнить, что писалось все это давно и на скорою руку, потому в коде практически нет комментариев, все это написано криво и местами может не работать или работать не совсем правильно. Будьте бдительны.