#!/usr/bin/perl -w =head1 NAME okbiff - check if you have mail on OkCupid.com =head1 SYNOPSIS okbiff =head1 DESCRIPTION Logs into your OkCupid account and tells you how much new mail you have waiting then logs out again. So you can compulsively check for messages without feeling like you're compulsively checking for messages. Ok? $ okbiff You've got 1 new message, ok? =head1 FILES F<~/.okbiff> The okbiff configuration file. It looks like this. User: Your_Username Password: Your_Password =head1 AUTHOR XWRN =head1 VERSION 20080909 =head1 SEE ALSO biff(1) =head1 OK? Ok. =cut my $Have_Mail_Regex = qr/\bYou have (\d) new messages?\b/i; my $No_Mail_Regex = qr/\bYou have no new messages\b/i; use strict; use WWW::Mechanize; our $VERSION = 20080909; my $Conf_File = "$ENV{HOME}/.okbiff"; my %Conf = read_conf(); my $mech = WWW::Mechanize->new(cookie_jar => {}, agent => "okbiff/$VERSION" ); $mech->get("http://www.okcupid.com/match"); $mech->submit_form( form_name => "loginf", fields => { username => $Conf{user}, password => $Conf{password} }, button => 'submit' ); my $home = $mech->content; my $num_mail; if( my @mail_links = $mech->find_all_links(url => '/mailbox?folder=1') ) { my($mail_link) = grep { defined $_->attrs->{title} and $_->attrs->{title} =~ /read your mail/i; } @mail_links; $num_mail = $mail_link->text; } else { die "Couldn't find the mailbox text. Maybe I couldn't log in.\n"; } printf "You've got %d new message%s, ok?\n", $num_mail, $num_mail == 1 ? '' : 's'; $mech->follow_link( text_regex => qr/log\s*out/i ); sub read_conf { my %conf = (); open CONF, $Conf_File or die "Can't open configuration file $Conf_File: $!"; while(my $line = ) { chomp $line; my($key, $val) = split /:\s*/, $line, 2; $conf{lc $key} = $val; } close CONF; die "Missing username in config file.\n" unless $conf{user}; die "Missing password in config file.\n" unless $conf{password}; return %conf; }