#!/usr/bin/perl -Tw # quickrep-graph.pl # # Converts output from quickrep.pl # into a PNG bar chart to # show how many of your nodes have a given reputation # # Tom Hukins (tomhukins on Perl Monks) - 20011022 # # This program is free software; you can redistribute it and/or modify # it under the same terms as Perl itself use strict; use GD::Graph::bars (); use XML::Simple qw(XMLin); { # Allow the user to specify an alternative output filename on the # command line my $output_filename = shift || 'quickrep.png'; my($ratings, $username) = &derive_stats(); &draw_graph($ratings, $username, $output_filename); } sub derive_stats { my $xml = XMLin('./quickrep.xml') or die "$!"; my $username = $xml->{INFO}{foruser}; my @ratings; # Counts the number of nodes with a given rating while (my($id, $node) = each %{ $xml->{NODE} }) { @ratings[ $node->{reputation} ]++; } my $max_reputation = scalar(@ratings) - 1; return([ [0..$max_reputation], [@ratings] ], $username); } sub draw_graph { my($ratings, $username, $output_filename) = @_; my $graph = new GD::Graph::bars( 600, 400 ); $graph->set( x_label => 'Reputation', y_label => 'Number of Nodes', title => "PerlMonks Nodes by Reputation for $username" ) or die "$!"; my $gd = $graph->plot( $ratings ); open(IMG, ">$output_filename") or die "$!"; binmode IMG; print IMG $gd->png; close IMG; }