Phil Windley's Technometria | A Retweeting Twitterbot in Perl
#!/usr/bin/perl -w
use strict;
use Net::Twitter;
use DateTime;
use DateTime::Format::HTTP;
use Fcntl;
use SDBM_File;
use File::Copy;
my $dt = DateTime->now;
$dt->subtract( minutes => 60);
my $class = 'DateTime::Format::HTTP';
my $since = $class->format_datetime($dt);
my $today_string = $dt->strftime("%M");
my $seen_dir = "./seen";
my $seen_file = "$seen_dir/latest.db";
my $backup_file = "$seen_dir/$today_string.db";
# make a backup of the hash and open it
unless(-e "$backup_file.pag") {
copy("$seen_file.pag","$backup_file.pag");
copy("$seen_file.dir","$backup_file.dir");
}
my %seen;
tie %seen, "SDBM_File", $seen_file, O_CREAT|O_RDWR, 0644 ||
die "Can't link to $seen_file, $!\n";
# set your own username and password here
my $user = 'put_your_twitter_screenname_here';
my $password = 'put_your_password_here';
my $twit = Net::Twitter->new(
username=>$user,
password=>$password,
source => "Utah Politics Retweeter",
clientname=>"UtahPolitics ReTweeter");
# find replies
my $retweets = [];
my $twit_replies =
$twit->friends_timeline({since => $since, count=>100}) ;
foreach my $reply (@{ $twit_replies }) {
my $text = $reply->{'text'};
my $id = $reply->{'id'};
my $name = $reply->{'user'}->{'screen_name'};
print ".";
if($text =~ m/utahpolitics|#utpolitics/ &&
! $seen{$id}
){
unshift @{ $retweets},
{'name' => $name,
'id' => $id,
'text' => $text
} unless $name eq $user;
}
}
print "\n";
foreach my $retweet (@{ $retweets }) {
print ".";
my $status = "(@".$retweet->{'name'}.") ".
$retweet->{'text'};
my $code = $twit->update($status);
$seen{$retweet->{'id'}} = 1 if $code;
}
print "\n";
1;
No comments:
Post a Comment