#!/usr/bin/perl -w # Author: Chris Ball # Draws a pie chart based on livejournal.com 'mood' entries. use strict; use IO::Socket; use GD::Graph::pie; my $ljsock = IO::Socket::INET->new( PeerAddr => "216.231.32.123", PeerPort => "80", Proto => "tcp", Type => SOCK_STREAM) or die "Couldn't connect to the livejournal.com web server : $@\n"; # Declare some vars. my ($user, $pass, $key, $value, $total); my $counter = 1; my (@moods, @items, @data); my (%moodhash, %newhash); open MOODS, ') { my ($key, $value) = split; $moodhash{$key} = $value; } print "Enter your livejournal username: "; $user = ; chomp $user; print "Enter your livejournal password: "; $pass = ; chomp $pass; # Set up before printing to ljsock. my $string = "mode=getevents&user=$user&password=$pass&selecttype=syncitems"; my $line1 = "POST /cgi-bin/log.cgi HTTP/1.0\r\n"; my $line2 = "Host: www.livejournal.com\r\n"; my $line3 = "Content-type: application/x-www-form-urlencoded\r\n"; my $line4 = "Content-length: " . length($string) . "\r\n"; my $line5 = "\r\n"; print $ljsock $line1 . $line2 . $line3 . $line4 . $line5 . $string. "\r\n\r\n"; my $reply = <$ljsock>; print "Downloading journal entries...\n"; while(<$ljsock>) { print; if (/^current_moodid$/) { <$ljsock>; my $found = <$ljsock>; chomp $found; push @moods, $found; } } # Count the number of occurences of the value of $moodhash into $newhash map { $newhash{$_}++, $_ } (grep ($moodhash{$_},@moods)); # Build GD's two dimensional array. my $i = 0; for (keys %newhash) { $data[0][$i] = $moodhash{$_}; $data[1][$i] = $newhash{$_}; $i++; } print "Plotting graph now...\n"; # Plot. Change dimensions if you want. Make sure gd was built with PNG support. my $graph = GD::Graph::pie->new(640, 480); $graph->set( x_label => 'Mood', y_label => 'Frequency', title => 'Livejournal - Moods by Frequency.', y_max_value => 10, Y_tick_number => 10, y_label_skip => 2 ); my $gd = $graph->plot(\@data); open(IMG, '>mood.png') or die $!; binmode IMG; print IMG $gd->png; print "Done. Saved to mood.png\n";