archive_size
· 981 B · Text
Raw
#!/usr/bin/env python3
import xmltodict
import requests
def sizeof_fmt(num, suffix='B'):
for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
if abs(num) < 1024.0:
return "%3.1f%s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f%s%s" % (num, 'Yi', suffix)
def get_size_of_bucket(bucket):
data = xmltodict.parse(
requests.get(f"https://archive.org/download/{bucket}/{bucket}_files.xml").text
)
return sum(int(f["size"]) for f in data["files"]["file"] if "size" in f)
def main():
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("bucket")
parser.add_argument("-u", "--human", help="(hUman): Returns output as human-readable (e.g 1.1MiB)", action="store_true")
args = parser.parse_args()
size = get_size_of_bucket(args.bucket)
if args.human:
print(sizeof_fmt(size))
else:
print(size)
return 0
if __name__ == "__main__":
exit(main())
| 1 | #!/usr/bin/env python3 |
| 2 | import xmltodict |
| 3 | import requests |
| 4 | |
| 5 | def sizeof_fmt(num, suffix='B'): |
| 6 | for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']: |
| 7 | if abs(num) < 1024.0: |
| 8 | return "%3.1f%s%s" % (num, unit, suffix) |
| 9 | num /= 1024.0 |
| 10 | return "%.1f%s%s" % (num, 'Yi', suffix) |
| 11 | |
| 12 | def get_size_of_bucket(bucket): |
| 13 | data = xmltodict.parse( |
| 14 | requests.get(f"https://archive.org/download/{bucket}/{bucket}_files.xml").text |
| 15 | ) |
| 16 | return sum(int(f["size"]) for f in data["files"]["file"] if "size" in f) |
| 17 | |
| 18 | def main(): |
| 19 | from argparse import ArgumentParser |
| 20 | parser = ArgumentParser() |
| 21 | parser.add_argument("bucket") |
| 22 | parser.add_argument("-u", "--human", help="(hUman): Returns output as human-readable (e.g 1.1MiB)", action="store_true") |
| 23 | args = parser.parse_args() |
| 24 | size = get_size_of_bucket(args.bucket) |
| 25 | if args.human: |
| 26 | print(sizeof_fmt(size)) |
| 27 | else: |
| 28 | print(size) |
| 29 | return 0 |
| 30 | |
| 31 | if __name__ == "__main__": |
| 32 | exit(main()) |