标签:too level mime page 间隔 链表 哈哈 random login
#!/usr/bin/env python # encoding: utf-8 import re import urllib import os,datetime import sys import time from selenium import webdriver from BeautifulSoup import BeautifulSoup from DiscuzAPI import DiscuzAPI def getWorkdays(): holiday_list = [] overtime_list = [] days_list = [] workday_list = [] url = ‘http://www.baidu.com/s?‘ + urllib.urlencode({‘wd‘: ‘日历‘}) date_pattern = re.compile(r‘date="[\d]+[-][\d]+[-][\d]+"‘) driver = webdriver.PhantomJS(service_log_path=os.path.devnull) driver.get(url) html = driver.page_source driver.quit() soup = BeautifulSoup(html) td_div_list = soup.findAll(‘div‘,{‘class‘:‘op-calendar-new-relative‘}) for td_tag in td_div_list: href_tag = str(td_tag.a) date_list = date_pattern.findall(href_tag) if len(date_list) > 0: days_list.append(date_list[0].split(‘"‘)[1]) if href_tag.find(‘休‘) != -1: holiday_list.append(date_list[0].split(‘"‘)[1]) if href_tag.find(‘班‘) != -1: overtime_list.append(date_list[0].split(‘"‘)[1]) for day_format in days_list: day = datetime.datetime.strptime(day_format, ‘%Y-%m-%d‘).date() if day_format in overtime_list: workday_list.append(day) elif day.weekday() not in [5, 6] and day_format not in holiday_list: workday_list.append(day) return workday_list def getRangeThisWeek(workday_list): """获取本周工作日区间""" today = datetime.date.today() if today not in workday_list: # 非工作日,返回空链表 return [] else: for i in range(1,10): pres_day = today - datetime.timedelta(days=i) if pres_day not in workday_list: startday = pres_day + datetime.timedelta(days=1) break for i in range(1,10): next_day = today + datetime.timedelta(days=i) if next_day not in workday_list: endday = next_day - datetime.timedelta(days=1) break return [startday, endday] if __name__ == ‘__main__‘: # 从百度“日历”获取工作日列表 workday_list = getWorkdays() workday_range = getRangeThisWeek(workday_list) url = "http://bbs.cnfol.wh" username = "report" password = "eQIi}38" robot = DiscuzAPI(url, username, password) robot.login() # 发日报主题贴 fid_wh = 52 fid_fz = 72 msg = u"格式:\n\"\"\"\n今日工作内容:\n\n明日工作计划:\n\n\"\"\"" today = datetime.date.today() subject = today.strftime(‘%Y%m%d‘).encode(‘utf-8‘) if today in workday_list: # 检查主题是否已经存在了,武汉 result = robot.isSubExisted(fid = fid_wh, subject = subject) if result == False: print "wh主题贴发布:" + subject robot.publish(fid = fid_wh, subject = subject, msg = msg) else: print "wh主题已存在,不重复发布:" + subject # discuz 发贴时间间隔,默认15s #time.sleep() # 福州日报 result = robot.isSubExisted(fid = fid_fz, subject = subject) if result == False: print "fz主题贴发布:" + subject robot.publish(fid = fid_fz, subject = subject, msg = msg) else: print "fz主题已存在,不重复发布:" + subject # 发周报主题贴 fid_wh_week = 51 fid_fz_week = 73 msg = u"参照[url=http://bbs.cnfol.wh/forum.php?mod=viewthread&tid=20&extra=page%3D1]周报规范[/url]进行回复。" if len(workday_range) > 1: subject = workday_range[0].strftime(‘%Y%m%d‘).encode(‘utf-8‘) + "-" + workday_range[1].strftime(‘%Y%m%d‘).encode(‘utf-8‘) result = robot.isSubExisted(fid = fid_wh_week, subject = subject) if result == False: print "wh_week主题贴发布:" + subject robot.publish(fid=fid_wh_week, subject = subject, msg = msg) else: print "wh_week主题贴已存在,不重复发布:" + subject result = robot.isSubExisted(fid = fid_fz_week, subject = subject) if result == False: print "fz_week主题贴发布:" + subject robot.publish(fid=fid_fz_week, subject = subject, msg = msg) else: print "fz_week主题贴已存在,不重复发布:" + subject
#! /usr/bin/env python # -*- coding: utf-8 -*- """ base by Conanca image upload by N3il """ import urllib2 import urllib import cookielib import random import string import re import time import sys import httplib import mimetools import mimetypes httplib.HTTPConnection.debuglevel = 1 class DiscuzAPI: def __init__(self, forumUrl, userName, password, proxy = None): ‘‘‘ 初始化论坛url、用户名、密码和代理服务器 ‘‘‘ self.forumUrl = forumUrl self.userName = userName self.password = password self.formhash = ‘‘ self.isLogon = False self.isSign = False self.xq = ‘‘ self.jar = cookielib.CookieJar() if not proxy: openner = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.jar)) else: openner = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.jar), urllib2.ProxyHandler({‘http‘ : proxy})) urllib2.install_opener(openner) def login(self): ‘‘‘ 登录论坛 ‘‘‘ url = self.forumUrl + "/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&inajax=1"; postData = urllib.urlencode({‘username‘: self.userName, ‘password‘: self.password, ‘answer‘: ‘‘, ‘cookietime‘: ‘2592000‘, ‘handlekey‘: ‘ls‘, ‘questionid‘: ‘0‘, ‘quickforward‘: ‘yes‘, ‘fastloginfield‘: ‘username‘}) req = urllib2.Request(url,postData) content = urllib2.urlopen(req).read() if self.userName.encode(‘utf-8‘) in content: self.isLogon = True #print ‘logon success!‘ self.initFormhashXq() return 1 else: print ‘logon faild!‘ return 0 def initFormhashXq(self): ‘‘‘ 获取formhash和心情 ‘‘‘ content = urllib2.urlopen(self.forumUrl + ‘/plugin.php?id=dsu_paulsign:sign‘).read().decode(‘utf-8‘, ‘ignore‘) rows = re.findall(r‘<input type=\"hidden\" name=\"formhash\" value=\"(.*?)\" />‘, content) if len(rows)!=0: self.formhash = rows[0] #print ‘formhash is: ‘ + self.formhash else: print ‘none formhash!‘ rows = re.findall(r‘<input id=.* type=\"radio\" name=\"qdxq\" value=\"(.*?)\" style=\"display:none\">‘, content) if len(rows)!=0: self.xq = rows[0] print ‘xq is: ‘ + self.xq elif u‘已经签到‘ in content: self.isSign = True print ‘signed before!‘ else: #print ‘none xq!‘ pass def reply(self, tid, subject = u‘‘,msg = u‘支持~~~顶一下下~~嘻嘻‘): ‘‘‘ 回帖 ‘‘‘ url = self.forumUrl + ‘/forum.php?mod=post&action=reply&fid=41&tid=‘+str(tid)+‘&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1‘ postData = urllib.urlencode({‘formhash‘: self.formhash, ‘message‘: msg.encode(‘utf-8‘), ‘subject‘: subject.encode(‘gbk‘), ‘posttime‘:int(time.time()) }) req = urllib2.Request(url,postData) content = urllib2.urlopen(req).read().decode(‘utf-8‘, ‘ignore‘) #print content if u‘发布成功‘ in content: print ‘reply success!‘ else: print ‘reply faild!‘ def publish(self, fid, subject, msg, typeid = 125, imgId = ""): ‘‘‘ 发帖 ‘‘‘ url = self.forumUrl + ‘/forum.php?mod=post&action=newthread&fid=‘+ str(fid) +‘&extra=&topicsubmit=yes‘ """ formhash=d649673a&posttime=1367460177&wysiwyg=1&subject=test&unused%5B%5D=70554 &message=tset123214141&save=&attachnew%5B70555%5D%5Bdescription%5D=&usesig=1&allownoticeauthor=1 """ postData = urllib.urlencode( {‘formhash‘: self.formhash, ‘message‘: msg.encode(‘utf-8‘), ‘subject‘: subject.encode(‘utf-8‘), ‘posttime‘:int(time.time()), ‘addfeed‘:‘1‘, ‘allownoticeauthor‘:‘1‘, ‘checkbox‘:‘0‘, ‘newalbum‘:‘‘, ‘readperm‘:‘‘, ‘rewardfloor‘:‘‘, ‘rushreplyfrom‘:‘‘, ‘rushreplyto‘:‘‘, ‘save‘:‘‘, ‘stopfloor‘:‘‘, #‘typeid‘:typeid, ‘attachnew[%s][description]‘ % imgId: "", ‘uploadalbum‘:‘‘, ‘usesig‘:‘1‘, ‘wysiwyg‘:‘0‘ }) req = urllib2.Request(url,postData) content = urllib2.urlopen(req).read().decode(‘utf-8‘, ‘ignore‘) if subject in content: print ‘publish success!‘ return 1 else: print ‘publish faild!‘ return 0 def sign(self,msg = u‘哈哈,我来签到了!‘): ‘‘‘ 签到 ‘‘‘ if self.isSign: return if self.isLogon and self.xq: url = self.forumUrl + ‘/plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1‘ postData = urllib.urlencode({‘fastreply‘: ‘1‘, ‘formhash‘: self.formhash, ‘qdmode‘: ‘1‘, ‘qdxq‘: self.xq, ‘todaysay‘:msg.encode(‘utf-8‘) }) req = urllib2.Request(url,postData) content = urllib2.urlopen(req).read().decode(‘utf-8‘, ‘ignore‘) #print content if u‘签到成功‘ in content: self.isSign = True print ‘sign success!‘ return print ‘sign faild!‘ def speak(self,msg = u‘hah,哈哈,测试一下!‘): ‘‘‘ 发表心情 ‘‘‘ url = self.forumUrl + ‘/home.php?mod=spacecp&ac=doing&handlekey=doing&inajax=1‘ postData = urllib.urlencode({‘addsubmit‘: ‘1‘, ‘formhash‘: self.formhash, ‘referer‘: ‘home.php‘, ‘spacenote‘: ‘true‘, ‘message‘:msg.encode(‘utf-8‘) }) req = urllib2.Request(url,postData) content = urllib2.urlopen(req).read().encode(‘utf-8‘) #print content if u‘操作成功‘ in content: print ‘speak success!‘ else: print ‘speak faild!‘ def uploadImage(self, imageData, fid=21): imageId = None # get the uid and hash url = self.forumUrl + "/forum.php?mod=post&action=newthread&fid=%d&extra=" % fid data = urllib2.urlopen(url).read().decode(‘utf-8‘, ‘ignore‘) hashReg = re.compile(r"<input type=\"hidden\" name=\"hash\" value=\"(.*?)\">", re.S) uidReg = re.compile(r"discuz_uid = ‘(.*?)‘", re.S) hashRet = hashReg.search( data ).group(1) uid = uidReg.search( data ).group(1) # Upload the image uploadImageUrl = self.forumUrl + "/misc.php?mod=swfupload&operation=upload&simple=1&type=image" refer = self.forumUrl + "/forum.php?mod=post&action=newthread&fid=%d&extra=" % fid randomStr = "7dd" + ‘‘.join( random.sample(string.ascii_lowercase + string.digits, 8) ) CRLF = ‘\r\n‘ #BOUNDARY = mimetools.choose_boundary() BOUNDARY = "---------------------------" + randomStr L = [] L.append(‘--‘ + BOUNDARY) L.append("Content-Disposition: form-data; name=\"uid\"" ) L.append("") L.append(uid) L.append(‘--‘ + BOUNDARY) L.append(‘Content-Disposition: form-data; name=\"hash\"‘) L.append("") L.append(hashRet) L.append(‘--‘ + BOUNDARY) L.append(‘Content-Disposition: form-data; name=\"Filedata\"; filename=\"testpic.jpg\"‘) L.append("Content-Type: image/pjpeg") L.append("") L.append( imageData ) L.append(‘--‘ + BOUNDARY + ‘--‘) L.append("") postData = CRLF.join(str(a) for a in L) #print postData req = urllib2.Request(uploadImageUrl, postData) req.add_header(‘Content-Type‘, ‘multipart/form-data; boundary=%s‘ % BOUNDARY ) req.add_header(‘Content-Length‘, len(postData) ) req.add_header(‘Referer‘, refer ) resp = urllib2.urlopen(req) body = resp.read().decode(‘utf-8‘) bodySp = body.split(‘|‘) if len(bodySp) == 0: return None if bodySp[0] == u‘DISCUZUPLOAD‘ and bodySp[1] == u‘0‘: imageId = bodySp[2] return imageId def isSubExisted(self, fid, subject): url = self.forumUrl + "/forum.php?mod=forumdisplay&fid=%d" % fid content = urllib2.urlopen(url).read() subject = ">" + subject + "<" if subject.encode(‘utf-8‘) in content: return True else: return False if __name__ == ‘__main__‘: url = "http://bbs.cnfol.wh" username = "zhangzhao" password = "zhangzhao" fid = 59 robot = DiscuzAPI(url, username, password) robot.login() print robot.isSubExisted(fid=fid, subject=u‘20170505‘)
标签:too level mime page 间隔 链表 哈哈 random login
原文地址:http://www.cnblogs.com/wangfenphph2/p/7051107.html