Решил поделиться своими старенькими наработками, которые я использовал около года назад на одном из своих блогов. Архив со всеми скриптами находится здесь . Далее по тексту я вкратце расскажу о его содержимом.
После распаковки архива вы увидите три каталога.
1. Каталог ./counter
Содержит скрипты на Perl, предназначенные для создания картинки-информера. Основной скрипт здесь — это cnt.pl .
use GD ;
use strict ;
# cnt.pl
# (c) Alexandr A Alexeev 2009, http://remontka.com/
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 remontka.com` ) ;
if ( $? ) {
print «google-grab returns $? n » ;
exit 7 ;
}
chomp ( my $ya = `./yandex-grab.pl remontka.com` ) ;
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://remontka.com/
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 который определяет число ссылок на сайта не количество страниц в индексе. Самый «главный» скрипт в каталоге