33# @Author : @qiu-lzsnmb and @Dimlitter
44# @File : auto_comment_plus.py
55
6+ import argparse
67import random
78import time
89
1415import jdspider
1516
1617
18+ # constants
1719CONFIG_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
2038jieba .setLogLevel (jieba .logging .INFO )
2139
2240
41+ # parse configurations
2342with open (CONFIG_PATH , 'r' , encoding = 'utf-8' ) as f :
2443 cfg = yaml .safe_load (f )
2544ck = cfg ['user' ]['cookie' ]
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
327358if __name__ == '__main__' :
328359 try :
329- main ()
360+ main (opts )
330361 except RecursionError :
331362 print ("多次出现未完成情况,程序自动退出" )
0 commit comments