def v1CommentDetail(titleNo,episodeNo,commentId,replyCommentId="",commentLimit=20,commentReplyLimit=10,imageNo=""): path = "/v1/comment/detail" payload = {"titleNo":titleNo, "episodeNo":episodeNo, "imageNo":imageNo, "commentId":commentId, "replyCommentId":replyCommentId, "commentLimit":commentLimit, "commentReplyLimit": commentReplyLimit,} payload.update(Config("baseparams")) payload.update(getExpiresMd5(path)) try: resp = requests.get(Config("httphost")+path,params=payload,headers=Config("headers"),cookies=Config("cookies")) logger.info(resp.url) if resp.ok: result = resp.json() if result["code"] == 200: pass # logger.info(result.keys()) # logger.info(result["data"].keys()) # logger.info(result["data"]["comment"].keys()) # logger.info(result["data"]["comment"]["commentList"][0].keys()) # logger.info(result["data"]["comment"]["pageModel"].keys()) # logger.info(result["data"]["comment"]["bestList"][0].keys()) # logger.info(result["data"]["replyComment"].keys()) # logger.info(result["data"]["replyComment"]["commentReplyList"][0].keys()) # logger.info(result["data"]["replyComment"]["pageModel"].keys()) return result except Exception: logger.exception("v1CommentDetail发生异常")
def v2Comment(titleNo,episodeNo,imageNo="",pageNo="",sortBy="",limit=""): path = "/v2/comment" payload = {"titleNo":titleNo, "episodeNo":episodeNo, "imageNo":imageNo, "pageNo":pageNo, "sortBy":sortBy, "limit":limit} payload.update(Config("baseparams")) payload.update(getExpiresMd5(path)) try: resp = requests.get(Config("httphost")+path,params=payload,headers=Config("headers"),cookies=Config("cookies")) logger.info(resp.url) if resp.ok: result = resp.json() if result["code"] == 200: pass # logger.info(result.keys()) # logger.info(result["data"].keys()) # logger.info(result["data"]["commentList"][0].keys()) # logger.info(result["data"]["commentList"][0]["commentReplyList"][0].keys()) # logger.info(result["data"]["bestList"][0].keys()) # logger.info(result["data"]["bestList"][0]["commentReplyList"][0].keys()) return result except Exception: logger.exception("v2Comment发生异常")
def setListR(r, name, *values): try: res = r.rpush(name, *values) logger.info("setList成功 %s" % name) return res except Exception: logger.exception("setList发生异常 %s" % name)
def getList(r, name, key): try: res = r.hget(name, key) logger.info("getHash成功 %s:%s" % (name, key)) return res except Exception: logger.exception("getHash发生异常 %s:%s" % (name, key))
def setString(r, key, value): try: res = r.set(key, value) logger.info("setString成功 %s:%s" % (key, value)) return res except Exception: logger.exception("setString发生异常 %s:%s" % (key, value))
def getString(r, key): try: res = r.get(key) logger.info("getString成功 %s" % key) return res except Exception: logger.exception("getString发生异常 %s" % key)
def updateConfig(cfgKey,cfgValue): conn,cursor = getCursor() sql = '''update configInter set cfgValue = ? where cfgKey= ?''' cursor.execute(sql, (cfgValue,cfgKey)) conn.commit() conn.close() logger.info("更新%s:%s" % (cfgKey,cfgValue))
def login(username, passwd, loginType="EMAIL"): ##PHONE_NUMBER path = "/app/member/id/login" ne = appRsakeyGet() if ne: try: logger.info("%s--%s" % (username, passwd)) encpw = rsaEnc(ne[2], ne[1], ne[3], mobile=username, passwd=passwd) encnm = ne[0] plus = { "loginType": loginType, "encnm": encnm, "encpw": encpw, "v": 1 } plus.update(Config("baseparams")) resp = requests.post(Config("httphost") + path, headers=Config("headers"), data=plus, params=getExpiresMd5(path)) resp_json = resp.json() neo_ses = resp_json["message"]["result"]["ses"] neo_id = resp_json["message"]["result"]["id_no"] return neo_ses, neo_id except Exception: logger.exception("login出现异常") logger.error(resp.url) logger.error(resp.text) logger.error(resp.request.body) logger.error(resp.headers) return False else: return False
def v1CommentReply(parentId,titleNo,episodeNo,cookies,text=""): path = "/v1/comment_reply" titleNo = str(titleNo) episodeNo = str(episodeNo) text = str(text) objectId = "w_"+titleNo+"_"+episodeNo # print(objectId) time_now = datetime.datetime.now() otherStyleTime = time_now.strftime("%Y-%m-%d %H:%M:%S") if text: contents = text+"_"+str(otherStyleTime) else: contents = "自动生成回复_"+str(otherStyleTime) payload = { "contents":contents, "parentId":parentId, "objectId":objectId} payload.update(Config("baseparams")) try: resp = requests.post(Config("httphost")+path,params=getExpiresMd5(path),data=payload,headers=Config("headers"),cookies=cookies) result = resp.json() return result except Exception: logger.info(resp.url) logger.exception("v1CommentReply发生异常")
def deleteCommentLimitRedis(r): pattern = "comment_frequency_*_*" k = r.keys(pattern=pattern) if k: r.delete(*k) # logger.info("redis删除成功 %s" % k) else: logger.info("没有匹配到需要删除的redis")
def updateSession(conn,cursor,mobile,neoid,neoses): if getSession(cursor,mobile): sql = '''update userSession set neoses = ?,neoid= ? where mobile= ?''' cursor.execute(sql, (neoses,neoid,mobile)) conn.commit() logger.info("更新%s:%s" % (mobile,neoses)) else: insertSession(conn,cursor,mobile,neoid,neoses)
def checkV1CommentLike(data): code = data["code"] if code==200: logger.info(data["message"]) elif code == 10084: logger.info("无法为自己的留言点赞!") assert data["message"] == "无法为自己的留言点赞!" elif code == 400: logger.error(data["message"]) assert data["message"] == "非法请求!"
def checkV1CommentComplaint(data): code = data['code'] if code == 200: logger.info(data["message"]) elif code == 10140: logger.info(data["message"]) assert data["message"] == "无法举报自己的留言!" elif code == 400: logger.error(data["message"]) assert data["message"] == "非法请求!"
def v1CommentOwnAll(flag="",id="",pageNo=1): path="/v1/comment/ownall" payload= {"limit":20,"pageNo":pageNo,"flag":flag,"_id":id} payload.update(Config("baseparams")) payload.update(getExpiresMd5(path)) resp = requests.get(Config("httphost")+path,params=payload,headers=Config("headers"),cookies=Config("cookies")) logger.info(resp.url) if resp.ok: result= resp.json() return result else: logger.exception("v1CommentOwnAll发生异常")
def deleteCommentRedis(r): r = redis.Redis(host='r-2ze7889e17a315d4.redis.rds.aliyuncs.com', port=6379, password='******', db="0", decode_responses=True) pattern = "comment_frequency_*_*" k = r.keys(pattern=pattern) if k: r.delete(*k) logger.info("redis删除成功 %s" % k) else: logger.info("没有匹配到需要删除的redis")
def deleteCommentReply(cookies,id): path = "/v1/comment_reply/%s" % id payload = Config("baseparams") try: resp = requests.delete(Config("httphost")+path,params=getExpiresMd5(path),data=payload,headers=Config("headers"),cookies=cookies) logger.info(resp.url) if resp.ok: result = resp.json() logger.info(result) assert result["code"] == 200 assert result["message"] == "请求成功!" except Exception: logger.exception("deleteCommentReply发生异常")
def checkV1CommentDetailJson(res): #v1commentdetailcheck checkV1CommentData(res,['code', 'data', 'message']) checkV1CommentData(res["data"],['hide', 'comment']) checkV1CommentData(res["data"]["comment"],['commentList', 'pageModel']) for i in res["data"]["comment"]["commentList"]: checkV1CommentData(i,['_id', 'titleNo', 'episodeNo', 'categoryId', 'imageNo', 'contents', 'createTime', 'modifyTime', 'replyCount', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'forbid', 'visible', 'objectId', 'commentType', 'deleteDescription', 'secret', 'extra_status', 'best', 'replyCommentList', 'userName', 'userCertType']) checkV1CommentData(res["data"]["comment"]['pageModel'],['page', 'pageSize', 'startRow', 'endRow', 'totalRows', 'showTotalCount', 'totalPages', 'prevPage', 'nextPage']) if res["data"]["comment"].get("bestList",None): for i in res["data"]["comment"]['bestList']: checkV1CommentData(i,['_id', 'titleNo', 'episodeNo', 'categoryId', 'imageNo', 'contents', 'createTime', 'modifyTime', 'replyCount', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'forbid', 'visible', 'userType', 'objectId', 'commentNo', 'commentType', 'deleteDescription', 'secret', 'best', 'replyCommentList', 'userName', 'userCertType']) logger.info("checkV1CommentDetailJson")
def checkV2CommentJson(res): ###v2commentcheck checkV1CommentData(res,['code', 'data', 'message']) checkV1CommentData(res['data'],['hide', 'bestList', 'commentList', 'count', 'showTotalCount']) for i in res['data']["commentList"]: checkV1CommentData(i,['_id', 'titleNo', 'episodeNo', 'categoryId', 'imageNo', 'contents', 'createTime', 'modifyTime', 'replyCount', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'forbid', 'visible', 'objectId', 'commentType', 'deleteDescription', 'secret','extra_status', 'best', 'commentReplyList', 'like', 'userName', 'userCertType']) for j in i["commentReplyList"]: checkV1CommentData(j,['_id', 'parentId', 'contents', 'createTime', 'modifyTime', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'visible', 'objectId', 'originalContents', 'commentType', 'deleteDescription', 'secret', 'extra_status', 'titleNo', 'episodeNo', 'imageNo', 'like', 'userName', 'userCertType']) for i in res['data']["bestList"]: checkV1CommentData(i,['_id', 'titleNo', 'episodeNo', 'categoryId', 'imageNo', 'contents', 'createTime', 'modifyTime', 'replyCount', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'forbid', 'visible', 'userType', 'objectId', 'commentNo', 'commentType', 'deleteDescription', 'secret', 'best', 'commentReplyList', 'like', 'userName', 'userCertType']) for j in i["commentReplyList"]: checkV1CommentData(j,['_id', 'titleNo', 'episodeNo', 'imageNo', 'parentId', 'contents', 'createTime', 'modifyTime', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'visible', 'userType', 'objectId', 'commentNo', 'originalContents', 'commentType', 'deleteDescription', 'secret', 'like', 'userName', 'userCertType']) logger.info("checkV2CommentJson")
def checkV1CommentGet(commentId,pageNo=1,limit=10): result = v1CommentReplyGet(commentId,pageNo,limit) if result["code"] == 200: count = result["data"]["count"] commentList = result["data"]["commentReplyList"] pageNo = 2 for i in range(0,count//limit): res = v1CommentReplyGet(commentId,pageNo+i,limit) if res["code"] == 200: commentList.extend(res["data"]["commentReplyList"]) for i in commentList: # logger.info(i) checkV1CommentData(i,['_id', 'parentId', 'contents', 'createTime', 'modifyTime', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'visible', 'objectId', 'commentType', 'deleteDescription', 'secret', 'extra_status', 'titleNo', 'episodeNo', 'imageNo','userName', 'userCertType', 'like']) logger.info("checkV1CommentGet")
def checkV2Comment(titleNo,episodeNo,imageNo="",pageNo=1,sortBy="",limit=20): result = v2Comment(titleNo,episodeNo,imageNo,pageNo,sortBy,limit) if result["code"] == 200: count = result["data"]["count"] commentList = result["data"]["commentList"] pageNo = 2 for i in range(0,count//limit): res = v2Comment(titleNo,episodeNo,imageNo,pageNo+i,sortBy,limit) if res["code"] == 200: commentList.extend(res["data"]["commentList"]) for i in commentList: checkV1CommentData(i, ['_id', 'titleNo', 'episodeNo', 'categoryId', 'imageNo', 'contents', 'createTime', 'modifyTime', 'replyCount', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'forbid', 'visible', 'objectId', 'commentType', 'deleteDescription', 'secret', 'extra_status', 'best', 'commentReplyList','like', 'userName', 'userCertType']) logger.info("checkV2Comment")
def postV1CommentReplyLike(id,titleNo,episodeNo,cookies,flag="like"): path = "/v1/comment_reply/%s/like" % id titleNo = str(titleNo) episodeNo = str(episodeNo) payload = { "flag":flag, "titleNo":titleNo, "episodeNo":episodeNo,} payload.update(Config("baseparams")) try: resp = requests.post(Config("httphost")+path,params=getExpiresMd5(path),data=payload,headers=Config("headers"),cookies=cookies) result = resp.json() return result except Exception: logger.info(resp.url) logger.exception("vpostV1CommentReplyLike发生异常")
def v1CommentImageCount(titleNo,episodeNo,ids): path = "/v1/comment/image/count" payload = {"titleNo":titleNo, "episodeNo":episodeNo, "ids":ids, "v":1} payload.update(Config("baseparams")) payload.update(getExpiresMd5(path)) try: resp = requests.get(Config("httphost")+path,params=payload,headers=Config("headers")) if resp.ok: result = resp.json() if result["code"] == 200: return result except Exception: logger.info(resp.url) logger.exception("v1CommentImageCountt发生异常")
def customizeV1CommentReply(parentId,titleNo,episodeNo,text=""): replyResp = v1CommentReply(parentId, titleNo, episodeNo, text=text) if replyResp["code"] == 200: checkV1CommentData(replyResp['data'], ['_id', 'parentId', 'contents', 'createTime', 'modifyTime', 'neoId', 'deleted', 'likeCount', 'unLikeCount', 'visible', 'objectId', 'originalContents', 'commentType', 'deleteDescription', 'secret', 'extra_status', 'titleNo', 'episodeNo', 'imageNo', '__v']) id = replyResp["data"]["_id"] return id elif replyResp["code"] == 10005: logger.info("评论次数限制 :%s" % replyResp["message"]) deleteRedis(gc("neo_id")) return customizeV1CommentReply(parentId,titleNo,episodeNo,text=text) elif replyResp["code"] == 10002: logger.info("评论失败:%s" % replyResp["message"]) assert replyResp["message"] == "在留言内容中包含限制文句。\r\n请修改后再上传。"
def likeAndCount(cookies, titleNo, episodeNo): path = "/v1/title/%s/episode/likeAndCount" % titleNo payload = {"episodeNos": episodeNo} payload.update(Config("baseparams")) payload.update(getExpiresMd5(path)) try: resp = requests.get(Config("httphost") + path, params=payload, headers=Config("headers"), cookies=cookies) if resp.ok: resp_json = resp.json() return resp_json["data"][0] else: logger.error("点赞章节错误") logger.info(resp.text) except Exception: logger.exception("点赞章节异常") logger.info(resp.text)
def appRsakeyGet(): path = "/app/rsakey/get" try: resp = requests.get(Config("httphost") + path, params=getExpiresMd5(path), headers=Config("headers")) resp_json = resp.json() evalue = resp_json["message"]["result"]["evalue"] keyName = resp_json["message"]["result"]["keyName"] nvalue = resp_json["message"]["result"]["nvalue"] sessionKey = resp_json["message"]["result"]["sessionKey"] logger.info(resp.url) return keyName, evalue, nvalue, sessionKey except Exception: logger.error("appRsakeyGet出现异常") logger.error(resp.url) logger.error(resp.text) logger.error(resp.headers) return False
def checkUnlikeAndCount(titleNo, episodeNo): initPhone = 14400004000 actionTimes = 11 conn, cursor = getCursor() initRes = likeAndCount("", titleNo, episodeNo) if initRes: logger.info("初始化数据为 {}".format(initRes)) initData = initRes["count"] for i in range(1, actionTimes): mobile = str(initPhone + i) session = getSession(cursor, mobile) cookies = {"neo_ses": session} res = likeIt(cookies, titleNo, episodeNo, False) if res: if res["code"] == 200: resCount = likeAndCount(cookies, titleNo, episodeNo) if resCount: logger.info("请求结果数据为 {}".format(resCount)) assert resCount["count"] == initData - 11 * i assert resCount["like"] == 0
def likeIt(cookies, titleNo, episodeNo, like=True): path = "/v1/title/%s/episode/%s/like" % (titleNo, episodeNo) if like: flag = "like" else: # print("取消点赞%s-%s" % (titleNo,episodeNo)) flag = "cancelLike" payload = {"flag": flag} payload.update(Config("baseparams")) try: resp = requests.post(Config("httphost") + path, params=getExpiresMd5(path), data=payload, headers=Config("headers"), cookies=cookies) return resp.json() except Exception: logger.info(resp.text) logger.exception("点赞章节异常")
def commentPunishment(session, id, titleNo, episodeNo, source="1", status="2", punishmentStatus="3", punishmentType="2"): headers = { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Host": "qaadmin02.dongmanmanhua.cn", "Origin": "http://qaadmin02.dongmanmanhua.cn", "Referer": "http://qaadmin02.dongmanmanhua.cn/comment/list.nhn", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36", "X-Requested-With": "XMLHttpRequest", "Accept": "*/*", "Accept-Language": "zh-CN,zh;q=0.9", "charset": "utf-8", "Pragma": "no-cache", } cookie = { "nhnuserlocale": "zh_CN", "Path": "/", } url = "http://qaadmin02.dongmanmanhua.cn/comment/punishment.nhn" data = { "ids": "%s_%s-%s_" % (id, titleNo, episodeNo), "source": source, ##1:待审核 "status": status, #1:通过;2 :屏蔽 "punishmentStatus": punishmentStatus, ## 3:非法信息 "remark": "", "punishmentType": punishmentType, ##2:单独屏蔽;1:整楼屏蔽 "type": "1", ##type=1:评论;2:回复 } resp = session.post(url, data=data, headers=headers, cookies=cookie) logger.info(resp.text)
def adminLogin(): session = requests.Session() url = "http://qaadmin02.dongmanmanhua.cn/login.nhn" headers = { "Content-Type": "application/x-www-form-urlencoded", "Host": "qaadmin02.dongmanmanhua.cn", "Origin": "http://qaadmin02.dongmanmanhua.cn", "Referer": "http://qaadmin02.dongmanmanhua.cn/?t=1563438667331", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36", "X-Requested-With": "XMLHttpRequest", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Accept-Language": "zh-CN,zh;q=0.9", "charset": "utf-8", "Pragma": "no-cache", "Accept-Encoding": "gzip, deflate", "Upgrade-Insecure-Requests": "1", "Cache-Control": "no-cache", "Connection": "keep-alive" } data = { "userName": "******", "password": "******", } cookies = { "timezoneOffset": "+8", "nhnuserlocale": "zh_CN", } resp = session.post(url, data=data, headers=headers, cookies=cookies) if resp.ok: logger.info("登陆admin成功") return session
def getParentsId(titleNo): parentids = {} ##{"neo_id":{"parentidA":["id3","id4"]},""parentidB":["id1","id2']} cdnHost = "https://cdn.dongmanmanhua.cn" deleteAllComments() datas=[] # for titleNo in titleNos: logger.info("#####:%s" % titleNo) resp = appTitleInfo2(titleNo) if resp: datas.append(resp) for title in datas: logger.info("@@@@@:%s" % title["title"]) if title["serviceStatus"] == "SERVICE": totalServiceEpisodeCount = title["totalServiceEpisodeCount"] titleNo = title["titleNo"] titleName = title["title"] viewerType = title["viewer"] for episodeNo in range(1,totalServiceEpisodeCount+1): episodeInfo = appEpisodeInfoV3(titleNo,episodeNo) if episodeInfo: # episodeNo = episodeInfo["episodeNo"] episodeTitle = episodeInfo["episodeTitle"] serviceStatus = episodeInfo["serviceStatus"] if serviceStatus == "SERVICE": commentIllegal = True commentLike = True commentComplaint = True replyCommentIllegal = True replyCommentLike = True replyCommentComplaint = True if viewerType == "CUT": imageInfos = episodeInfo["imageInfo"] for image in imageInfos: categoryImage = cdnHost+image["url"] categoryId = image["cutId"] text = episodeTitle+"_"+str(categoryId) ##评论非法词 if commentIllegal: cutomizeV1Comment(titleNo,episodeNo,categoryImage,categoryId,categoryId,"admin",userType="MANAGER") commentIllegal = False for t in range(0,21): logger.info("%s-第%s次发表评论" % (titleNo, t)) id = cutomizeV1Comment(titleNo,episodeNo,categoryImage,categoryId,categoryId,getFormateTime()+text,userType="MANAGER") if id: parentids[id]=[titleNo,episodeNo] ##为自己评论点赞 if commentLike: resp = postV1CommentLike(id, titleNo, episodeNo) checkV1CommentLike(resp) commentLike = False ##举报自己的评论 if commentComplaint: resp = postV1CommentComplaint(id) checkV1CommentComplaint(resp) commentComplaint = False ##回复非法词 if replyCommentIllegal: customizeV1CommentReply(id, titleNo, episodeNo, "admin") replyCommentIllegal = False for rt in range(0,11): logger.info("%s-第%s次发表评论,第%s次发表回复" % (titleNo, t, rt)) replyid = customizeV1CommentReply(id, titleNo, episodeNo, text + "_"+str(rt)) if replyid: parentids[id].append(replyid) ##为自己回复点赞 if replyCommentLike: resp = postV1CommentReplyLike(replyid, titleNo, episodeNo) checkV1CommentLike(resp) replyCommentLike = False ##举报自己的回复 if replyCommentComplaint: resp = postV1CommentReplyComplaint(replyid) checkV1CommentComplaint(resp) replyCommentComplaint = False break else: text = titleName+"_"+str(episodeNo) ##评论非法词 if commentIllegal: cutomizeV1Comment(titleNo,episodeNo,text="admin") commentIllegal = False for t in range(0, 21): logger.info("%s-第%s次发表评论" % (titleNo, t)) # text = getFormateTime()+text id = cutomizeV1Comment(titleNo,episodeNo,text=getFormateTime()+text) if id: parentids[id] = [titleNo, episodeNo] ##为自己评论点赞 if commentLike: resp = postV1CommentLike(id,titleNo, episodeNo) checkV1CommentLike(resp) commentLike = False ##举报自己的评论 if commentComplaint: resp = postV1CommentComplaint(id) checkV1CommentComplaint(resp) commentComplaint = False ##回复非法词 if replyCommentIllegal: customizeV1CommentReply(id, titleNo, episodeNo, "admin") replyCommentIllegal = False for rt in range(0, 11): logger.info("%s-第%s次发表评论,第%s次发表回复" % (titleNo,t,rt)) replyid = customizeV1CommentReply(id, titleNo, episodeNo, text + "_" + str(rt)) if replyid: parentids[id].append(replyid) ##为自己回复点赞 if replyCommentLike: resp = postV1CommentReplyLike(replyid, titleNo, episodeNo) checkV1CommentLike(resp) replyCommentLike = False ##举报自己的回复 if replyCommentComplaint: resp = postV1CommentReplyComplaint(replyid) checkV1CommentComplaint(resp) replyCommentComplaint = False break return parentids