Last active
October 30, 2020 12:31
-
-
Save glurp/100cb2ce29c7443d2e3db8b96f115d34 to your computer and use it in GitHub Desktop.
set wallpaper from reddit EarthPorn, in ruby
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# 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