Quick Ruby script to get libnotify desktop notifications of the current vote tally of your talk
#!/usr/bin/env ruby | |
# To add this to cron do something like this to use the ruby wrapper script: | |
# */15 8-17 * * 1-5 env DISPLAY=:0.0 /home/jnronall/.rvm/wrappers/ruby-2.1.1/ruby /home/jnronall/bin/code4lib-vote > $HOME/tmp/code4lib-vote-cron.log 2>&1 | |
require 'httpclient' | |
require 'json' | |
require 'date' | |
require 'libnotify' | |
require 'slop' | |
require 'fileutils' | |
opts = Slop.parse do |o| | |
o.banner = %Q{ | |
Usage: code4lib-vote --vote 33 --mytalk 655 --top 20 --timeout 15 --icon /home/jnronall/bin/images/ballot-box.png | |
} | |
o.integer '--vote', 'Number identifying vote', default: 39 | |
o.integer '--mytalk', 'Number identifying your talk', default: 869 | |
o.integer '--top', 'Number of results to show in notification', default: 10 | |
o.integer '--timeout', 'Number of seconds to show the desktop notification for', default: 60 | |
o.string '--icon', 'Path to the icon to show in the notification area', default: '/home/jnronall/bin/images/ballot-box.png' | |
o.on '--help', 'help', 'Show as: String,this help message' | |
end | |
if opts[:help] | |
puts opts | |
exit | |
end | |
http = HTTPClient.new | |
response = http.get "http://vote.code4lib.org/election/results/#{opts[:vote]}.json" | |
results = JSON.parse(response.body) | |
ordered_results = results.sort_by{|talk| talk['score']}.reverse | |
rank = nil | |
score = nil | |
talks_list = [] | |
ordered_results.each_with_index do |talk, index| | |
title = talk['title'].slice(0,30) | |
if talk['id'] == opts[:mytalk] | |
rank = index + 1 | |
score = talk['score'] | |
title = "<b>#{title}</b>" | |
end | |
talks_list << "#{talk['score']} #{title}" | |
end | |
top_talks = talks_list.slice(0,opts[:top]) | |
message = %Q|<a href="http://vote.code4lib.org/election/results/#{opts[:vote]}">Code4Lib Vote</a>| | |
rank_message = "\nRANK: #{rank}\nscore: #{score}\nhigh score: #{ordered_results.first['score']}\n\n" | |
message << rank_message | |
top_ten = top_talks.slice(0,10) | |
# top_rest = top_talks.slice(10,top_talks.length) | |
message << top_ten.join("\n") | |
# message << "\n\n--------------\n\n" | |
# message << top_rest.join("\n\n") | |
puts message | |
# Change this to whatever desktop notification system you use | |
Libnotify.show(body: message, :timeout => opts[:timeout], icon_path: opts[:icon]) | |
log_directory = "~/tmp/" | |
logfile = File.expand_path(File.join(log_directory, '/code4lib-vote.log')) | |
FileUtils.mkdir_p log_directory unless File.exist? log_directory | |
File.open(logfile, 'a') do |fh| | |
fh.puts DateTime.now.to_s | |
fh.puts message | |
fh.puts "\n----------------\n" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment