Here's a little goody I cooked up:
#!/usr/local/bin/perl5.8.0 -- # -*- perl -*-
use warnings;
use strict;
use lib "$ENV{HOME}";
use WWW::UsePerl::Journal;
my($user) = @ARGV;
foreach my $user (@ARGV)
{
my $journal = WWW::UsePerl::Journal->new($user);
my @entries = $journal->entryids();
my($firstdate, $lastdate) = map {$journal->entry($_)->date} @entries[0,-1];
my $numentries = scalar @entries;
use Time::Piece;
$lastdate = localtime;
my $interval = $lastdate - $firstdate;
my $per_sec = $numentries / $interval->days;
print "$user has written $per_sec entries per day\n";
}
Wouldn't it be great if it worked? Well, with this little diff to WWW::UsePerl::Journal, it can. (Note, there are some artifacts I left in from my first stab, and never bothered to take out.)
--- /usr/local/perl580/lib/site_perl/5.8.0/WWW/UsePerl/Journal.pm 2002-03-03 14:09:14.000000000 -0600
+++ WWW/UsePerl/Journal.pm 2002-09-05 10:21:40.000000000 -0500
@@ -1,4 +1,6 @@
-package WWW::UsePerl::Journal;
+package WWW::UsePerl::Journal; # -*- perl -*-
+
+BEGIN {warn "Using local copy of WWW::UsePerl::Journal!"}
=head1 NAME
@@ -30,6 +32,7 @@
use HTTP::Request::Common;
use Data::Dumper;
use Carp;
+use Time::Piece;
use WWW::UsePerl::Journal::Entry;
@@ -171,19 +174,25 @@
my $content = $self->{ua}->request(
GET UP_URL . "/journal.pl?op=list&uid=$UID")->content;
die "could not create entry list" unless $content;
- my @lines = split /\n/, $content;
my %entries;
- foreach my $line (@lines){
- next unless $line =~ m#~$user/journal/#ism;
- $line =~ m#~$user/journal/(\d+)">(.*?)#ism;
-
+ my $count = 0;
+ while ( $content =~ m{~$user/journal/(\d+).>(.*?)\s+([\d.\s:]+)}ig)
+ {
next unless defined $1;
- $entries{$1} = WWW::UsePerl::Journal::Entry->new(
+ my($id, $subject, $datestr) = ($1, $2, $3);
+ $datestr =~ m/(\d+).(\d+).(\d+)\s+(\d+):(\d+)/;
+ my($year, $month, $dateofmonth, $hour, $minute) =
+ ($1, $2, $3, $4, $5);
+ my $formatteddate =
+ "$year-$month-$dateofmonth $hour:$minute:00";
+ my $date = Time::Piece->new(HTTP::Date::str2time($formatteddate));
+ $entries{$id} = WWW::UsePerl::Journal::Entry->new(
j => $self,
user => $user,
- id => $1,
- subject => $2,
+ id => $id,
+ subject => $subject,
+ date => $date,
);
}
@@ -200,10 +209,11 @@
sub entryids {
my $self = shift;
$self->{_entryids} ||= do {
+ # The problem here is that %entries is thrown away.
my %entries = $self->entryhash;
my @IDs;
- foreach (sort keys %entries) {
+ foreach (sort {$a <=> $b} keys %entries) {
$IDs[$#IDs+1] = $_;
}
return @IDs;
@@ -266,7 +276,7 @@
Required before posting can occur, takes the password
-=cut
+n=cut
sub login
{
There are some other fun date-related stunts I've been pulling, too. I'm watching you guys! ;) (Pudge, I presume this kind of thing is not a bandwidth problem, but if it is, tell me and I'll stop. If it were a problem, I guess it would only be for persons like TorgoX, who as of this morning has written 1.89954616054286 entries per day. :)
Oh, and don't call $journal->login, or you'll change the format of all the dates and mess up the parsing. Plus, a journal object is tied to a user which is presumed to be you, but in this case it may not be. (It would be nice to see WWW::UsePerl::User objects which could be passed to the WWW::UsePerl::Journal constructor, and on which you could call ->fans, ->freaks, etc.)