diff --git a/mkbsd.rb b/mkbsd.rb new file mode 100644 index 0000000..42efbf4 --- /dev/null +++ b/mkbsd.rb @@ -0,0 +1,110 @@ +#!/usr/bin/env ruby + +# Licensed under the WTFPL License +# +# Features: +# - Downloads images from a specified JSON API +# - Creates a local 'downloads' directory to store images +# - Displays ASCII art and emoji-enhanced console output +# - Implements error handling for network requests and file operations +# - Adds a delay between downloads to avoid overwhelming the server +# +# Dependencies: +# - Ruby (tested with Ruby 2.7+) +# - Standard Library gems: +# - net/http (for HTTP requests) +# - json (for JSON parsing) +# - uri (for URL parsing) +# - fileutils (for directory operations) +# +# Usage: +# 1. chmod +x mkbsd.rb +# 2. Run the script: ./mkbsd.rb + +require 'net/http' +require 'json' +require 'uri' +require 'fileutils' + +URL = 'https://storage.googleapis.com/panels-api/data/20240916/media-1a-i-p~s' + +def delay(ms) + sleep(ms.to_f / 1000) +end + +def download_image(image_url, file_path) + uri = URI(image_url) + Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| + request = Net::HTTP::Get.new(uri) + response = http.request(request) + + if response.code == '200' + File.open(file_path, 'wb') do |file| + file.write(response.body) + end + else + puts "Failed to download image: #{response.code}" + end + end +rescue StandardError => e + puts "Error downloading image: #{e.message}" +end + +def main + uri = URI(URL) + response = Net::HTTP.get_response(uri) + + if response.code != '200' + raise "⛔ Failed to fetch JSON file: #{response.code}" + end + + json_data = JSON.parse(response.body) + data = json_data['data'] + + if !data + raise '⛔ JSON does not have a "data" property at its root.' + end + + download_dir = File.join(Dir.pwd, 'downloads') + FileUtils.mkdir_p(download_dir) + puts "📁 Created directory: #{download_dir}" + + file_index = 1 + data.each do |key, subproperty| + if subproperty && subproperty['dhd'] + image_url = subproperty['dhd'] + puts "🔍 Found image URL!" + parsed_url = URI.parse(image_url) + ext = File.extname(parsed_url.path).empty? ? '.jpg' : File.extname(parsed_url.path) + filename = "#{file_index}#{ext}" + file_path = File.join(download_dir, filename) + + download_image(image_url, file_path) + puts "🖼️ Saved image to #{file_path}" + + file_index += 1 + delay(250) + end + end +rescue StandardError => e + puts "Error: #{e.message}" +end + +def ascii_art + puts <<-ASCII + /$$ /$$ /$$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$$ +| $$$ /$$$| $$ /$$/| $$__ $$ /$$__ $$| $$__ $$ +| $$$$ /$$$$| $$ /$$/ | $$ \\ $$| $$ \\__/| $$ \\ $$ +| $$ $$/$$ $$| $$$$$/ | $$$$$$$ | $$$$$$ | $$ | $$ +| $$ $$$| $$| $$ $$ | $$__ $$ \\____ $$| $$ | $$ +| $$\\ $ | $$| $$\\ $$ | $$ \\ $$ /$$ \\ $$| $$ | $$ +| $$ \\/ | $$| $$ \\ $$| $$$$$$$/| $$$$$$/| $$$$$$$/ +|__/ |__/|__/ \\__/|_______/ \\______/ |_______/ + ASCII + puts + puts "🤑 Starting downloads from your favorite sellout grifter's wallpaper app..." +end + +ascii_art +sleep 5 +main