pricecharts

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

commit 11f4ba566f2f73bfba6b842c271b204e7d376130
parent 580f92aaba9842dfb4d1642090115fb14058d0e1
Author: Kyle Milz <kyle@getaddrinfo.net>
Date:   Wed, 22 Oct 2014 22:16:52 -0600

site_gen: use SVG module directly

Diffstat:
Mhtml/search.html | 5+++--
Msite_gen.pl | 65++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
2 files changed, 59 insertions(+), 11 deletions(-)

diff --git a/html/search.html b/html/search.html @@ -2,7 +2,8 @@ <p>Found <b>[% num_results %]</b> search results for <b>[% query %]</b>:</p> - [% FOREACH variable IN results %] - [% variable %]<br> + [% FOREACH part_num IN results %] + <object data="/svg/[% part_num %].svg" type="image/svg+xml"> + </object> [% END %] [% END %] diff --git a/site_gen.pl b/site_gen.pl @@ -4,8 +4,7 @@ use strict; use warnings; use File::Copy; -use GD::SVG; -use GD::Polyline; +use SVG; use Template; use POSIX; @@ -47,6 +46,9 @@ copy("html/pricechart.css", "www/htdocs/pricechart.css"); print $log strftime "%b %e %Y %H:%M ", localtime; +my $svg_dir = "$cfg->{general}{var}/www/htdocs/svg"; +mkdir $svg_dir; + if ($args{p}) { gen_chart($args{p}); print $log "$args{p} generated\n"; @@ -61,13 +63,58 @@ sub gen_chart my $part_num = shift; vprint("$part_num:\n"); - my $image = new GD::SVG::Image(800, 200); - my $polyline = new GD::Polyline; - - $query = "select * from prices where part_num = ?"; - my $prices = $dbh->selectall_arrayref($query, undef, $part_num); - - vprintf("\t# prices = %i\n", scalar @$prices); + $query = "select min(date) from prices where part_num = ?"; + my $x_min = $dbh->selectrow_array($query, undef, $part_num); + + $query = "select max(date) from prices where part_num = ?"; + my $x_max = $dbh->selectrow_array($query, undef, $part_num); + + $query = "select min(price) from prices where part_num = ?"; + my $y_min = $dbh->selectrow_array($query, undef, $part_num); + + $query = "select max(price) from prices where part_num = ?"; + my $y_max = $dbh->selectrow_array($query, undef, $part_num); + + vprintf("\tdomain: $x_min - $x_max\n"); + vprintf("\trange: $y_min - $y_max\n"); + + my $svg = SVG->new(width => 800, height => 200); + + $query = "select distinct vendor from prices where part_num = ?"; + my $vendors = $dbh->selectcol_arrayref($query, undef, $part_num); + vprintf("\tvendors: "); + + for (@$vendors) { + $query = "select date from prices where " . + "part_num = ? and vendor = ? order by date"; + my $dates = $dbh->selectcol_arrayref($query, undef, + $part_num, $_); + vprintf("\tdates found: " . scalar @$dates . "\n"); + $query = "select price from prices where " . + "part_num = ? and vendor = ? order by date"; + my $prices = $dbh->selectcol_arrayref($query, undef, + $part_num, $_); + vprintf("\tprices found: " . scalar @$prices . "\n"); + + my $points = $svg->get_path(x => $dates, y => $prices, + -closed => "false"); + + $svg->path( + %$points, + id => $_, + style => { + 'fill-opacity' => 0, + 'fill' => 'green', + 'stroke' => 'rgb(250, 123, 123)' + } + ); + } + + $svg->text(id => 'l1', x => 10, y => 30)->cdata($part_num); + + open my $svg_fh, ">", "$svg_dir/$part_num.svg" or die $!; + print $svg_fh $svg->xmlify; + close $svg_fh; } close $log;