Skip to content

Instantly share code, notes, and snippets.

@glurp
Last active October 30, 2020 12:31
Show Gist options
  • Save glurp/100cb2ce29c7443d2e3db8b96f115d34 to your computer and use it in GitHub Desktop.
Save glurp/100cb2ce29c7443d2e3db8b96f115d34 to your computer and use it in GitHub Desktop.
set wallpaper from reddit EarthPorn, in ruby
#
# SCHTASKS /Create /F /TN wallpaper-from-reddit /TR "C:\usr\bin\ep.bat" /SC HOURLY
# ep.bat :
# rubyw C:\usr\bin\earthporn-to-wallpaper.rb
path="c:/usr/www/images/ep"
fr=path+"/fpersist.rb"
if ARGV.first == "delete"
puts "Delete all jpeg file in '#{path}' directories ..."
Dir.glob(path+"/*.jpg").each {|fn| File.delete(fn) }
File.delete(fr) if File.exist?(fr)
ARGV.shift
end
require 'open-uri'
require 'ruby_reddit_api' # gem install ruby_reddit_api
####################### Windows stuff
require 'Win32API' # for beep and set wallpaper on desktop
Beep = Win32API.new("kernel32", "Beep", ["I", "I"], 'I')
$systemParametersInfo = Win32API.new('user32', 'SystemParametersInfo', ['I','I','P','I'], 'I')
SPI_SETDESKWALLPAPER = 20
SPIF_UPDATEINIFILE = 0x1
SPIF_SENDWININICHANGE = 0x2
def winWall(filename)
$systemParametersInfo.call(SPI_SETDESKWALLPAPER, 0, filename, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE)
end
# get WEB binary data, write file in binary format ('rb/wb' read-binary/write-binary ==> specific windows)
def binary_get_write(url,filename,min_size=0,max_size=0)
open(url,"rb") { |con|
data=con.read
if data.size>=min_size && data.size<= max_size
open(filename,"wb") { |f| f.write(data) }
end
}
true
rescue Exception => e
puts "\nError getting #{url} to file #{filename} => #{e}"
false
end
##################### M a i n #######################
th=nil
n=0
lknown={}
#===== Load list of file already scanned
( lknown=eval(File.read(fr)) if File.exist?(fr) ) rescue puts "error reading memory #{$!}"
Beep.call(4000, 30)
Reddit::Api.new.browse('earthPorn').each do |r|
print "."
url= r.url
next unless url =~ /\.jpg$/
filename=path + "/" +File.basename(URI(url).path.downcase)
next if lknown[filename]
lknown[filename]=1
next if File.exist?(filename)
ok=binary_get_write(url,filename,130_000,3000_000)
if ok && File.exist?(filename)
n+=1
puts "\n#{n} #{filename} ==> #{File.size(filename)/1024} KB"
th=Thread.new(filename) {|fn| sleep 0.1 ; winWall(fn) }
end
end
th.join if th
File.write(fr,lknown.to_a[-200..-1].to_h.inspect) # update memory of file scanned, LRU
Beep.call(3000, 30)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment