(no subject)

Feb 19, 2007 15:27

So, I was bored at work and wrote a ruby script to make a histogram of friend's birthdays. It's pretty fugly and pipes out to gnuplot for the graphing, but hey.
#!/usr/bin/ruby require 'xmlrpc/client' require 'net/http' require 'date' ### lj_histogram.rb by two_pi_r ### ### FOR INFORMATION & RESEARCH PURPOSES ONLY - ALL USE AT OWN RISK & RESPONSIBILITY ### Requires: Gnuplot and enough crap to get it to generate .png. ### ### Usage: ### ### CHANGE THESE VALUES, or specify them on the command line. ### $lj_user=ARGV.shift || "two_pi_r" $lj_pass=ARGV.shift || "notreal!" ## ## function for manipulating friends lists, shamelessly horked from something ## that horribly violated the TOS. But it's useful code. ## def get_friends_birthdays ret = [] request={} request["username"]=$lj_user request["password"]=$lj_pass request["includebdays"]=1 server = XMLRPC::Client.new2("http://www.livejournal.com/interface/xmlrpc") result = server.call("LJ.XMLRPC.getfriends",request) result["friends"].each do |fr| ret.push [ fr["username"],fr["birthday"] ] unless fr["type"] end return ret end print "Retrieving your friends list: " flist = get_friends_birthdays puts "#{flist.length} users." # Create the histogram array. It's 13 items long and should have default value # of 0, not nil. histo = Array.new(13) {0} months = flist.collect do |fr| month = Date.strptime(fr[1]).month rescue 0 histo[month] += 1 end gnuplot_input = %Q{ set terminal png set output "birthday_histogram.png" set xrange [0:12] set title "Birthday histogram for #$lj_user" set xlabel "Months" set xtics rotate ("Unk." 0, "Jan." 1, "Feb." 2, "Mar." 3, "Apr." 4, "May" 5, "June" 6, "July" 7, "Aug." 8, "Sept." 9, "Oct." 10, "Nov" 11, "Dec" 12) set ylabel "Num. Of Friends" unset key plot "-" w boxes } IO.popen("gnuplot -", "w") do |gp| gp.puts gnuplot_input histo.each_with_index do |b,i| gp.puts "#{i} #{b}" end gp.puts "e" end

Le Output.
Crossposted to my journal.
Previous post Next post
Up