#!/usr/bin/python # -*- coding: utf-8 -*- import sys import urllib, json, time ''' Download your order from Humble Bundle. * Usage: python get_humble_order.py [your_order_key] [desired formats seperated by a space] * Example: python get_humble_order.py k____________XvN epub pdf * Limitations: - be aware of the directory you're using; usually the files will be downloaded to where you call the script from - all existing files with the same name will be overwritten ''' args = [] args.append(sys.argv) if len(args[0]) < 3: print("Too few arguments.") sys.exit() # reporthook taken from https://blog.shichao.io/2012/10/04/progress_speed_indicator_for_urlretrieve_in_python.html def reporthook(count, block_size, total_size): global start_time if count == 0: start_time = time.time() return duration = time.time() - start_time progress_size = int(count * block_size) speed = int(progress_size / (1024 * duration)) percent = min(int(count * block_size * 100 / total_size), 100) sys.stdout.write("\r...%d%%, %d MB, %d KB/s, %d seconds passed" % (percent, progress_size / (1024 * 1024), speed, duration)) sys.stdout.flush() url = "https://hr-humblebundle.appspot.com/api/v1/order/{0}".format(args[0][1]) print(url) response = urllib.urlopen(url) data = json.loads(response.read()) products_count = len(data["subproducts"]) i = 0 while i < products_count: try: human_name = data["subproducts"][i]["human_name"] download_options = len(data["subproducts"][i]["downloads"][0]["download_struct"]) except: print("\n Non-file item. Skipping. \n") j += 1 i += 1 continue j = 0 while j < download_options: dl_type = (data["subproducts"][i]["downloads"][0]["download_struct"][j]["name"]).lower() try: arg_iter = 2 while arg_iter < len(args[0]): if ((args[0][arg_iter]).lower() in dl_type): dl_url = data["subproducts"][i]["downloads"][0]["download_struct"][j]["url"]["web"] dl_file = urllib.URLopener() print("\n" + human_name + " ({0})".format(dl_type.upper())) dl_file.retrieve(dl_url, "{0}.{1}".format(human_name,dl_type), reporthook) arg_iter += 1 except Exception as e: print(e) break j += 1 i += 1 print("\n")