def calDictEnd(data, start): st = Stack() if data[start] == ord('d'): st.push(data[start]) start += 1 while not st.isEmpty(): if data[start] == ord('e'): st.pop() start += 1 elif data[start] == ord('l') or data[start] == ord( 'd') or data[start] == ord('i'): st.push(data[start]) start += 1 elif ord('0') <= data[start] <= ord('9'): num = 0 while ord('0') <= data[start] <= ord('9'): num = num * 10 + (data[start] - ord('0')) start += 1 if st.peek() != ord('i'): start += 1 + num # 冒号加字符串长度 elif data[start] == ord('-'): start += 1 else: gl.get_value('logger').logger.error('Unknow character in torrent') exit(10) return start
def login(self): try: # image_file.show() # captcha_text = input('If image can not open in your system, then open the url below in browser\n' # + self._root + image_url + '\n' + 'Input Code:') self.app.getlogindata(self.stationname) # 取消登录,强制退出 if not gl.get_value('logindata')[0]: exit('取消登录') login_data = { 'username': gl.get_value('logindata')[1]['username'], 'password': gl.get_value('logindata')[1]['password'], 'token': gl.get_value('logindata')[1]['secondverify'], } main_page = self._session.post(self._root + 'takelogin.php', login_data, headers=self.headers, timeout=(30, 30)) if main_page.url != self._root + 'index.php': self.logger.error('Login error') return False self._save() except BaseException as e: self.logger.exception(traceback.format_exc()) exit(4) return False return True
def __init__(self, stationname): basepath = 'autopt/' self.stationname = stationname.upper() self.config = gl.get_value('config')[self.stationname] self.logger = gl.get_value('logger').logger self.app = gl.get_value('wxpython') self._session = cloudscraper.create_scraper(delay=5) self.csvfilename = basepath + 'torrentslist/' + self.stationname + '_list.csv' self.webagentfilename = basepath + 'useragent/' + self.stationname + '_webagent' self.cookiefilename = basepath + 'cookies/' + self.stationname + '_cookie' self._root = self.config['root'] self.psk = self.config['passkey'] self.list = [] self.autoptpage = AutoPT_Page self.manager = QBmanage_Reseed.Manager(self.config) self.useragent = '' self.readwebagent() self.headers = {'User-Agent': self.useragent} if self.config['switch']: self._load() if os.path.exists(self.csvfilename): self.logger.debug('Read list.csv') with open(self.csvfilename, 'r', encoding='UTF-8') as f: for line in f.readlines(): self.list.append(line.split(',')[0])
def get_torrent_name(data): try: # return str(libtorrent.torrent_info(libtorrent.bdecode(data)).name()) metainfo = bencode.bdecode(data) # print (metainfo) return metainfo['info']['name'] except BaseException as e: gl.get_value('logger').logger.exception(traceback.format_exc())
def checkptthread(self): if gl.get_value('thread') is not None and gl.get_value( 'thread').is_alive(): # time.sleep(1) wx.CallLater(1000, self.checkptthread) else: gl.get_value('wechat').send(text='AutoPT运行出错,已停止') self.logger.info('检测到线程关闭,异常退出') self.frame.Show() wx.MessageBox('检测到异常线程关闭', "AutoPT") wx.Exit()
def login(self): try: # image_file.show() # captcha_text = input('If image can not open in your system, then open the url below in browser\n' # + self._root + image_url + '\n' + 'Input Code:') self.app.getlogindata(self.stationname) # 取消登录,强制退出 if not gl.get_value('logindata')[0]: exit('取消登录') login_data = { 'username': gl.get_value('logindata')[1]['username'], 'password': gl.get_value('logindata')[1]['password'], # 'otp': gl.get_value('logindata')[1]['secondverify'], 'passan': '', 'passid': '0', 'lang': '0', # 'rememberme': 'yes', } main_page = self._session.post(self._root + 'takelogin.php', login_data, headers=self.headers, timeout=(30, 30)) if main_page.status_code == 200 and main_page.url == self._root + '2fa.php': page = BeautifulSoup(main_page.text, 'lxml') authcode = page.select('input[name=authenticity_token]') if len(authcode) == 0: return False authcode = authcode[0].attrs['value'] uid = page.select('input[name=uid]') if len(uid) == 0: return False uid = uid[0].attrs['value'] login_data = { 'authenticity_token': authcode, 'uid': uid, 'otp': gl.get_value('logindata')[1]['secondverify'], } main_page = self._session.post(self._root + 'take2fa.php', login_data, headers=self.headers, timeout=(30, 30)) if main_page.url != self._root + 'my.php': self.logger.error('Login error') return False self._save() except BaseException as e: self.logger.exception(traceback.format_exc()) exit(4) return False return True
def pages(self): """Return pages in torrents.php :returns: yield ByrPage pages """ # free url self.logger.debug('Get pages') filterurl = 'torrents.php?' page = self.get_url(filterurl) self.logger.debug('Get pages Done') # 监测二次验证导致的登录问题 recheckpage = False n = 0 try: # 防止网页获取失败时的异常 for line in page.find_all('tr', class_='twoupfree_bg'): if n == 0: if not gl.get_value('thread_flag'): return recheckpage = True if not self.config['onlyattendance']: yield self.autoptpage(line, 1) n = 1 else: n -= 1 except BaseException as e: self.logger.exception(traceback.format_exc()) if not gl.get_value('thread_flag'): return n = 0 try: # 防止网页获取失败时的异常 for line in page.find_all('tr', class_='free_bg'): if n == 0: if not gl.get_value('thread_flag'): return recheckpage = True if not self.config['onlyattendance']: yield self.autoptpage(line) n = 1 else: n -= 1 except BaseException as e: self.logger.exception(traceback.format_exc()) if not recheckpage: self.logger.warning( '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!界面没有找到种子标签!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' ) if self.config['onlyattendance']: self.logger.warning('仅签到失败')
def get_torrent_hash40(data): try: start = data.find(b'4:info') + 6 return hashlib.sha1(data[start:calDictEnd(data, start)]).hexdigest() # return str(libtorrent.torrent_info(libtorrent.bdecode(data)).info_hash()) # mangetlink = magneturi.from_torrent_data(data) # mangetlink = mangetlink[mangetlink.find('btih') + 5:mangetlink.find('btih') + 5 + 32] # b16Hash = base64.b16encode(base64.b32decode(mangetlink)) # b16Hash = b16Hash.lower() # b16Hash = str(b16Hash, "utf-8") # return b16Hash except BaseException as e: gl.get_value('logger').logger.exception(traceback.format_exc())
def __init__(self, soup, method=0): """Init variables :soup: Soup """ self.logger = gl.get_value('logger').logger self.method = method self.url = soup.find(class_='name_left').a['href'] self.name = soup.find(class_='name_left').find('img', class_='report')['torrentname'] self.id = soup.find(class_='name_left').find('img', class_='report')['torrent'] self.type = soup.find('td').find('img')['alt'] self.createtime = soup.find_all('td')[-6].text self.createtimestamp = time.mktime(time.strptime(self.createtime, "%Y-%m-%d%H:%M:%S")) self.size = self.tosize(soup.find_all('td')[-4].text) self.seeders = int(soup.find_all('td')[-2].text.split('/')[0]) self.leechers = int(soup.find_all('td')[-2].text.split('\n')[-1]) self.snatched = int(soup.find_all('td')[-3].text.replace('次', '').replace(',', '')) self.lefttime = '' self.futherstamp = -1 try: # 注意,字符串中间这个不是空格 # if self.name.endswith('[email protected]'): # self.name = self.name[:len('[email protected]') * -1] lefttimetext = None for span in soup.find(class_='name_left').find_all('span'): if '剩余' in span.text: lefttimetext = str(span).split('到')[1].split(',')[0] break if lefttimetext is not None: self.lefttime = lefttimetext self.futherstamp = time.mktime(time.strptime(self.lefttime, "%Y年%m月%d日%H点%M分")) except BaseException as e: # 没有限制时间 self.lefttime = '' self.futherstamp = -1
def start(self): """Start spider""" self.logger.info('Start Spider [' + self.stationname + ']') if self.config['onlyattendance']: self.logger.info('仅签到模式') # self.checktorrenttime() # self._load() with open(self.csvfilename, 'a', encoding='UTF-8') as f: try: for page in self.pages: if not gl.get_value('thread_flag'): continue if page.id not in self.list and page.ok: # page.ok为第一次筛选,不符合条件的会再次检查 # 下面方法为第二次筛选,不符合条件的下次不会再检查 # 不符合条件的就不下载,直接添加到csv里 if not self.judgetorrentok(page): self.pageinfotocsv(f, page) self.list.append(page.id) continue # 通过条件后再开始下载 req_dl = self.getdownload(page.id) thash = TorrentInfo.get_torrent_hash40( req_dl.content ) if req_dl.status_code == 200 else '' self.logger.info('Download ' + page.name) self.downloadtorrent(f, page, req_dl, thash) except BaseException as e: self.logger.exception(traceback.format_exc()) self.logger.info('Done')
def tccapi(): ret = "" if request.method == 'POST': data = request.get_data() if data == b"exit": print("Server shutting down...") shutdown_server() return "Server shutting down..." # inferserver #myinserver = gl.get_value("myinserver") inferserver = gl.get_value("inferserver") #print(inferserver) data_pred = inferserver.pre_process(request) ret = inferserver.pridect(data_pred) ret = inferserver.post_process(ret) if not isinstance(ret, str): ret = str(ret) # print("return: ", ret) else: print( "please use post request.such as :curl localhost:8080/tccapi -X POST -d \'{\"img\"/:2}\'" ) return ret
def onExit(self, event): self.SetIcon(wx.Icon(self.ICON), '正在退出...稍等1-2分钟') # 设置图标和标题 self.windowhandler.Hide() self.logger.debug('菜单退出 点击事件') # 退出时记得把logger的句柄移除,否则永远卡死在handler的emit里 self.logger.removeHandler( gl.get_value('logger').loggingRedirectHandler) wx.Exit()
def __init__(self, redirect=False, filename=None): # redirect = True if gl.get_value('config').loglevel == 'debug' else False self.frame = None self.TaskBar = None self.timer = None self.logger = gl.get_value('logger').logger # list是为了引用传参 self.loginflag = [False] wx.App.__init__(self, redirect, filename)
def login(self): try: login_page = self.get_url('login.php') image_url = login_page.find('img', alt='CAPTCHA')['src'] image_hash = login_page.find('input', attrs={'name': 'imagehash'})['value'] self.logger.info('Image url: ' + image_url) self.logger.info('Image hash: ' + image_hash) req = self._session.get(self._root + image_url, headers=self.headers, timeout=(30, 30)) image_file = Image.open(BytesIO(req.content)) # image_file.show() # captcha_text = input('If image can not open in your system, then open the url below in browser\n' # + self._root + image_url + '\n' + 'Input Code:') self.app.getlogindata(self.stationname, image_file) # 取消登录,强制退出 if not gl.get_value('logindata')[0]: exit('取消登录') self.logger.debug('Captcha text: ' + gl.get_value('logindata')[1]['captcha']) login_data = { 'username': gl.get_value('logindata')[1]['username'], 'password': gl.get_value('logindata')[1]['password'], 'imagestring': gl.get_value('logindata')[1]['captcha'], 'imagehash': image_hash } main_page = self._session.post(self._root + 'takelogin.php', login_data, headers=self.headers, timeout=(30, 30)) if main_page.url != self._root + 'index.php': self.logger.error('Login error') return False self._save() except BaseException as e: self.logger.exception(traceback.format_exc()) exit(4) return False return True
def Runqbittorrent(): logger = gl.get_value('logger').logger if gl.get_value('config').qbtpath != '': try: if not CheckProgramStatus('qbittorrent.exe'): logger.debug('未检测到QBitTorrent打开,正在尝试打开') os.startfile(gl.get_value('config').qbtpath) trytime = 60 while trytime > 0 and (not CheckProgramStatus('qbittorrent.exe')): trytime -= 5 logger.info('正在等待QBT启动') time.sleep(5) if trytime <= 0: logger.error('QBT启动失败,异常退出') else: logger.error('QBT启动成功') else: logger.debug('QBitTorrent已在运行') except BaseException as e: logger.exception(traceback.format_exc())
def __init__(self, windowhandler): wx.adv.TaskBarIcon.__init__(self) self.logger = gl.get_value('logger').logger self.SetIcon(wx.Icon(self.ICON), self.TITLE) # 设置图标和标题 self.Bind(wx.EVT_MENU, self.onAbout, id=self.ID_ABOUT) # 绑定“关于”选项的点击事件 self.Bind(wx.EVT_MENU, self.onExit, id=self.ID_EXIT) # 绑定“退出”选项的点击事件 self.Bind(wx.EVT_MENU, self.onShowLog, id=self.ID_SHOW_LOG) # 绑定“显示页面”选项的点击事件 self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.onShowLog) # 绑定“显示页面”选项的点击事件 self.windowhandler = windowhandler
def __init__(self, root, username='', password=''): self._root = root self.logger = gl.get_value('logger').logger self._session = requests.session() self._session.headers = { 'User-Agent': 'Mozilla/5.0 AppleWebKit/537.36 Chrome/79.0.3945.16 Safari/537.36 Edg/79.0.309.11' } if username != '' and password != '': if not self.login(username, password): self.logger.warning('QBitTorrent Login Fails') exit(8)
def login(self): try: self.app.getlogindata(self.stationname) # 取消登录,强制退出 if not gl.get_value('logindata')[0]: exit('取消登录') login_data = { 'username': gl.get_value('logindata')[1]['username'], 'password': gl.get_value('logindata')[1]['password'], # 'verify_code': gl.get_value('logindata')[1]['secondverify'] } header = { 'User-Agent': self.useragent, 'Referer': 'https://pt.m-team.cc/takelogin.php' } main_page = self._session.post(self._root + 'takelogin.php', data=login_data, headers=header, timeout=(30, 30)) if main_page.status_code == 200 and 'verify.php' in main_page.url: login_data = { 'otp': gl.get_value('logindata')[1]['secondverify'] } sec_page = self._session.post(self._root + 'verify.php', login_data, headers=self.headers, timeout=(30, 30)) if sec_page.url != self._root + 'index.php': self.logger.error('Login error') return False else: self._save() return True except BaseException as e: self.logger.exception(traceback.format_exc()) exit(4) return False return False
def __init__(self): formatter = logging.Formatter( '%(asctime)10s [%(filename)s %(levelname)s:%(lineno)s-%(funcName)s]%(message)s' ) self._logger = logging.getLogger("AutoPT") console = logging.StreamHandler() console.setLevel(logging.DEBUG) console.setFormatter(formatter) th = handlers.TimedRotatingFileHandler( filename='log/Run.log', when='midnight', backupCount=gl.get_value('config').logsavetime, encoding='utf-8') # 往文件里写入#指定间隔时间自动生成文件的处理器 th.setLevel(logging.DEBUG) # 实例化TimedRotatingFileHandler # interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种: # S 秒 # M 分 # H 小时、 # D 天、 # W 每星期(interval==0时代表星期一) # midnight 每天凌晨 th.setFormatter(formatter) # 设置文件里写入的格式 self.loggingRedirectHandler = LogginRedirectHandler() self.loggingRedirectHandler.setFormatter(formatter) if gl.get_value('config').loglevel == 'info': self.loggingRedirectHandler.setLevel(logging.INFO) else: self.loggingRedirectHandler.setLevel(logging.DEBUG) self._logger.addHandler(th) self._logger.addHandler(console) self._logger.addHandler(self.loggingRedirectHandler) self._logger.setLevel(logging.DEBUG)
def login(self): try: self.app.getlogindata(self.stationname) # 取消登录,强制退出 if not gl.get_value('logindata')[0]: exit('取消登录') login_data = { 'username': gl.get_value('logindata')[1]['username'], 'password': gl.get_value('logindata')[1]['password'], 'logout': 'forever', } main_page = self._session.post(self._root + 'takelogin.php', login_data, headers=self.headers) if main_page.url != self._root + 'index.php': self.logger.error('Login error') return False self._save() except BaseException as e: self.logger.exception(traceback.format_exc()) exit(4) return False return True
def pages(self): """Return pages in torrents.php :returns: yield ByrPage pages """ # free url self.logger.debug('Get pages') filterurl = 'torrents_new.php' page = self.get_url(filterurl) self.logger.debug('Get pages Done') # 自动签到 self.attendance(page) # 监测二次验证导致的登录问题 recheckpage = False n = 1 try: # 防止网页获取失败时的异常 for line in page.find('table', class_='torrents').find_all('tr'): if n == 0: if not gl.get_value('thread_flag'): return recheckpage = True if line.find('img', class_='pro_free2up') is not None and \ line.find('img', class_='hitandrun') is None and not self.config['onlyattendance']: yield self.autoptpage(line, 1) n = 1 elif line.find('img', class_='pro_free') is not None and \ line.find('img', class_='hitandrun') is None and not self.config['onlyattendance']: yield self.autoptpage(line) n = 1 else: n -= 1 except BaseException as e: # self.logger.exception(traceback.format_exc()) self.logger.debug(e) if not recheckpage: self.logger.warning( '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!界面没有找到种子标签!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' ) if self.config['onlyattendance']: self.logger.warning('仅签到失败')
def __init__(self, soup, method=0): """Init variables :soup: Soup """ self.logger = gl.get_value('logger').logger self.method = method url = soup.find(class_='torrentname').a['href'] self.name = soup.find(class_='torrentname').b.text # 注意,字符串中间这个不是空格 if self.name.endswith('[email protected]'): self.name = self.name[:len('[email protected]') * -1] self.type = soup.img['title'] self.createtime = soup.find_all('td')[-6].text self.createtimestamp = self.totimestamp(self.createtime) self.size = self.tosize(soup.find_all('td')[-5].text) self.seeders = int(soup.find_all('td')[-4].text.replace(',', '')) self.leechers = int(soup.find_all('td')[-3].text.replace(',', '')) self.snatched = int(soup.find_all('td')[-2].text.replace(',', '')) self.id = parse_qs(urlparse(url).query)['id'][0] self.futherstamp = -1 self.lefttime = ''
def __init__(self, soup, method=0): """Init variables :soup: Soup """ self.logger = gl.get_value('logger').logger self.method = method self.url = soup.find(class_='torrentname').a['href'] self.name = soup.find(class_='torrentname').b.text # 注意,字符串中间这个不是空格 if self.name.endswith('[email protected]'): self.name = self.name[:len('[email protected]') * -1] self.type = soup.img['title'] self.createtime = soup.find_all('td')[-8].text self.createtimestamp = self.totimestamp(self.createtime) self.size = self.tosize(soup.find_all('td')[-7].text) self.seeders = int(soup.find_all('td')[-6].text.replace(',', '')) self.leechers = int(soup.find_all('td')[-5].text.replace(',', '')) self.snatched = int(soup.find_all('td')[-4].text.replace(',', '')) self.id = parse_qs(urlparse(self.url).query)['id'][0] try: # 注意,字符串中间这个不是空格 if self.name.endswith('[email protected]'): self.name = self.name[:len('[email protected]') * -1] self.lefttime = [ tmp_span.text for tmp_span in soup.find( class_='torrentname').find_all('span') if self.matchlefttimestr(tmp_span.text) ] if len(self.lefttime) == 1: self.lefttime = self.lefttime[0] self.futherstamp = self.mystrptime(self.lefttime) else: self.lefttime = '' self.futherstamp = -1 except BaseException as e: # 没有限制时间 self.lefttime = '' self.futherstamp = -1 pass
def __init__(self): wx.Frame.__init__(self, parent=None, id=1, title='AutoPT', pos=wx.DefaultPosition, size=(1000, 700), style=wx.CAPTION | wx.CLOSE_BOX, name='frame') self.SetIcon(wx.Icon(self.ICON)) # 设置图标和标题 self.SetForegroundColour(wx.WHITE) self.SetBackgroundColour(wx.WHITE) self.textctrl = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY) self.textctrl.SetForegroundColour(wx.BLACK) self.textctrl.SetBackgroundColour(wx.WHITE) self.Bind(wx.EVT_CLOSE, self.onExit) # 绑定“退出”选项的点击事件 self.logger = gl.get_value('logger').logger
def run(): logger = gl.get_value('logger').logger try: maxtime = 1 auto_byr = None auto_tju = None auto_pter = None auto_mteam = None auto_pthome = None auto_frds = None auto_ttg = None auto_lemonhd = None Runqbittorrent() refconfig = { 'name': 'reseed', 'ref': { 'byr': auto_byr, 'tju': auto_tju, 'mteam': auto_mteam, 'pter': auto_pter, 'pthome': auto_pthome, 'frds': auto_frds, 'ttg': auto_ttg, 'lemonhd': auto_lemonhd, } } gl.set_value('allref', refconfig) auto_byr = AutoPT_BYR() refconfig['ref']['byr'] = auto_byr auto_tju = AutoPT_TJU() refconfig['ref']['tju'] = auto_tju auto_pter = AutoPT_PTER() refconfig['ref']['pter'] = auto_pter auto_mteam = AutoPT_MTEAM() refconfig['ref']['mteam'] = auto_mteam auto_pthome = AutoPT_PTHOME() refconfig['ref']['pthome'] = auto_pthome auto_frds = AutoPT_FRDS() refconfig['ref']['frds'] = auto_frds auto_ttg = AutoPT_TTG() refconfig['ref']['ttg'] = auto_ttg auto_lemonhd = AutoPT_LEMONHD() refconfig['ref']['lemonhd'] = auto_lemonhd if gl.get_value('config').switch('byr'): if maxtime % gl.get_value('config').intervaltime('byr') != 0: maxtime *= gl.get_value('config').intervaltime('byr') if gl.get_value('config').switch('tju'): if maxtime % gl.get_value('config').intervaltime('tju') != 0: maxtime *= gl.get_value('config').intervaltime('tju') if gl.get_value('config').switch('pter'): if maxtime % gl.get_value('config').intervaltime('pter') != 0: maxtime *= gl.get_value('config').intervaltime('pter') if gl.get_value('config').switch('mteam'): if maxtime % gl.get_value('config').intervaltime('mteam') != 0: maxtime *= gl.get_value('config').intervaltime('mteam') if gl.get_value('config').switch('pthome'): if maxtime % gl.get_value('config').intervaltime('pthome') != 0: maxtime *= gl.get_value('config').intervaltime('pthome') if gl.get_value('config').switch('frds'): if maxtime % gl.get_value('config').intervaltime('frds') != 0: maxtime *= gl.get_value('config').intervaltime('frds') if gl.get_value('config').switch('ttg'): if maxtime % gl.get_value('config').intervaltime('ttg') != 0: maxtime *= gl.get_value('config').intervaltime('ttg') if gl.get_value('config').switch('lemonhd'): if maxtime % gl.get_value('config').intervaltime('lemonhd') != 0: maxtime *= gl.get_value('config').intervaltime('lemonhd') manager = Manager() if maxtime % (6 * 3600) != 0: maxtime *= (6 * 3600) counttime = 0 while gl.get_value('thread_flag'): if gl.get_value('config').switch( 'reseed') and counttime % 120 == 0: manager.checkalltorrentexist() manager.recheck() if gl.get_value('config').switch( 'reseed') and counttime % (3 * 3600) == 0: manager.checkprttracker() manager.recheckall() manager.checkemptydir() if gl.get_value('thread_flag') and gl.get_value('config').switch( 'lemonhd') and counttime % gl.get_value( 'config').intervaltime('lemonhd') == 0: auto_lemonhd.start() pass if gl.get_value('thread_flag') and gl.get_value('config').switch( 'ttg' ) and counttime % gl.get_value('config').intervaltime('ttg') == 0: auto_ttg.start() pass if gl.get_value('thread_flag') and gl.get_value('config').switch( 'frds' ) and counttime % gl.get_value('config').intervaltime('frds') == 0: auto_frds.start() pass if gl.get_value('thread_flag') and gl.get_value('config').switch( 'pthome') and counttime % gl.get_value( 'config').intervaltime('pthome') == 0: auto_pthome.start() if gl.get_value('thread_flag') and gl.get_value('config').switch( 'mteam') and counttime % gl.get_value( 'config').intervaltime('mteam') == 0: auto_mteam.start() if gl.get_value('thread_flag') and gl.get_value('config').switch( 'tju' ) and counttime % gl.get_value('config').intervaltime('tju') == 0: auto_tju.start() if gl.get_value('thread_flag') and gl.get_value('config').switch( 'pter' ) and counttime % gl.get_value('config').intervaltime('pter') == 0: auto_pter.start() if gl.get_value('thread_flag') and gl.get_value('config').switch( 'byr' ) and counttime % gl.get_value('config').intervaltime('byr') == 0: auto_byr.start() counttime = (1 + counttime) % maxtime time.sleep(1) except BaseException: logger.exception(traceback.format_exc())
def __init__(self, token): self.token = token self._root = 'https://iyuu.cn/' + self.token + '.send' self._session = requests.session() self.logger = gl.get_value('logger').logger
time.sleep(5) if trytime <= 0: logger.error('QBT启动失败,异常退出') else: logger.error('QBT启动成功') else: logger.debug('QBitTorrent已在运行') except BaseException as e: logger.exception(traceback.format_exc()) if __name__ == '__main__': gl._init() gl.set_value('thread_flag', True) try: gl.set_value('config', Myconfig.Config()) gl.set_value('logger', Mylogger.Mylogger()) gl.set_value('wechat', iyuu(gl.get_value('config').token)) gl.set_value('thread', Thread(target=run)) app = BGIcon.MyWindows() gl.set_value('wxpython', app) gl.get_value('logger').logger.info('程序启动') gl.get_value('thread').start() app.MainLoop() except BaseException: traceback.print_exc(file=open('treace.txt', 'w+')) # gl.get_value('logger').logger.exception(traceback.format_exc()) gl.set_value('thread_flag', False)
def emit(self, record): msg = self.format(record) gl.get_value('logwindow').frame.textctrl.AppendText(msg + '\n')
def pages(self): """Return pages in torrents.php :returns: yield ByrPage pages """ # free url self.logger.debug('Get Media pages') filterurl = 'browse.php?c=M' page = self.get_url(filterurl) self.logger.debug('Get pages Done') # 自动签到 self.attendance(page) # 监测二次验证导致的登录问题 recheckpage = False n = 1 try: # 防止网页获取失败时的异常 for line in page.find('table', id='torrent_table').find_all('tr'): # print(line) # print('\n\n\n\n\n') if n == 0: recheckpage = True if line.find('img', src='/pic/ico_2xfree.gif') is not None and \ line.find('img', src='/pic/hit_run.gif') is None and not self.config['onlyattendance']: yield self.autoptpage(line, 1) elif line.find('img', src='/pic/ico_free.gif') is not None and \ line.find('img', src='/pic/hit_run.gif') is None and not self.config['onlyattendance']: yield self.autoptpage(line) else: n -= 1 except BaseException as e: # self.logger.exception(traceback.format_exc()) self.logger.debug(e) if not recheckpage: self.logger.warning( '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!界面没有找到种子标签!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' ) if self.config['onlyattendance']: self.logger.warning('仅签到失败') elif recheckpage and self.config['onlyattendance']: return if not gl.get_value('thread_flag'): return self.logger.debug('Get Game&Ware pages') filterurl = 'browse.php?c=G' page = self.get_url(filterurl) self.logger.debug('Get pages Done') # 监测二次验证导致的登录问题 recheckpage = False n = 1 try: # 防止网页获取失败时的异常 for line in page.find('table', id='torrent_table').find_all('tr'): # print(line) # print('\n\n\n\n\n') if n == 0: recheckpage = True if line.find('img', src='/pic/ico_2xfree.gif') is not None and \ line.find('img', src='/pic/hit_run.gif') is None and not self.config['onlyattendance']: yield self.autoptpage(line, 1) elif line.find('img', src='/pic/ico_free.gif') is not None and \ line.find('img', src='/pic/hit_run.gif') is None and not self.config['onlyattendance']: yield self.autoptpage(line) else: n -= 1 except BaseException as e: # self.logger.exception(traceback.format_exc()) self.logger.debug(e) if not recheckpage: self.logger.warning( '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!界面没有找到种子标签!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' ) if self.config['onlyattendance']: self.logger.warning('仅签到失败') elif recheckpage and self.config['onlyattendance']: return if not gl.get_value('thread_flag'): return