-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathSankaku.py
78 lines (65 loc) · 2.25 KB
/
Sankaku.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import requests
import mimetypes
import json
# region Sankaku stuff
API_URL = "https://capi-v2.sankakucomplex.com/"
HTTP_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'}
POST_ID = "id"
POST_URL = "file_url"
POST_MIME = "file_type"
# endregion
class Sankaku:
__session = requests.Session()
progress = 0
total = 0
statusMessage = "idle"
posts = []
#region Static
@staticmethod
def __getFileType(url):
lastQuestionMark = url.rfind('?')
lastDotBeforeQM = url.rfind('.',0,lastQuestionMark)
#remove everything before .:?
return url[lastDotBeforeQM:lastQuestionMark]
@staticmethod
def download_post(post, folder):
if(post[POST_URL] == None):
print(f"Can't download: {post}")
r = Sankaku.__session.get(post[POST_URL])
open(folder+"\\"+str(post[POST_ID]) + Sankaku.__getFileType(post[POST_URL]), 'wb').write(r.content)
#endregion
def get_posts(self):
page = ""
self.posts = []
temp = [0]
while(page != None):
temp = self._getPage(page)
page = temp['meta']['next']
self.posts.extend(temp['data'])
return self.posts
def _getPage(self, page = None):
print("G("+self.tags+"):"+str(page))
params = {
'lang':'en',
'limit':40,
'tags':self.tags
}
if (page != None):
params['next'] = page
return json.loads(Sankaku.__session.get(API_URL + 'posts/keyset', params = params).content)
def __init__(self,tags,folder,print = None):
self.tags = tags
self.folder = folder
self.print = print
def output(self, string):
if(callable(self.print)): self.print(string)
def download(self):
Sankaku.__session.headers['User-Agent'] = HTTP_HEADERS['User-Agent']
self.progress = 0
posts = self.get_posts()
self.total = len(posts)
for i in range(self.total):
self.output("D("+str(i+1)+"/"+str(self.total)+"):"+ str(posts[i][POST_ID]))
Sankaku.download_post(posts[i],self.folder)
self.progress += 1
self.output("Complete")