Немножко подфиксил бота для Твит-PR
Вызывается с параметром тег [сколько записей смотреть на предмет твиттерчан, по умолчанию 100]
Типа
perl script.pl followfriday 80
— пролистает 80 последних записей ленты и вычленит из них все встречающиеся ники, которые потом поделит на посты до 140 символов.
Запись в кроне, соответственно —
# пятница
10 16 * * 5 perl script.pl followfriday
# понедельник
10 16 * * 1 perl script.pl sexymonday
# среда
10 16 * * 3 perl script.pl tinyfriday
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Easy;
use URI::Escape;my $login = q[skazkin];
my $password = q[derпароль];
my $num_timeline = $ARGV[1] ? $ARGV[1] : 100;
my $href = «http://twitter.com/statuses/friends_timeline.xml?count=$num_timeline»;exit if !$ARGV[0];
my $message_dummy = «#».$ARGV[0]." ";my (@posts, %tmp, @people);
my $lenta = callTwitter ({href=>$href});
while ($lenta->{content} =~ /(@[a-z0-9_]+)/ig){
push (@people, $1) if $1 ne q[@].$login;
}
@people = grep (!$tmp{$_}++, @people);while ($#people != -1){
my $msg = $message_dummy;
while (length $msg < 140){
last if $#people == -1;
my $name = shift @people;if((length $name) + (length $msg) > 140){
push (@people, $name);
last;
}
$msg .= $name.q[ ];
}
push (@posts,$msg);
}$href = «http://twitter.com/statuses/update.xml»;
foreach (@posts){
my $status = callTwitter ({
href => $href,
post => q[status=].uri_escape ($_)
});
print qq[http://twitter.com/skazkin/status/$1\n] if $status->{content} =~ /(\d+)/; sleep (1);
}sub callTwitter {
my $params = shift;
my ($result, $retcode, $curl) = ('false',undef,undef);
$curl = new WWW::Curl::Easy;
$curl->setopt (CURLOPT_URL, $params->{href});
$curl->setopt (CURLOPT_USERPWD, $login.q[:].$password);
$curl->setopt (CURLOPT_POST, 1) if $params->{post};
$curl->setopt (CURLOPT_POSTFIELDS, $params->{post}) if $params->{post};
open (my $tmp_for_curl, ">", \$result);
$curl->setopt (CURLOPT_FILE,$tmp_for_curl);
$retcode = $curl->perform;
return {retcode => $retcode, content => $result};
}