Набор скриптов для анализа сайта
24 сентября 2010
Решил поделиться своими старенькими наработками, которые я использовал около года назад на одном из своих блогов. Архив со всеми скриптами находится здесь. Далее по тексту я вкратце расскажу о его содержимом.
После распаковки архива вы увидите три каталога.
1. Каталог ./counter
Содержит скрипты на Perl, предназначенные для создания картинки-информера. Основной скрипт здесь — это cnt.pl.
use GD;
use strict;
# cnt.pl
# (c) Alexandr A 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. Вот наиболее интересная его часть:
$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. Для примера давайте возьмем Рамблер:
# rambler-pages.pl
# (c) 2009 Alexandr A 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, и скрипт будет писать на диск логи вроде таких:
Для того, чтобы логи лучше воспринимались, требуется анализатор, до разработки которого у меня не дошли руки. Используйте этот скрипт только если перед вами стоит очень необычная аналитическая задача. Честно говоря, с лету я не могу такую придумать и вообще плохо помню, зачем это писалось. Не исключено, что просто от скуки.
4. Кому все это нужно?
Данные скрипты можно использовать для создания своей кнопки-информера, отображающей пузомерки сайта, его посещаемость и другие параметры. Можно создать собственный сервис анализа сайтов типа pr-cy.ru. Можно анализировать конкурентов или следить за своими сайтами. Надеюсь, кому-нибудь они пригодятся.
Важно помнить, что писалось все это давно и на скорою руку, потому в коде практически нет комментариев, все это написано криво и местами может не работать или работать не совсем правильно. Будьте бдительны.
Метки: Perl.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.