Skip to content

Commit 08cf42c

Browse files
committed
Add --dry-run option to CLI
Now this command-line program supports "dry run" to run the full process without sending requests actually.
1 parent d970a90 commit 08cf42c

File tree

1 file changed

+72
-41
lines changed

1 file changed

+72
-41
lines changed

auto_comment_plus.py

Lines changed: 72 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# @Author : @qiu-lzsnmb and @Dimlitter
44
# @File : auto_comment_plus.py
55

6+
import argparse
67
import random
78
import time
89

@@ -14,12 +15,30 @@
1415
import jdspider
1516

1617

18+
# constants
1719
CONFIG_PATH = './config.yml'
20+
ORDINARY_SLEEP_SEC = 10
21+
SUNBW_SLEEP_SEC = 5
22+
REVIEW_SLEEP_SEC = 10
23+
SERVICE_RATING_SLEEP_SEC = 15
24+
25+
26+
# parse arguments
27+
parser = argparse.ArgumentParser()
28+
parser.add_argument('--dry-run',
29+
help='have a full run without comment submission',
30+
action='store_true')
31+
args = parser.parse_args()
32+
opts = {
33+
'dry_run': args.dry_run
34+
}
1835

1936

37+
# logging
2038
jieba.setLogLevel(jieba.logging.INFO)
2139

2240

41+
# parse configurations
2342
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
2443
cfg = yaml.safe_load(f)
2544
ck = cfg['user']['cookie']
@@ -46,7 +65,8 @@
4665

4766

4867
# 评价生成
49-
def generation(pname, _class=0, _type=1):
68+
def generation(pname, _class=0, _type=1, opts=None):
69+
opts = opts or {}
5070
items = ['商品名']
5171
items.clear()
5272
items.append(pname)
@@ -88,7 +108,8 @@ def generation(pname, _class=0, _type=1):
88108

89109

90110
# 查询全部评价
91-
def all_evaluate():
111+
def all_evaluate(opts=None):
112+
opts = opts or {}
92113
N = {}
93114
url = 'https://club.jd.com/myJdcomments/myJdcomment.action?'
94115
req = requests.get(url, headers=headers)
@@ -106,7 +127,8 @@ def all_evaluate():
106127

107128

