# Don't look at me. I'm ugly. $: << "/Users/max/.rvm/gems/macruby/nightly/gems/macruby-json" require 'json' require 'uri' framework 'Cocoa' def get_average_color(image) url = NSURL.URLWithString(image) image_source = CGImageSourceCreateWithURL(url, nil) @cgimage = CGImageSourceCreateImageAtIndex(image_source, 0, nil) @ciimage = CIImage.imageWithCGImage(@cgimage) avg = CIFilter.filterWithName("CIAreaAverage") avg.setDefaults avg.setValue(@ciimage, forKey:'inputImage') output = avg.valueForKey('outputImage') bit = NSBitmapImageRep.alloc.initWithCIImage(output) color = bit.colorAtX(0, y:0) [color.redComponent, color.greenComponent, color.blueComponent] end species_names = ARGV species_names = species_names.split("\n") color_map = {} species_names.each do |species| query = URI.escape(%Q["#{species}"]) url = NSURL.URLWithString("http://ajax.googleapis.com/ajax/services/search/images?q="+query+"&imgtype=photo&v=1.0") # Getting strange string interpolation errors html = NSString.stringWithContentsOfURL(url, encoding:NSUTF8StringEncoding, error:nil) scrape = JSON.parse(html) next if scrape["responseData"]["results"].empty? thumb_urls = scrape["responseData"]["results"].map{|hit| hit["tbUrl"]} colors = thumb_urls.map do |thumb| get_average_color(thumb) end sum = [0.0,0.0,0.0] colors.each do |element| sum[0] += element[0] sum[1] += element[1] sum[2] += element[2] end color_map[species] = sum.map{|s|s/colors.size}.map{|s|(s*255).to_i.to_s(16).rjust(2,'0')}.join.upcase end sf = File.open('species.html', 'w') sf.puts "Some Species" color_map.each_pair do |key, value| sf.puts "
#{key}
" end sf.puts ""