def api_download(bbs_id): logger.debug('api download :%s', bbs_id) try : rss_id, index = bbs_id.split('_') entity = ModelBbs2.get(id=int(rss_id)).as_dict() #logger.debug(entity) scheduler_instance = ModelScheduler2.get2(sitename=entity['site'], board_id=entity['board']) data = [ entity['url'], entity['files'][int(index)][0], entity['files'][int(index)][1] ] site_instance = ModelSite2.get(name=entity['site']).info if 'USE_SELENIUM' in site_instance['EXTRA']: from system import SystemLogicSelenium driver = SystemLogicSelenium.get_driver() SystemLogicSelenium.get_pagesoruce_by_selenium(data[0], site_instance['SELENIUM_WAIT_TAG']) logger.debug(data[1]) logger.debug('selenium download go..') driver.get(data[1]) logger.debug('selenium wait before...') #SystemLogicSelenium.waitUntilDownloadCompleted(120) #SystemLogicSelenium.waitUntilDownloadCompleted(10) import time time.sleep(10) logger.debug('selenium wait end') files = SystemLogicSelenium.get_downloaded_files() logger.debug(files) # 파일확인 filename_no_ext = os.path.splitext(data[2].split('/')[-1]) file_index = 0 for idx, value in enumerate(files): if value.find(filename_no_ext[0]) != -1: file_index = idx break logger.debug('fileindex : %s', file_index) content = SystemLogicSelenium.get_file_content(files[file_index]) byteio = io.BytesIO() byteio.write(content) filedata = byteio.getvalue() return send_file( io.BytesIO(filedata), mimetype='application/octet-stream', as_attachment=True, attachment_filename=data[2]) return download2(data, scheduler_instance) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def __get_download_list(html, tree, site_instance, item): download_list = [] try: if 'DOWNLOAD_REGEX' not in site_instance.info: return download_list #logger.debug(html) #tmp = html.find('a href="https://www.rgtorrent.me/bbs/download.php') #if tmp != -1: # logger.debug(html[tmp-300:tmp+300]) #logger.debug(site_instance.info['DOWNLOAD_REGEX']) tmp = re.compile(site_instance.info['DOWNLOAD_REGEX'], re.MULTILINE).finditer(html) for t in tmp: #logger.debug(t.group('url')) #logger.debug(t.group('filename')) if t.group('filename').strip() == '': continue entity = {} entity['link'] = py_urllib.unquote( t.group('url').strip()).strip() entity['link'] = unescape(entity['link']) logger.debug(entity['link']) entity['filename'] = py_urllib.unquote( t.group('filename').strip()) entity['filename'] = unescape(entity['filename']) if 'DOWNLOAD_URL_SUB' in site_instance.info: logger.debug(entity['link']) entity['link'] = re.sub( site_instance.info['DOWNLOAD_URL_SUB'][0], site_instance.info['DOWNLOAD_URL_SUB'][1].format( URL=site_instance.info['TORRENT_SITE_URL']), entity['link']).strip() if not entity['link'].startswith('http'): form = '%s%s' if entity['link'].startswith( '/') else '%s/%s' entity['link'] = form % ( site_instance.info['TORRENT_SITE_URL'], entity['link']) if 'FILENAME_SUB' in site_instance.info: entity['filename'] = re.sub( site_instance.info['FILENAME_SUB'][0], site_instance.info['FILENAME_SUB'][1], entity['filename']).strip() exist = False for tt in download_list: if tt['link'] == entity['link']: exist = True break if not exist: if app.config['config']['is_sjva_server'] and len( item['magnet']) > 0: # or True: try: ext = os.path.splitext( entity['filename'])[1].lower() #item['magnet'] if ext in ['.smi', '.srt', '.ass']: #if True: import io if 'USE_SELENIUM' in site_instance.info[ 'EXTRA']: from system import SystemLogicSelenium driver = SystemLogicSelenium.get_driver() driver.get(entity['link']) import time time.sleep(10) files = SystemLogicSelenium.get_downloaded_files( ) logger.debug(files) # 파일확인 filename_no_ext = os.path.splitext( entity['filename'].split('/')[-1]) file_index = 0 for idx, value in enumerate(files): if value.find( filename_no_ext[0]) != -1: file_index = idx break logger.debug('fileindex : %s', file_index) content = SystemLogicSelenium.get_file_content( files[file_index]) byteio = io.BytesIO() byteio.write(content) else: data = LogicFromSite.get_html( entity['link'], referer=item['url'], stream=True) byteio = io.BytesIO() for chunk in data.iter_content(1024): byteio.write(chunk) from discord_webhook import DiscordWebhook, DiscordEmbed webhook_url = app.config['config'][ 'rss_subtitle_webhook'] text = '%s\n<%s>' % (item['title'], item['url']) webhook = DiscordWebhook(url=webhook_url, content=text) webhook.add_file(file=byteio.getvalue(), filename=entity['filename']) response = webhook.execute() discord = response.json() logger.debug(discord) if 'attachments' in discord: entity['direct_url'] = discord[ 'attachments'][0]['url'] except Exception as e: logger.debug('Exception:%s', e) logger.debug(traceback.format_exc()) download_list.append(entity) return download_list except Exception as e: logger.debug('Exception:%s', e) logger.debug(traceback.format_exc()) return download_list