Mercurial > codedump
annotate kemonopartydownloader.py @ 55:4e5000c9b48f
Update kemonopartydownloader.py
committer: GitHub <noreply@github.com>
author | Paper <37962225+mrpapersonic@users.noreply.github.com> |
---|---|
date | Fri, 06 Aug 2021 03:46:02 -0400 |
parents | 5a5d47a795c6 |
children | bde647ac9554 |
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 |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
2 # created by Paper in 2021 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
3 # please do not share without crediting me! |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
4 import argparse |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
5 import http.cookiejar |
49
717feded576e
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
46
diff
changeset
|
6 import os |
717feded576e
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
46
diff
changeset
|
7 import re |
717feded576e
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
46
diff
changeset
|
8 import requests # pip install requests |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
9 import time |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
10 import math |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
11 import zipfile |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
12 import urllib.parse |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
13 from urllib.error import HTTPError |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
14 |
51
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
15 |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
16 def get_google_drive_subfolder_ids(link): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
17 gdrive = requests.get(link).text |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
18 drivefiles = re.findall(r"\[\"(.{33}?)\",\[\"(.{33}?)\"\],\"(.+?)\",\"(.+?)\"", gdrive) # format: ["id","name","mimetype" |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
19 seen = set() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
20 unique_ids = [] |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
21 names = [] |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
22 for files in drivefiles: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
23 if files[3] != "application/vnd.google-apps.folder": |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
24 continue |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
25 if files[0] not in seen: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
26 unique_ids.append(files[0]) |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
27 names.append(files[2]) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
28 seen.add(files[0]) |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
29 return unique_ids, names |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
30 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
31 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
32 def unzip(src_path, dst_dir, pwd=None): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
33 with zipfile.ZipFile(src_path) as zf: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
34 members = zf.namelist() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
35 for member in members: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
36 arch_info = zf.getinfo(member) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
37 arch_name = arch_info.filename.replace('/', os.path.sep) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
38 dst_path = os.path.join(dst_dir, arch_name) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
39 dst_path = os.path.normpath(dst_path) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
40 if not os.path.exists(dst_path): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
41 zf.extract(arch_info, dst_dir, pwd) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
42 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
43 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
44 def download_from_dropbox(link): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
45 responsehead = requests.head(link.split("?")[0] + "?dl=1", allow_redirects=True) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
46 if responsehead.status_code == 404: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
47 print(" dropbox link not available!") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
48 return |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
49 if not os.path.exists(output + "\\Dropbox - " + sanitize(i["title"])): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
50 os.makedirs(output + "\\Dropbox - " + sanitize(i["title"])) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
51 filename = output + "\\Dropbox - " + sanitize(i["title"]) + "\\" + sanitize(responsehead.headers["Content-Disposition"].split("'")[-1]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
52 if os.path.exists(urllib.parse.unquote(os.path.splitext(filename)[0])) and os.path.isdir(urllib.parse.unquote(os.path.splitext(filename)[0])): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
53 print(" file(s) already downloaded!") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
54 return |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
55 if os.path.exists(filename): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
56 filesize = os.stat(filename).st_size |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
57 else: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
58 filesize = 0 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
59 serverfilesize = int(responsehead.headers["Content-Length"]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
60 if filesize < serverfilesize: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
61 with req.get(link.split("?")[0] + "?dl=1", stream=True, headers={"Range": f"bytes={filesize}-"}) as r: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
62 r.raise_for_status() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
63 with open(filename, "ab") as f: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
64 for chunk in r.iter_content(chunk_size=4096): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
65 f.write(chunk) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
66 filesize += 4096 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
67 print(" file {0} downloading: ".format(urllib.parse.unquote(responsehead.headers["Content-Disposition"].split("'")[-1])) + str(round((filesize / serverfilesize) * 100)) + "%\r", end="") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
68 print(" {0} successfully downloaded!".format(urllib.parse.unquote(responsehead.headers["Content-Disposition"].split("'")[-1]))) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
69 if responsehead.headers["Content-Disposition"].split("'")[-1].endswith(".zip"): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
70 unzip(filename, urllib.parse.unquote(os.path.splitext(filename)[0])) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
71 os.remove(filename) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
72 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
73 |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
74 def download_file_from_google_drive(id, dir=""): # https://stackoverflow.com/questions/25010369/wget-curl-large-file-from-google-drive/39225039 ;) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
75 def get_confirm_token(response): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
76 for key, value in response.cookies.items(): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
77 if key.startswith('download_warning'): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
78 return value |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
79 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
80 return None |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
81 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
82 def save_response_content(response): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
83 amountdone = 0 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
84 CHUNK_SIZE = 32768 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
85 if not os.path.exists(output + "\\Drive - " + sanitize(i["title"])): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
86 os.makedirs(output + "\\Drive - " + sanitize(i["title"])) |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
87 if not os.path.exists(output + "\\Drive - " + sanitize(i["title"]) + "\\" + dir): |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
88 os.makedirs(output + "\\Drive - " + sanitize(i["title"]) + "\\" + dir) |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
89 destination = output + "\\Drive - " + sanitize(i["title"]) + "\\" + dir + "\\" + sanitize(response.headers["Content-Disposition"].split("'")[-1]) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
90 if os.path.exists(destination): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
91 filesize = os.stat(destination).st_size |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
92 else: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
93 filesize = 0 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
94 |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
95 if os.path.exists(destination) and filesize == int(response.headers["Content-Range"].partition('/')[-1]): |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
96 print(" " + os.path.basename(destination) + " already downloaded!") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
97 return |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
98 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
99 with open(destination, "wb") as f: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
100 for chunk in response.iter_content(CHUNK_SIZE): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
101 if chunk: # filter out keep-alive new chunks |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
102 f.write(chunk) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
103 amountdone += CHUNK_SIZE |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
104 print(" downloading {0}: ".format(os.path.basename(destination)) + " " + str(round(filesize + amountdone / int(response.headers["Content-Range"].partition('/')[-1])) * 100) + "%\r", end="") |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
105 print(" downloaded {0}".format(os.path.basename(destination)) + ": 100% ") |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
106 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
107 URL = "https://docs.google.com/uc?export=download" |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
108 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
109 session = requests.Session() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
110 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
111 headers = { |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
112 "Range": "bytes=0-", |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
113 } |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
114 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
115 response = session.get(URL, headers=headers, params={'id': id}, stream=True) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
116 |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
117 while response.status_code == 403: |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
118 time.sleep(30) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
119 response = session.get(URL, headers=headers, params={'id': id}, stream=True) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
120 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
121 token = get_confirm_token(response) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
122 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
123 if token: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
124 params = {'id': id, 'confirm': token} |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
125 response = session.get(URL, headers=headers, params=params, stream=True) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
126 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
127 save_response_content(response) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
128 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
129 |
49
717feded576e
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
46
diff
changeset
|
130 def sanitize(filename): |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
131 return re.sub(r"[\/:*?\"<>|]", "_", filename).strip() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
132 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
133 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
134 def find_urls(s): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
135 urllist = [] |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
136 for findall in re.findall("href=\\\"(https://.+?)\\\"", s): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
137 urllist.append(re.sub(r"<[^<]+?>", "", re.sub(r"[^a-zA-Z0-9<>]+$", "", findall))) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
138 return urllist |
51
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
139 |
49
717feded576e
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
46
diff
changeset
|
140 |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
141 def downloadfile(i, x, count): |
51
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
142 filename = "{4}\\{0}_{1}p_{2}_{3}".format(i["id"], count, sanitize(i["title"]), os.path.basename(x["path"]), output) |
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
143 if os.path.exists(filename): |
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
144 filesize = os.stat(filename).st_size |
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
145 else: |
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
146 filesize = 0 |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
147 serverhead = req.head("https://data.kemono.party" + x['path']) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
148 try: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
149 serverfilesize = int(serverhead.headers["Content-Length"]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
150 if filesize < serverfilesize: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
151 with req.get(f"https://data.kemono.party{x['path']}", stream=True, headers={"Range": f"bytes={filesize}-"}) as r: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
152 r.raise_for_status() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
153 with open(filename, "ab") as f: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
154 for chunk in r.iter_content(chunk_size=4096): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
155 f.write(chunk) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
156 print(" image " + str(count) + " successfully downloaded!") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
157 return |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
158 else: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
159 print(" image " + str(count) + " already downloaded!") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
160 return |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
161 except Exception as e: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
162 print(" error downloading file!") |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
163 print(e) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
164 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
165 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
166 def parse_json(i, count): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
167 seen = set() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
168 unique_urls = [] |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
169 for url in find_urls(i["content"]): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
170 if url.startswith("https://drive.google.com/drive/folders"): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
171 if url.split("/")[-1].split("?")[0] not in seen: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
172 unique_urls.append(url) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
173 seen.add(url.split("/")[-1].split("?")[0]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
174 elif url.startswith("https://drive.google.com/open?id="): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
175 if url.split("?id=")[-1] not in seen: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
176 unique_urls.append(requests.head(url).headers["Location"]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
177 seen.add(url.split("/")[-1].split("?")[0]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
178 elif url.startswith("https://drive.google.com/file/"): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
179 if url.split("?")[0].split("/")[-2] not in seen: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
180 unique_urls.append(url) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
181 seen.add(url.split("?")[0].split("/")[-2]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
182 elif url.startswith("https://www.dropbox.com"): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
183 download_from_dropbox(url) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
184 else: # TODO: add MEGA, or some sort of other file hosting website(s). gdrive and dropbox seem like the most popular ones atm |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
185 pass |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
186 for url in unique_urls: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
187 if url.startswith("https://drive.google.com/drive/folders/"): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
188 # Google Drive folder downloading |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
189 print(" Google Drive link found! attempting to download its files...") |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
190 unique_ids = [url.split("/")[-1].split("?")[0]] |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
191 drive_ids_to_download = [unique_ids[0]] |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
192 drive_id_names = { |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
193 unique_ids[0]: ".", |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
194 } |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
195 while len(unique_ids) > 1: |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
196 for myid in unique_ids: |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
197 unique_ids, names = get_google_drive_subfolder_ids("https://drive.google.com/drive/folders/" + myid) |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
198 for xd in range(len(unique_ids)): |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
199 drive_ids_to_download.append(unique_ids[xd]) |
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
200 drive_id_names[unique_ids[xd]] = names[xd] |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
201 for ids in drive_ids_to_download: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
202 gdrive = requests.get("https://drive.google.com/drive/folders/" + ids).text |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
203 driveids = re.findall(r'jsdata=" M2rjcd;_;\d (?:.+?);(.+?);', gdrive) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
204 for driveid in driveids: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
205 if not driveid.startswith("driveweb|"): |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
206 download_file_from_google_drive(driveid, dir=drive_id_names[ids]) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
207 elif url.startswith("https://drive.google.com/file/"): |
55
4e5000c9b48f
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
54
diff
changeset
|
208 print(" Google Drive link found! attempting to download its files...") |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
209 download_file_from_google_drive(url.split("?")[0].split("/")[-2]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
210 for x in i["attachments"]: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
211 count += 1 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
212 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)): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
213 try: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
214 downloadfile(i, x, count) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
215 break |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
216 except HTTPError: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
217 time.sleep(10) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
218 downloadfile(i, x, count) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
219 except Exception as e: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
220 print(e) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
221 time.sleep(10) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
222 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
223 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
224 def get_amount_of_posts(s, u): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
225 amount = 0 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
226 while 1: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
227 data = req.get("https://kemono.party/api/{0}/user/{1}?o={2}".format(s, u, amount)).json() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
228 if len(data) < 25: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
229 return math.ceil((amount + 1) / 25) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
230 amount += 25 |
51
6eb6c657c7eb
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
49
diff
changeset
|
231 |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
232 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
233 parser = argparse.ArgumentParser(description="Downloads (deleted) videos from YTPMV creators") |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
234 parser.add_argument("-u", "--url", help="user URL", metavar='<url>', required=True) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
235 parser.add_argument("-c", "--cookies", help="", metavar='<cookies>', required=True) # required because of DDoS-GUARD |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
236 parser.add_argument("-p", "--proxy", help="proxy\n supported types: http, https, socks5 (requires pysocks)", metavar='<proxy>') # SOCKS proxy support is through PySocks - pip install pysocks |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
237 parser.add_argument("-o", "--output", help="output folder, defaults to user ID", metavar='<output>') |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
238 parser.add_argument("--test-download-services", dest="testdownloadservices", nargs="+", help="test download services\nsupported: gdrive, dropbox", metavar="<service>") |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
239 args = parser.parse_args() |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
240 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
241 req = requests.Session() |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
242 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
243 if args.proxy: |
53
ae64a0c8831b
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
51
diff
changeset
|
244 req.proxies = {} |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
245 if args.proxy[:6] == "socks5": |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
246 httpproxy = args.proxy |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
247 httpsproxy = args.proxy |
53
ae64a0c8831b
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
51
diff
changeset
|
248 elif args.proxy[:5] == "https": |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
249 httpsproxy = args.proxy |
53
ae64a0c8831b
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
51
diff
changeset
|
250 elif args.proxy[:4] == "http": |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
251 httpproxy = args.proxy |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
252 else: |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
253 print("unknown proxy format! defaulting to HTTP...") |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
254 httpproxy = args.proxy |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
255 if httpproxy: |
53
ae64a0c8831b
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
51
diff
changeset
|
256 req.proxies["http"] = httpproxy |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
257 if httpsproxy: |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
258 req.proxies["https"] = httpsproxy |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
259 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
260 cj = http.cookiejar.MozillaCookieJar(args.cookies) |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
261 cj.load(ignore_expires=True) |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
262 req.cookies = cj |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
263 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
264 try: |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
265 int(args.url) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
266 print("do not input user IDs in --url! use a link instead") |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
267 exit() |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
268 except Exception: |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
269 pass |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
270 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
271 if args.url.split("/")[-2] == "post": |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
272 service = args.url.split("/")[-5] |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
273 user = args.url.split("/")[-3] |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
274 post = args.url.split("/")[-1] |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
275 elif args.url.split("/")[-2] == "user": |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
276 service = args.url.split("/")[-3] |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
277 user = args.url.split("/")[-1] |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
278 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
279 if not args.output: |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
280 output = user |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
281 else: |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
282 output = args.output |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
283 |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
284 if not os.path.isdir(output): |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
285 if os.path.exists(output): |
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
286 os.remove(output) |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
287 os.makedirs(output) |
46
522ad91a230e
Add kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff
changeset
|
288 |
54
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
289 if args.testdownloadservices: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
290 i = { |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
291 "title": "Test" |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
292 } |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
293 if "gdrive" in args.testdownloadservices: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
294 unique_ids = ["1sMVOcUesv4Ua_KJ-eQ_CMS_5KkrZGFdF"] |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
295 drive_ids_to_download = [unique_ids[0].split("?")[0].split("/")[-1]] |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
296 while len(unique_ids) > 0: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
297 for i in unique_ids: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
298 unique_ids = get_google_drive_subfolder_ids("https://drive.google.com/drive/folders/" + i) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
299 for ids in unique_ids: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
300 drive_ids_to_download.append(ids) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
301 print(drive_ids_to_download) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
302 if "dropbox" in args.testdownloadservices: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
303 download_from_dropbox("https://www.dropbox.com/s/yg405bpznyobo3u/test.txt?dl=0") # File |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
304 download_from_dropbox("https://www.dropbox.com/sh/ne3c7bxtkt5tg4s/AABYPNGfHoil4HO_btudw0wPa?dl=0") # Folder |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
305 exit() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
306 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
307 try: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
308 post |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
309 pages = 1 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
310 except Exception: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
311 pages = get_amount_of_posts(service, user) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
312 for page in range(pages): |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
313 try: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
314 post |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
315 userdata = req.get("https://kemono.party/api/{0}/user/{1}/post/{2}".format(service, user, post)).json() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
316 except Exception: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
317 userdata = req.get("https://kemono.party/api/{0}/user/{1}?o={2}".format(service, user, (page * 25))).json() |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
318 for i in userdata: |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
319 print(i["id"]) |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
320 post = i["id"] |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
321 count = 0 |
5a5d47a795c6
Update kemonopartydownloader.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
53
diff
changeset
|
322 parse_json(i, count) |