#!/usr/bin/perl -w ########################################### # buddy - Keep track of buddies with # Yahoo! Search # Mike Schilli, 2005 (m@perlmeister.com) ########################################### use strict; my $BUDDY_FILE = "$ENV{HOME}/.buddy"; my $EMAIL_TO = 'meldung@ich.lausche.com'; use Sysadm::Install qw(:all); use Yahoo::Search; use Text::Wrap; use Cache::FileCache; use Log::Log4perl qw(:easy); use Getopt::Std; use Mail::Send; getopts("v", \my %o); Log::Log4perl->easy_init($o{v} ? $DEBUG : $WARN); sub mailadd; my @buddies = (); plough sub { return if /^\s*#/; chomp; push @buddies, $_; }, $BUDDY_FILE; my $cache = Cache::FileCache->new({ namespace => "Buddy", default_expires_in => 3600*24*30, }); my $search = Yahoo::Search->new( AppId => "linux_magazin", Count => 25, ); for my $buddy (@buddies) { DEBUG "Search request for '$buddy'"; my @results = $search->Results( Doc => qq{"$buddy"} ); my $buddy_printed = 0; DEBUG scalar @results, " results"; for my $result (@results) { if($cache->get($result->Url())) { DEBUG "Found in cache: ", $result->Url(); # Refresh if found $cache->set($result->Url(), 1); next; } mailadd "\n\n### $buddy ###" unless $buddy_printed++; mailadd $result->Url(); $cache->set($result->Url(), 1); mailadd fill(" ", " ", $result->Summary()), ""; } } mailsend(); ########################################### sub mailadd { ########################################### our $maildata; $maildata .= "$_\n" for @_; } ########################################### sub mailsend { ########################################### our $maildata; return unless defined $maildata; DEBUG "Sending email: $maildata"; my $msg = Mail::Send->new(); $msg->to($EMAIL_TO); $msg->subject("Buddy Watch News"); my $fh = $msg->open; print $fh $maildata; close $fh; }