Mercurial > codedump
annotate kemonopartydownloader.py @ 50:6661f088a504
Update README.md
committer: GitHub <noreply@github.com>
| author | Paper <37962225+mrpapersonic@users.noreply.github.com> | 
|---|---|
| date | Sat, 31 Jul 2021 02:30:48 -0400 | 
| parents | 717feded576e | 
| children | 6eb6c657c7eb | 
| rev | line source | 
|---|---|
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 1 # example args.url: https://kemono.party/fanbox/user/5375435/post/2511461 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 2 import argparse | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 3 import http.cookiejar | 
| 49 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 4 import json | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 5 import os | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 6 import re | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 7 import requests # pip install requests | 
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 8 import time | 
| 49 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 9 import unicodedata | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 10 import urllib.request | 
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 11 from urllib.error import HTTPError | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 12 | 
| 49 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 13 def sanitize(filename): | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 14 return re.sub("^[\w\-. ]+$", "_", filename) | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 15 | 
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 16 def downloadfile(i, x, count): | 
| 49 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 17 if not os.path.exists("{4}\\{0}_{1}p_{2}_{3}".format(i["id"], count, sanitize(i["title"]), os.path.basename(x["path"]), output)) or str(os.stat("{4}\\{0}_{1}p_{2}_{3}".format(i["id"], count, sanitize(i["title"]), os.path.basename(x["path"]), output)).st_size) != req.head(f"https://data.kemono.party{x['path']}").headers["Content-Length"]: | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 18 with req.get(f"https://data.kemono.party{x['path']}", stream=True) as r: | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 19 r.raise_for_status() | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 20 with open("{4}\\{0}_{1}p_{2}_{3}".format(i["id"], count, sanitize(i["title"]), os.path.basename(x["path"]), output), "wb") as f: | 
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 21 for chunk in r.iter_content(chunk_size=4096): | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 22 f.write(chunk) | 
| 49 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 23 print("image " + str(count) + " successfully downloaded!") | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 24 else: | 
| 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 25 print("image " + str(count) + " already downloaded!") | 
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 26 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 27 parser = argparse.ArgumentParser(description="Downloads (deleted) videos from YTPMV creators") | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 28 parser.add_argument("-u", "--url", help="user URL", metavar='<url>', required=True) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 29 parser.add_argument("-c", "--cookies", help="", metavar='<url>', required=True) # required because of DDoS-GUARD | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 30 parser.add_argument("-p", "--proxy", help="proxy\n supported types: http, https, socks5 (requires pysocks)", metavar='<url>') # SOCKS proxy support is through PySocks - pip install pysocks | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 31 parser.add_argument("-o", "--output", help="output folder, defaults to user ID", metavar='<url>') | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 32 args = parser.parse_args() | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 33 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 34 req = requests.Session() | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 35 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 36 if args.proxy: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 37 if args.proxy[:6] == "socks5": | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 38 httpproxy = args.proxy | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 39 httpsproxy = args.proxy | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 40 elif args.proxy[0:5] == "https": | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 41 httpsproxy = args.proxy | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 42 elif args.proxy[0:4] == "http": | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 43 httpproxy = args.proxy | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 44 else: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 45 print("unknown proxy format! defaulting to HTTP...") | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 46 httpproxy = args.proxy | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 47 if httpproxy: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 48 req.proxies = { | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 49 "http": httpproxy, | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 50 } | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 51 if httpsproxy: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 52 req.proxies["https"] = httpsproxy | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 53 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 54 cj = http.cookiejar.MozillaCookieJar(args.cookies) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 55 cj.load(ignore_expires=True) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 56 req.cookies = cj | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 57 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 58 try: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 59 int(args.url) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 60 print("do not input user IDs here! use a link instead") | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 61 exit() | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 62 except Exception: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 63 pass | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 64 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 65 if args.url.split("/")[-2] == "post": | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 66 service = args.url.split("/")[-5] | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 67 user = args.url.split("/")[-3] | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 68 post = args.url.split("/")[-1] | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 69 userdata = req.get("https://kemono.party/api/{0}/user/{1}/post/{2}".format(service, user, post)).json() | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 70 elif args.url.split("/")[-2] == "user": | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 71 service = args.url.split("/")[-3] | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 72 user = args.url.split("/")[-1] | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 73 userdata = req.get("https://kemono.party/api/{0}/user/{1}".format(service, user)).json() | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 74 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 75 if not args.output: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 76 output = user | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 77 else: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 78 output = args.output | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 79 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 80 if not os.path.isdir(output): | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 81 if os.path.exists(output): | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 82 os.remove(output) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 83 os.mkdir(output) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 84 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 85 for i in userdata: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 86 print(i["id"]) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 87 post = i["id"] | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 88 count = 0 | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 89 for x in i["attachments"]: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 90 count += 1 | 
| 49 
717feded576e
Update kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: 
46diff
changeset | 91 while not os.path.exists("{4}\\{0}_{1}p_{2}_{3}".format(int(i["id"]) - 1, count, sanitize(i["title"]), os.path.basename(x["path"]), output)): | 
| 46 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 92 try: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 93 downloadfile(i, x, count) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 94 break | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 95 except HTTPError: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 96 time.sleep(10) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 97 downloadfile(i, x, count) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 98 except Exception as e: | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 99 print(e) | 
| 
522ad91a230e
Add kemonopartydownloader.py
 Paper <37962225+mrpapersonic@users.noreply.github.com> parents: diff
changeset | 100 time.sleep(10) | 
