I posted an entry earlier with a little statistics gathering program I had that used WWW::UsePerl::Journal. That module's been updated, and I've cleaned up my changes slightly, so here's the patches again, plus two programs I have that use them. (I think I forgot one of the patches in my original post, anyway. You have to patch WWW::UsePerl::Journal::Entry as well.)
#!/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();
# Originally I took the date of the first and last entries, but
# actually I want the current date as an endpoint. (If you stop
# posting, that means your average rate should gradually decrease
# as time progresses.)
my $firstdate = $journal->entry($entries[0])->date;
my $numentries = scalar @entries;
use Time::Piece;
my $lastdate = localtime;
my $interval = $lastdate - $firstdate;
my $per_day = $numentries / $interval->days;
print "$user has written $per_day entries per day\n";
}
#!/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->entryhash;
my %count;
foreach my $entrynum (sort keys %entries)
{
my $entry = $entries{$entrynum};
my $date = $entry->date;
my($month, $year) = ($date->mon, $date->year);
$month = sprintf "%02d", $month;
$count{"$year$month"}++;
}
foreach my $month (sort keys %count)
{
print "$month:\t$count{$month}\n";
}
}
--- /usr/local/perl580/lib/site_perl/5.8.0/WWW/UsePerl/Journal.pm 2002-09-26 04:51:29.000000000 -0500
+++ WWW/UsePerl/Journal.pm 2002-09-27 10:24:17.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,
);
}
@@ -203,7 +212,7 @@
my %entries = $self->entryhash;
my @IDs;
- foreach (sort keys %entries) {
+ foreach (sort {$a <=> $b} keys %entries) {
$IDs[$#IDs+1] = $_;
}
return @IDs;
- WWW::UsePerl::Journal::Entry
--- /usr/local/perl580/lib/site_perl/5.8.0/WWW/UsePerl/Journal/Entry.pm 2002-03-03 14:13:05.000000000 -0600
+++ WWW/UsePerl/Journal/Entry.pm 2002-09-27 10:00:49.000000000 -0500
@@ -1,4 +1,4 @@
-package WWW::UsePerl::Journal::Entry;
+package WWW::UsePerl::Journal::Entry; # -*- perl -*-
=head1 NAME
@@ -15,6 +15,7 @@
use Data::Dumper;
use Carp;
use WWW::UsePerl::Journal;
+use Time::Piece;
our $VERSION = '0.03';
use constant UP_URL => 'http://use.perl.org';
@@ -58,6 +59,10 @@
sub date
{
my $self = shift;
+ unless (defined $self->{date})
+ {
+ $self->get_content;
+ }
return $self->{date};
}
@@ -132,6 +137,27 @@
if $content =~
m#Sorry, there are no journal entries
found for this user. #ismx;
+ $content =~ m{
+
((Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)
+ [^<]*)
+ }x;
+ my $datestring = $1;
+ $datestring =~ m/(.*day)\s+(.*)\s+(\d+),\s+(\d+)/;
+ my($day, $month, $dateofmonth, $year) = ($1, $2, $3, $4);
+ $content =~ m{
+ ((\d+):(\d+)\s+[AP]M)
+ }x;
+ my $timestring = $1;
+ $timestring =~ m/(\d+):(\d+)\s+([AP]M)/;
+ my($hour, $minute, $ampm) = ($1, $2, $3);
+ $hour += 12 if $ampm eq "PM";
+ $hour = 0 if $hour == 24;
+ $month = substr($month, 0, 3);
+ $day = substr($day, 0, 3);
+ my $formatteddate = "$day $month $dateofmonth $hour:$minute:00 $year";
+ my $dateseconds = HTTP::Date::str2time($formatteddate);
+ my $date = Time::Piece->new($dateseconds);
+ $self->{date} = $date;
$content =~
m#.*?$ID\n]\n\s*\n\s*\n\s*(.*?)
\n\s*