-
Notifications
You must be signed in to change notification settings - Fork 71
/
Copy pathworks.py
123 lines (102 loc) · 3.72 KB
/
works.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# coding=utf-8
from concurrent.futures import as_completed
from ....platform import CMDProcessor
@CMDProcessor.plugin_register("api/biu/search/works")
class searchWorks(object):
def __init__(self, MOD):
self.MOD = MOD
def pRun(self, cmd):
try:
args = self.MOD.args.getArgs(
"works",
[
"kt",
"mode=tag",
"&totalPage=5",
"&groupIndex=0",
"&sortMode=0",
"&isSort=1",
"&isCache=1",
],
)
except:
return {"code": 0, "msg": "missing parameters"}
code = 1
isCache = (
int(args["ops"]["isCache"])
and self.MOD.biu.sets["biu"]["search"]["loadCacheFirst"]
)
cachePath = self.MOD.ENVIRON["ROOTPATH"] + "usr/cache/data_search/"
fileName = (
(
"%s@%s_%s+%s_%s%s.json"
% (
args["fun"]["kt"],
args["fun"]["mode"],
args["ops"]["totalPage"],
args["ops"]["groupIndex"],
args["ops"]["sortMode"],
args["ops"]["isSort"],
)
)
.replace("\\", "#")
.replace("/", "#")
.replace(":", "#")
.replace("*", "#")
.replace("?", "#")
.replace('"', "#")
.replace("<", "#")
.replace(">", "#")
.replace("|", "#")
)
if isCache:
isCacheFile = self.MOD.file.ain(cachePath + fileName)
if isCache and isCacheFile:
rst = isCacheFile
code = 2
else:
rst = self.appWorks(args["ops"].copy(), args["fun"].copy())
self.MOD.file.aout(cachePath + fileName, rst, "w", False)
return {
"code": code,
"msg": {"way": "search", "args": args, "rst": rst},
}
# app api 搜索
def appWorks(self, opsArg, funArg):
modes = {
"tag": "partial_match_for_tags",
"otag": "exact_match_for_tags",
"des": "title_and_caption",
}
r = {"api": "app", "total": 0, "data": []}
self.MOD.args.argsPurer(funArg, {"kt": "word", "mode": "search_target"})
funArg["search_target"] = modes[funArg["search_target"]]
status = []
grpIdx = int(opsArg["groupIndex"]) # 组序号
ttlPage = int(opsArg["totalPage"]) # 每组页数
for p in range(grpIdx * ttlPage, (grpIdx + 1) * ttlPage):
argg = funArg.copy()
argg["offset"] = p * 30
status.append(self.MOD.biu.pool_srh.submit(self.__thread_appWorks, **argg))
self.MOD.biu.updateStatus(
"search", (funArg["word"] + "_" + str(ttlPage) + "+" + str(grpIdx)), status,
)
for x in as_completed(status):
r["data"] += x.result()
r["total"] = len(r["data"])
if int(opsArg["isSort"]) == 1:
if str(opsArg["sortMode"]) == "1":
r["data"] = sorted(
r["data"], key=lambda kv: kv["total_view"], reverse=True
)
else:
r["data"] = sorted(
r["data"], key=lambda kv: kv["total_bookmarks"], reverse=True
)
self.MOD.biu.appWorksPurer(r["data"])
return r
def __thread_appWorks(self, **kw):
data = self.MOD.biu.apiAssist.search_illust(**kw)
if "illusts" in data and len(data["illusts"]) != 0:
return data["illusts"]
return []