pricecharts

track prices of consumer electronics
Log | Files | Refs | README

commit 7dd886c5c1e506d3dfee5d4155cd236f3ce212a1
parent 7b17ed980bd09375bb3aa5133818ec31d7382ee6
Author: Kyle Milz <kyle@getaddrinfo.net>
Date:   Thu, 19 Mar 2015 03:06:27 -0600

gen_static: add a function and simplify

Diffstat:
Mgen_static | 137++++++++++++++++++++++++++++++++++---------------------------------------------
1 file changed, 59 insertions(+), 78 deletions(-)

diff --git a/gen_static b/gen_static @@ -17,11 +17,12 @@ getopts("v", \%args); $| = 1 if ($args{v}); my $cfg = get_config(); -my $dbh = get_dbh($cfg->{"http"}, undef, $args{v}); +my $dbh = get_dbh($cfg->{http}, undef, $args{v}); my $work_dir = $cfg->{http}{chroot} . $cfg->{http}{htdocs}; print "info: working dir: $work_dir\n" if ($args{v}); +# rock a new template my $config = { INTERPOLATE => 1, POST_CHOMP => 1, @@ -32,94 +33,30 @@ my $config = { my $template = Template->new($config) || die Template->error() . "\n"; -# xmkdir $cfg->{http} . "/manufacturers"; -my $sql = "select distinct manufacturer from products"; -# my $manuf_sth = $dbh->prepare($sql); -# $manuf_sth->execute(); -# while (my ($manufacturer) = $manuf_sth->fetchrow_array()) { -my $manufacturers = $dbh->selectall_arrayref($sql); -my @manufacturer_list; -for my $manufacturer (@$manufacturers) { - $manufacturer = $manufacturer->[0]; - my $manuf_lc = lc($manufacturer); - - $sql = "select part_num, manufacturer, description from products where manufacturer = ?"; - my $part_nums = $dbh->selectall_arrayref($sql, undef, $manufacturer); - printf("info: manufacturers/$manuf_lc.html: %i products\n", - scalar @$part_nums) if ($args{v}); +# manufacturers.html, manufacturers/* +my $manufacturers_sql = "select distinct manufacturer from products"; +my $parts_sql = "select part_num, manufacturer, description from products where manufacturer = ?"; +my $m = gen_link_page($manufacturers_sql, $parts_sql, "manufacturers", "Manufacturers"); - my $vars = { - name => $manufacturer, - products => $part_nums, - }; - $template->process("chart_list.tt", $vars, - "manufacturers/$manuf_lc.html"); # error checking! - - push @manufacturer_list, [$manufacturer, $manuf_lc]; -} - -# manufacturers.html -my $vars = { - name => "Manufacturers", - name_lc => "manufacturers", - num_manufacturers => scalar @manufacturer_list, - manufacturers => \@manufacturer_list, -}; -print "info: manufacturers.html\n"; -$template->process("link_list.tt", $vars, "manufacturers.html") - || die "template: " . $template->error() . "\n"; - - -# vendors/*.html -$sql = "select distinct vendor from prices"; -my $vendors = $dbh->selectall_arrayref($sql); -my @vendor_list; -for my $vendor (@$vendors) { - $vendor = $vendor->[0]; - my $vendor_lc = lc($vendor); - - $sql = "select distinct part_num from prices where vendor = ?"; - my $part_nums = $dbh->selectall_arrayref($sql, undef, $vendor); - printf("info: vendors/$vendor_lc.html: %i products\n", - scalar @$part_nums) if ($args{v}); - - my $vars = { - name => $vendor, - products => $part_nums, - }; - $template->process("chart_list.tt", $vars, - "vendors/$vendor_lc.html"); # error checking! - - push @vendor_list, [$vendor, uri_escape($vendor_lc)]; -} - -# vendors.html -$vars = { - name => "Vendors", - name_lc => "vendors", - num_manufacturers => scalar @$vendors, - manufacturers => \@vendor_list, -}; -print "info: vendors.html\n"; -$template->process("link_list.tt", $vars, "vendors.html") - || die "template: " . $template->error() . "\n"; +# vendors.html, vendors/* +my $vendor_sql = "select distinct vendor from prices"; +$parts_sql = "select distinct part_num from prices where vendor = ?"; +my $v = gen_link_page($vendor_sql, $parts_sql, "vendors", "Retailers"); # index.html -$sql = "select count(part_num) from products"; +my $sql = "select count(part_num) from products"; my ($p) = $dbh->selectrow_array($sql); -$sql = "select count(distinct vendor) from prices"; -my ($v) = $dbh->selectrow_array($sql); - +# get a list of products added within the last week my $time = time - (7 * 24 * 60 * 60); $sql = "select description from products where first_seen > $time"; my $new_products = $dbh->selectall_arrayref($sql); my $n = @$new_products; -# print "info: manufacturers, $p products ($n new), $v vendors\n" if ($args{v}); -$vars = { +print "info: $m manufacturers, $p products ($n new), $v vendors\n" if ($args{v}); +my $vars = { num_vendors => $v, - num_manufacturers => scalar @$manufacturers, + num_manufacturers => $m, num_products => $p, num_new => $n, new_products => $new_products, @@ -129,3 +66,47 @@ $template->process("index.tt", $vars, "index.html") || die "template: " . $template->error() . "\n"; $dbh->disconnect(); + +# generate a page of links to pages of products +sub gen_link_page +{ + my $type_sql = shift; + my $parts_sql = shift; + my $dir_prefix = shift; + my $case_normal = shift; + + xmkdir "$work_dir/$dir_prefix"; + + my $results = $dbh->selectall_arrayref($type_sql); + my @manicured_list; + for my $result (@$results) { + $result = $result->[0]; + my $result_lc = lc($result); + + my $part_nums = $dbh->selectall_arrayref($parts_sql, undef, $result); + printf("info: $dir_prefix/$result_lc.html:\t%i products\n", + scalar @$part_nums) if ($args{v}); + + my $vars = { + name => $dir_prefix, + products => $part_nums, + }; + $template->process("chart_list.tt", $vars, + "$dir_prefix/$result_lc.html"); # error checking! + + push @manicured_list, [$result, $result_lc]; + } + + # manufacturers.html + my $vars = { + name => $case_normal, + name_lc => $dir_prefix, + num_manufacturers => scalar @manicured_list, + manufacturers => \@manicured_list, + }; + print "info: $dir_prefix.html\n" if ($args{v}); + $template->process("link_list.tt", $vars, "$dir_prefix.html") + || die "template: " . $template->error() . "\n"; + + return scalar @manicured_list; +}