コード例 #1
0
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())
コード例 #2
0
ファイル: logic_from_site.py プロジェクト: k45734/rss2
    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