50 lines
1.4 KiB
Perl
Executable File
50 lines
1.4 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use v5.14;
|
|
|
|
use DBI;
|
|
|
|
update2();
|
|
|
|
sub update2 {
|
|
no autovivification qw(fetch);
|
|
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=rss2html.sqlite", "", "");
|
|
$dbh->{sqlite_unicode} = 1;
|
|
|
|
my $feeds = $dbh->selectall_arrayref("select * from feeds where update_frequency is not null", { Slice => {} });
|
|
my $seconds_per_week = 86400 * 7;
|
|
for my $feed (@$feeds) {
|
|
print "feed: $feed->{id} $feed->{title}\n";
|
|
my $now = time();
|
|
my $update_time = $now - $feed->{last_update};
|
|
print "\t", "update_time: $update_time\n";
|
|
my $start = $now - 4 * $seconds_per_week;
|
|
my $items = $dbh->selectall_arrayref("select * from items where feed_id=? and issued >= ? order by issued",
|
|
{ Slice => {} },
|
|
$feed->{id}, $start,
|
|
);
|
|
my $first_issued = $items->[0]{issued} // $start;
|
|
my $total_time = $now - $first_issued;
|
|
print "\t", "total_time: $total_time\n";
|
|
my $updates_in_interval = 0;
|
|
for my $item (@$items) {
|
|
my $t = $item->{issued};
|
|
my $dt1 = $now - $t;
|
|
my $dt2 = $dt1 % $seconds_per_week;
|
|
if ($dt2 < $update_time) {
|
|
$updates_in_interval++;
|
|
}
|
|
}
|
|
# normalize to one week
|
|
$updates_in_interval *= $seconds_per_week / $total_time;
|
|
$updates_in_interval += $update_time / $seconds_per_week; # add one update per week
|
|
print "\t", "updates_in_interval: $updates_in_interval\n";
|
|
|
|
}
|
|
}
|
|
|
|
# vim: tw=0
|