108129
# 普通评价
109-
def ordinary(N):
130+
def ordinary(N, opts=None):
131+
opts = opts or {}
110132
Order_data = []
111133
req_et = []
112134
for i in range((N['待评价订单'] // 20) + 1):
@@ -133,7 +155,7 @@ def ordinary(N):
133155

134156
print(f"\t{i}.开始评价订单\t{oname}[{oid}]")
135157
url2 = "https://club.jd.com/myJdcomments/saveProductComment.action"
136-
xing, Str = generation(oname)
158+
xing, Str = generation(oname, opts=opts)
137159
print(f'\t\t评价内容,星级{xing}:', Str)
138160
data2 = {
139161
'orderId': oid,
@@ -143,14 +165,16 @@ def ordinary(N):
143165
'saveStatus': '1',
144166
'anonymousFlag': '1'
145167
}
146-
pj2 = requests.post(url2, headers=headers, data=data2)
147-
time.sleep(10)
168+
if not opts.get('dry_run'):
169+
pj2 = requests.post(url2, headers=headers, data=data2)
170+
time.sleep(ORDINARY_SLEEP_SEC)
148171
N['待评价订单'] -= 1
149172
return N
150173

151174

152175
# 晒单评价
153-
def sunbw(N):
176+
def sunbw(N, opts=None):
177+
opts = opts or {}
154178
Order_data = []
155179
for i in range((N['待晒单'] // 20) + 1):
156180
url = (f'https://club.jd.com/myJdcomments/myJdcomment.action?sort=1'
@@ -190,20 +214,22 @@ def sunbw(N):
190214
'imgs': imgurl,
191215
'saveStatus': 3
192216
}
193-
req_url2 = requests.post(url2, data={
194-
'orderId': oid,
195-
'productId': pid,
196-
'imgs': imgurl,
197-
'saveStatus': 3
198-
}, headers=headers)
217+
if not opts.get('dry_run'):
218+
req_url2 = requests.post(url2, data={
219+
'orderId': oid,
220+
'productId': pid,
221+
'imgs': imgurl,
222+
'saveStatus': 3
223+
}, headers=headers)
199224
print('完成')
200-
time.sleep(5)
225+
time.sleep(SUNBW_SLEEP_SEC)
201226
N['待晒单'] -= 1
202227
return N
203228

204229

205230
# 追评
206-
def review(N):
231+
def review(N, opts=None):
232+
opts = opts or {}
207233
req_et = []
208234
Order_data = []
209235
for i in range((N['待追评'] // 20) + 1):
@@ -228,23 +254,25 @@ def review(N):
228254
pid, oid = _id.replace(
229255
'http://club.jd.com/afterComments/productPublish.action?sku=',
230256
"").split('&orderId=')
231-
_, context = generation(oname, _type=0)
257+
_, context = generation(oname, _type=0, opts=opts)
232258
print(f'\t\t追评内容:{context}')
233-
req_url1 = requests.post(url1, headers=headers, data={
234-
'orderId': oid,
235-
'productId': pid,
236-
'content': bytes(context, encoding="gbk"),
237-
'anonymousFlag': 1,
238-
'score': 5
239-
})
259+
if not opts.get('dry_run'):
260+
req_url1 = requests.post(url1, headers=headers, data={
261+
'orderId': oid,
262+
'productId': pid,
263+
'content': bytes(context, encoding="gbk"),
264+
'anonymousFlag': 1,
265+
'score': 5
266+
})
240267
print('完成')
241-
time.sleep(10)
268+
time.sleep(REVIEW_SLEEP_SEC)
242269
N['待追评'] -= 1
243270
return N
244271

245272

246273
# 服务评价
247-
def Service_rating(N):
274+
def Service_rating(N, opts=None):
275+
opts = opts or {}
248276
Order_data = []
249277
req_et = []
250278
for i in range((N['服务评价'] // 20) + 1):
@@ -279,53 +307,56 @@ def Service_rating(N):
279307
'ro899': f'899A{random.randint(4, 5)}', # 快递员服务
280308
'ro900': f'900A{random.randint(4, 5)}' # 快递员服务
281309
}
282-
pj1 = requests.post(url1, headers=headers, data=data1)
310+
if not opts.get('dry_run'):
311+
pj1 = requests.post(url1, headers=headers, data=data1)
283312
print("\t\t", pj1.text)
284-
time.sleep(15)
313+
time.sleep(SERVICE_RATING_SLEEP_SEC)
285314
N['服务评价'] -= 1
286315
return N
287316

288317

289-
def No():
318+
def No(opts=None):
319+
opts = opts or {}
290320
print()
291-
N = all_evaluate()
321+
N = all_evaluate(opts)
292322
for i in N:
293323
print(i, N[i], end="----")
294324
print()
295325
return N
296326

297327

298-
def main():
328+
def main(opts=None):
329+
opts = opts or {}
299330
print("开始京东批量评价!")
300-
N = No()
331+
N = No(opts)
301332
if not N:
302333
print('Ck出现错误,请重新抓取!')
303334
exit()
304335
if N['待评价订单'] != 0:
305336
print("1.开始普通评价")
306-
N = ordinary(N)
307-
N = No()
337+
N = ordinary(N, opts)
338+
N = No(opts)
308339
if N['待晒单'] != 0:
309340
print("2.开始晒单评价")
310-
N = sunbw(N)
311-
N = No()
341+
N = sunbw(N, opts)
342+
N = No(opts)
312343
if N['待追评'] != 0:
313344
print("3.开始批量追评!")
314-
N = review(N)
315-
N = No()
345+
N = review(N, opts)
346+
N = No(opts)
316347
if N['服务评价'] != 0:
317348
print('4.开始服务评价')
318-
N = Service_rating(N)
319-
N = No()
349+
N = Service_rating(N, opts)
350+
N = No(opts)
320351
print("全部完成啦!")
321352
for i in N:
322353
if N[i] != 0:
323354
print("出现了二次错误,跳过了部分,重新尝试")
324-
main()
355+
main(opts)
325356

326357

327358
if __name__ == '__main__':
328359
try:
329-
main()
360+
main(opts)
330361
except RecursionError:
331362
print("多次出现未完成情况,程序自动退出")

0 commit comments

Comments
 (0)