Пример #1
0
def first_menu(sub): 
    logger.debug('DETAIL %s %s', package_name, sub)
    if sub == 'setting':
        arg = ModelSetting.to_dict()
        arg['package_name']  = package_name
        arg['scheduler'] = str(scheduler.is_include(package_name))
        arg['is_running'] = str(scheduler.is_running(package_name))
        ddns = SystemModelSetting.get('ddns')
        arg['rss_api'] = '%s/%s/api/rss' % (ddns, package_name)
        if SystemModelSetting.get_bool('auth_use_apikey'):
            arg['rss_api'] += '?apikey=%s' % SystemModelSetting.get('auth_apikey')
        return render_template('%s_setting.html' % package_name, sub=sub, arg=arg)
    elif sub == 'list':
        arg = {'package_name' : package_name}
        arg['is_torrent_info_installed'] = False
        try:
            import torrent_info
            arg['is_torrent_info_installed'] = True
        except Exception as e: 
            pass
        arg['is_available_normal_download'] = False
        try:
            import downloader
            arg['is_available_normal_download'] = downloader.Logic.is_available_normal_download()
        except Exception as e: 
            pass
        arg['apikey'] = ''
        if SystemModelSetting.get_bool('auth_use_apikey'):
            arg['apikey'] = SystemModelSetting.get('auth_apikey')
        arg['ddns'] = SystemModelSetting.get('ddns')
        arg['show_log'] = ModelSetting.get('show_log')
        return render_template('%s_list.html' % package_name, arg=arg)
    elif sub == 'log':
        return render_template('log.html', package=package_name)
    return render_template('sample.html', title='%s - %s' % (package_name, sub))
Пример #2
0
def show_menu():
    from flask import request
    from system.model import ModelSetting as SystemModelSetting
    if SystemModelSetting.get_bool('hide_menu'):
        if request.full_path.find('/login') != -1:
            return False
    return True
Пример #3
0
 def get_m3uall():
     try:
         from system.model import ModelSetting as SystemModelSetting
         apikey = None
         if SystemModelSetting.get_bool('auth_use_apikey'):
             apikey = SystemModelSetting.get('auth_apikey')
         m3u = '#EXTM3U\n'
         idx = 1
         for c in LogicKlive.get_channel_list():
             url = '{ddns}/{package_name}/api/url.m3u8?m=url&s={source}&i={source_id}'.format(
                 ddns=SystemModelSetting.get('ddns'),
                 package_name=package_name,
                 source=c.source,
                 source_id=c.source_id)
             if apikey is not None:
                 url += '&apikey=%s' % apikey
             if c.is_tv:
                 m3u += M3U_FORMAT % (c.source + '|' + c.source_id, c.title,
                                      c.icon, c.source, idx, idx,
                                      c.source + ' ' + c.title, url)
             else:
                 m3u += M3U_RADIO_FORMAT % (
                     c.source + '|' + c.source_id, c.title, c.icon,
                     c.source, idx, idx, c.source + ' ' + c.title, url)
             idx += 1
         return m3u
     except Exception as e:
         logger.error('Exception:%s', e)
         logger.error(traceback.format_exc())
Пример #4
0
def first_menu(sub):
    try:
        if sub == 'setting':
            from system.model import ModelSetting as SystemModelSetting
            arg = ModelSetting.to_dict()
            arg['ddns'] = SystemModelSetting.get('ddns')
            arg['url_epg'] = '%s/epg/api/%s' % (arg['ddns'], package_name)
            arg['url_m3u'] = '%s/%s/api/m3u?profile=pass' % (arg['ddns'],
                                                             package_name)
            apikey = SystemModelSetting.get('auth_apikey')
            if SystemModelSetting.get_bool('auth_use_apikey'):
                arg['url_epg'] += '?apikey=%s' % apikey
                arg['url_m3u'] += '&apikey=%s' % apikey
            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        elif sub == 'list':
            arg = ModelSetting.to_dict()
            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        elif sub == 'proxy':
            return redirect('/%s/proxy/discover.json' % package_name)
        elif sub == 'log':
            return render_template('log.html', package=package_name)
        return render_template('sample.html',
                               title='%s - %s' % (package_name, sub))
    except Exception as e:
        logger.error('Exception:%s', e)
        logger.error(traceback.format_exc())
Пример #5
0
    def get_scheduler_list():
        try:
            ret = []
            items = ModelScheduler2.get_list()
            for item in items:
                last = item.get_last_bbs()
                tmp = item.as_dict()
                tmp['last'] = last.as_dict() if last is not None else None
                tmp['broad_url'] = LogicFromSite.get_board_url(
                    item.site, item.board_id, 1)
                tmp['site'] = item.site.as_dict()
                tmp['api'] = '%s/%s/api/board/%s/%s' % (SystemModelSetting.get(
                    'ddns'), package_name, item.site.name, item.board_id)
                if SystemModelSetting.get_bool('auth_use_apikey'):
                    tmp['api'] += '?apikey=%s' % SystemModelSetting.get(
                        'auth_apikey')
                if last is not None:
                    tmp['one_day_more'] = (last.created_time <
                                           datetime.now() + timedelta(days=-1))
                ret.append(tmp)
            return ret

            #return ModelScheduler2.get_list(by_dict=True)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #6
0
    def add_download_sub(db_id, index):
        try:
            import downloader
            item = ModelMovieItem.get_by_id(db_id)
            is_available_normal_download = downloader.Logic.is_available_normal_download(
            )
            if is_available_normal_download and item.sub is not None:
                for idx, dummy in enumerate(item.sub):
                    if index == -1 or idx == index:
                        url = '%s/%s/api/attach?id=%s_%s' % (
                            SystemModelSetting.get('ddns'), package_name,
                            item.id, idx)
                        if SystemModelSetting.get_bool('auth_use_apikey'):
                            url += '&apikey=%s' % SystemModelSetting.get(
                                'auth_apikey')

                        downloader.Logic.add_download2(
                            url,
                            ModelSetting.get('torrent_program'),
                            ModelSetting.get('path'),
                            request_type=package_name,
                            request_sub_type='',
                            server_id='%s_%s_%s' %
                            (item.server_id, item.file_count, item.total_size),
                            magnet=item.magnet)
                return True
            return False
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
            return False
Пример #7
0
def first_menu(sub):
    if sub == 'setting':
        try:
            arg = ModelSetting.to_dict()
            ddns = SystemModelSetting.get('ddns')
            arg['m3u'] = '%s/%s/api/m3u' % (ddns, package_name)
            arg['xmltv'] = '%s/epg/api/%s' % (ddns, package_name)
            arg['proxy'] = '%s/%s/proxy' % (ddns, package_name)
            if SystemModelSetting.get_bool('auth_use_apikey'):
                apikey = SystemModelSetting.get('auth_apikey')
                arg['m3u'] += '?apikey={apikey}'.format(apikey=apikey)
                arg['xmltv'] += '?apikey={apikey}'.format(apikey=apikey)
            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
    elif sub == 'channel':
        try:
            arg = {}
            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
    elif sub == 'log':
        return render_template('log.html', package=package_name)
    elif sub == 'proxy':
        return redirect('/%s/proxy/discover.json' % package_name)
    return render_template('sample.html',
                           title='%s - %s' % (package_name, sub))
Пример #8
0
def second_menu(sub, sub2):
    try:
        arg = ModelSetting.to_dict()
        arg['package_name']  = package_name
        if sub == 'direct':
            if sub2 == 'setting':
                return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg)
            elif sub2 in ['request']:
                return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg)
        elif sub == 'rss':
            if sub2 == 'setting':
                arg['sub']  = sub
                arg['scheduler'] = str(scheduler.is_include('%s_%s' % (package_name, sub)))
                arg['is_running'] = str(scheduler.is_running('%s_%s' % (package_name, sub)))
                from system.model import ModelSetting as SystemModelSetting
                ddns = SystemModelSetting.get('ddns')
                arg['rss_api'] = '%s/%s/api/%s' % (ddns, package_name, sub)
                if SystemModelSetting.get_bool('auth_use_apikey'):
                    arg['rss_api'] += '?apikey=%s' % SystemModelSetting.get('auth_apikey')
                return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg)
            elif sub2 in ['job', 'list']:
                arg['is_available_normal_download'] = False
                try:
                    import downloader
                    arg['is_available_normal_download'] = downloader.Logic.is_available_normal_download()
                except:
                    pass
                if sub2 == 'list':
                    arg['jobs'] = ModelOffcloud2Job.get_list(by_dict=True)
                return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg)
        elif sub == 'cache':
            if sub2 == 'setting':
                arg['sub'] = sub
                from system.model import ModelSetting as SystemModelSetting
                ddns = SystemModelSetting.get('ddns')
                arg['rss_api'] = '%s/%s/api/%s' % (ddns, package_name, sub)
                if SystemModelSetting.get_bool('auth_use_apikey'):
                    arg['rss_api'] += '?apikey=%s' % SystemModelSetting.get('auth_apikey')
                return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg)
            elif sub2 == 'list':
                arg['type'] = ['KTV', 'KTV_ETC', 'MOVIE', 'MOVIE_ETC', 'MUSIC', 'SHOW', 'ANI', 'PROGRAM', 'JAV_CENSORED_DMM', 'JAV_CENSORED_JAVDB', 'JAV_CENSORED_ETC', 'JAV_UNCENSORED', 'AV_WEST', 'AV_EAST', 'ETC']
                return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg)
        return render_template('sample.html', title='%s - %s - %s' % (package_name, sub, sub2))
    except Exception as e: 
        logger.error('Exception:%s', e)
        logger.error(traceback.format_exc())
Пример #9
0
    def get_m3u(for_tvh=False, m3u_format=None, group=None, quality=None):
        try:
            #logger.debug(m3u_format)
            from system.model import ModelSetting as SystemModelSetting
            apikey = None
            if SystemModelSetting.get_bool('auth_use_apikey'):
                apikey = SystemModelSetting.get('auth_apikey')
            ddns = SystemModelSetting.get('ddns')
            m3u = '#EXTM3U\n'
            query = db.session.query(ModelCustom)
            query = query.order_by(ModelCustom.number)
            query = query.order_by(ModelCustom.epg_id)
            saved_channeld_list = query.all()

            for c in saved_channeld_list:
                if quality is None:
                    quality = c.quality

                url = '%s/%s/api/url.m3u8?m=url&s=%s&i=%s&q=%s' % (
                    ddns, package_name, c.source, c.source_id, quality)
                if apikey is not None:
                    url += '&apikey=%s' % apikey
                #if c.epg_entity.is_tv:
                if for_tvh:
                    #pipe:///usr/bin/ffmpeg -loglevel fatal -i [RTSP주소] -vcodec copy -acodec copy -metadata service_provider=xxx -metadata service_name=yyy -f mpegts -tune zerolatency pipe:1
                    #url = 'pipe://%s -i "%s" -c copy -metadata service_provider=sjva_klive -metadata service_name="%s" -f mpegts -tune zerolatency pipe:1' % ('ffmpeg', url, c.title)
                    url = 'pipe://%s -i "%s" -c copy -metadata service_provider=sjva_klive -metadata service_name="%s" -c:v copy -c:a aac -b:a 128k -f mpegts -tune zerolatency pipe:1' % (
                        'ffmpeg', url, c.title)

                #m3u += M3U_FORMAT % (c.source+'|' + c.source_id, c.title, c.epg_entity.icon, c.source, c.source + ' ' + c.title, url)

                import epg
                ins = epg.ModelEpgMakerChannel.get_instance_by_name(c.epg_name)
                #m3u += M3U_FORMAT % (c.source+'|' + c.source_id, c.title, c.epg_entity.icon, c.source, c.title, url)
                icon = '' if ins is None else ins.icon
                if icon is None:
                    icon = c.icon
                #if c.is_tv:
                #    #m3u += M3U_FORMAT % (c.source+'|' + c.source_id, c.title, c.icon, c.group, idx, idx, c.source + ' ' + c.title, url)
                #    m3u += M3U_FORMAT % (c.source+'|' + c.source_id, c.title, c.icon, c.group, c.number, c.number, c.title, url)
                #else:
                #    m3u += M3U_RADIO_FORMAT % (c.source+'|'+c.source_id, c.title, c.icon, c.group, idx, idx, c.source + ' ' + c.title, url)
                #logger.debug(c.group)
                tvg_name = c.title
                if m3u_format == '1':
                    tvg_name = '%s. %s' % (str(c.number).zfill(3), c.title)
                group_name = c.group
                if group is not None:
                    group_name = '' if group == 'EMPTY' else group
                m3u += M3U_FORMAT % (c.source + '|' + c.source_id, tvg_name,
                                     icon, group_name, c.number, c.number,
                                     c.title, url)

            return m3u
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #10
0
def first_menu(sub): 
    if sub == 'setting':
        arg = ModelSetting.to_dict()
        arg['package_name']  = package_name
        arg['tmp_pb_api'] = '%s/%s/api/podbbang/%s' % (SystemModelSetting.get('ddns'), package_name, '12548')
        if SystemModelSetting.get_bool('auth_use_apikey'):
            arg['tmp_pb_api'] += '?apikey=%s' % SystemModelSetting.get('auth_apikey')
        return render_template('{package_name}_{sub}.html'.format(package_name=package_name, sub=sub), arg=arg)
    elif sub == 'log':
        return render_template('log.html', package=package_name)
    return render_template('sample.html', title='%s - %s' % (package_name, sub))
Пример #11
0
    def make_vod_m3u(cls):
        try:
            from lxml import etree as ET
            from system.model import ModelSetting as SystemModelSetting

            data = "#EXTM3U\n"
            root = ET.Element('tv')
            root.set('generator-info-name', "wavve")
            form = '#EXTINF:-1 tvg-id="{contentid}" tvg-name="{title}" tvh-chno="{channel_number}" tvg-logo="" group-title="웨이브 최신 VOD",{title}\n{url}\n'
            ch_number = 1
            for page in range(1, ModelSetting.get_int('wavve_vod_page') + 1):
                vod_list = Wavve.vod_newcontents(page=page)['list']
                for info in vod_list:
                    title = info['programtitle']
                    if info['episodenumber'] != '':
                        title += ' (%s회)' % info['episodenumber']
                    tmp = info['episodetitle'].find('Quick VOD')
                    if tmp != -1:
                        title += info['episodetitle'][tmp - 2:]

                    video_url = '%s/%s/wavve/api/streaming.m3u8?contentid=%s&type=%s' % (
                        SystemModelSetting.get('ddns'), package_name,
                        info['contentid'], info['type'])
                    if SystemModelSetting.get_bool('auth_use_apikey'):
                        video_url += '&apikey=%s' % SystemModelSetting.get(
                            'auth_apikey')
                    data += form.format(contentid=info['contentid'],
                                        title=title,
                                        channel_number=ch_number,
                                        logo='',
                                        url=video_url)

                    channel_tag = ET.SubElement(root, 'channel')
                    channel_tag.set('id', info['contentid'])
                    #channel_tag.set('repeat-programs', 'true')

                    display_name_tag = ET.SubElement(channel_tag,
                                                     'display-name')
                    display_name_tag.text = '%s(%s)' % (title, ch_number)
                    display_name_tag = ET.SubElement(channel_tag,
                                                     'display-number')
                    display_name_tag.text = str(ch_number)
                    ch_number += 1

            tree = ET.ElementTree(root)
            ret = ET.tostring(root,
                              pretty_print=True,
                              xml_declaration=True,
                              encoding="utf-8")
            return data, ret
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #12
0
 def get_group_list():
     try:
         lists = ModelGroup2.get_list(by_dict=True)
         for item in lists:
             item['rss'] = '%s/%s/api/group/%s' % (SystemModelSetting.get(
                 'ddns'), package_name, item['groupname'])
             if SystemModelSetting.get_bool('auth_use_apikey'):
                 item['rss'] += '?apikey=%s' % SystemModelSetting.get(
                     'auth_apikey')
         return lists
     except Exception as e:
         logger.error('Exception:%s', e)
         logger.error(traceback.format_exc())
Пример #13
0
    def get_m3u(for_tvh=False, m3u_format=None, group=None, call=None):
        try:
            #logger.debug(m3u_format)
            from system.model import ModelSetting as SystemModelSetting
            apikey = None
            if SystemModelSetting.get_bool('auth_use_apikey'):
                apikey = SystemModelSetting.get('auth_apikey')
            ddns = SystemModelSetting.get('ddns')
            m3u = '#EXTM3U\n'
            query = db.session.query(ModelCustom)
            query = query.order_by(ModelCustom.number)
            query = query.order_by(ModelCustom.epg_id)
            saved_channeld_list = query.all()

            for c in saved_channeld_list:
                url = '%s/%s/api/url.m3u8?m=url&s=%s&i=%s&q=%s' % (
                    ddns, package_name, c.source, c.source_id, c.quality)
                if c.is_drm_channel:
                    if call == 'kodi':
                        url = url.replace('url.m3u8', 'url.strm')
                    else:
                        url = url.replace('url.m3u8', 'url.mpd')
                if apikey is not None:
                    url += '&apikey=%s' % apikey
                if for_tvh:
                    url = 'pipe://%s -loglevel quiet -i "%s" -c copy -metadata service_provider=sjva_klive -metadata service_name="%s" -c:v copy -c:a aac -b:a 128k -f mpegts -tune zerolatency pipe:1' % (
                        'ffmpeg', url, c.title)

                import epg
                ins = epg.ModelEpgMakerChannel.get_instance_by_name(c.epg_name)
                icon = '' if ins is None else ins.icon
                if icon is None:
                    icon = c.icon
                tvg_name = c.title
                if m3u_format == '1':
                    tvg_name = '%s. %s' % (str(c.number).zfill(3), c.title)
                group_name = c.group
                if group is not None:
                    group_name = '' if group == 'EMPTY' else group
                m3u += M3U_FORMAT % (c.source + '|' + c.source_id, tvg_name,
                                     icon, group_name, c.number, c.number,
                                     c.title, url)
            return m3u
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #14
0
    def receive_callback(msg):
        try:
            content_type, chat_type, chat_id = glance(msg)
            #logger.debug(chat_id)
            try:
                if content_type == 'text' and msg['text'][0] == '^':
                    if SystemModelSetting.get_bool('telegram_resend'):
                        chat_list = SystemModelSetting.get_list(
                            'telegram_resend_chat_id')
                        #logger.debug(chat_list)
                        if str(chat_id) not in chat_list:
                            for c in chat_list:
                                ToolBaseNotify.send_telegram_message(
                                    msg['text'],
                                    SystemModelSetting.get(
                                        'telegram_bot_token'),
                                    chat_id=c)
            except Exception as exception:
                logger.error('Exception:%s', exception)
                logger.error(traceback.format_exc())

            if content_type == 'text':
                text = msg['text']
                if msg['text'] == '/bot':
                    text = json.dumps(TelegramBot.bot.getMe(), indent=2)
                    TelegramBot.bot.sendMessage(chat_id, text)
                elif msg['text'] == '/me':
                    text = json.dumps(msg, indent=2)
                    TelegramBot.bot.sendMessage(chat_id, text)
                elif msg['text'][0] == '^':
                    TelegramBot.process_receive_data(msg['text'][1:])
                elif msg['text'] == '/call':
                    data = TelegramBot.bot.getMe()
                    #logger.debug(data)
                    from framework import version

                    text = 'call : %s / %s / %s / %s / %s / %s' % (
                        data['username'], data['id'], data['first_name'],
                        version, SystemModelSetting.get('sjva_me_user_id'),
                        SystemModelSetting.get('sjva_id'))
                    TelegramBot.bot.sendMessage(chat_id, text)
                elif msg['text'].startswith('call'):
                    logger.debug(msg['text'])
        except Exception as exception:
            logger.error('Exception:%s', exception)
            logger.error(traceback.format_exc())
Пример #15
0
def proxy(sub):
    logger.debug('proxy %s %s', package_name, sub)
    try:
        from system.model import ModelSetting as SystemModelSetting
        if sub == 'discover.json':
            ddns = SystemModelSetting.get('ddns')
            data = {
                "FriendlyName": "HDHomeRun CONNECT",
                "ModelNumber": "HDHR4-2US",
                "FirmwareName": "hdhomerun4_atsc",
                "FirmwareVersion": "20190621",
                "DeviceID": "104E8010",
                "DeviceAuth": "UF4CFfWQh05c3jROcArmAZaf",
                "BaseURL": "%s/klive/proxy" % ddns,
                "LineupURL": "%s/klive/proxy/lineup.json" % ddns,
                "TunerCount": 20
            }
            return jsonify(data)
        elif sub == 'lineup_status.json':
            data = {
                "ScanInProgress": 0,
                "ScanPossible": 1,
                "Source": "Cable",
                "SourceList": ["Antenna", "Cable"]
            }
            return jsonify(data)
        elif sub == 'lineup.json':
            lineup = []
            custom_list = LogicKlive.get_saved_custom_instance()
            ddns = SystemModelSetting.get('ddns')
            apikey = None
            if SystemModelSetting.get_bool('auth_use_apikey'):
                apikey = SystemModelSetting.get('auth_apikey')
            for c in custom_list:
                tmp = c.get_m3u8(ddns, 'plex', apikey)
                lineup.append({
                    'GuideNumber': str(c.number),
                    'GuideName': c.title,
                    'URL': tmp
                })
            return jsonify(lineup)
    except Exception as e:
        logger.error('Exception:%s', e)
        logger.error(traceback.format_exc())
Пример #16
0
def get_actor_info(entity, retry=True):
    try:
        from . import Vars
        url = 'https://hentaku.co/starsearch.php'
        data = {'name' : entity['name']}
        page = _session.post(url, headers=_headers, data=data)
        page.encoding = 'utf-8'
        data = page.text
        data = '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">' + data
        tree = html.fromstring(data)
        nodes = tree.xpath('//img')
        if nodes:
            entity['img'] = nodes[0].attrib['src'].strip()
            from system.model import ModelSetting as SystemModelSetting
            entity['img'] = '%s/av_agent/api/image_proxy?url=%s' % (SystemModelSetting.get('ddns'), entity['img'])
            if SystemModelSetting.get_bool('auth_use_apikey'):
                entity['img'] += '&apikey=%s' % SystemModelSetting.get('auth_apikey')

            nodes = tree.xpath('//div[@class="avstar_info_b"]')
            tmps = nodes[0].text_content().split('/')
            entity['name_kor'] = tmps[0].strip()
            entity['name_eng'] = tmps[1].strip()
        else:
            entity['img'] = 'xxxx'
            entity['name_kor'] = ''
            entity['name_eng'] = ''
        return entity
    except ValueError:
        # 2020-06-01
        # 단시간에 많은 요청시시 Error발생
        if retry:
            logger.debug(u'단시간 많은 요청으로 재요청')
            time.sleep(1)
            return get_actor_info(entity, retry=False)
        else:
            logger.debug(u'잠시후 다시 요청')
            entity['img'] = 'xxxx'
            entity['name_kor'] = ''
            entity['name_eng'] = ''
            return entity

    except Exception as exception: 
        logger.error('Exception:%s', exception)
        logger.error(traceback.format_exc())
Пример #17
0
def first_menu(sub):
    try:
        if sub == 'setting':
            arg = ModelSetting.to_dict()
            arg['package_name'] = package_name
            arg['scheduler'] = str(scheduler.is_include(package_name))
            arg['is_running'] = str(scheduler.is_running(package_name))
            arg['is_test_server'] = (SystemModelSetting.get('ddns').find(
                'https://sjva-dev.soju6jan.com') != -1)
            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        elif sub in ['site', 'scheduler', 'group']:
            arg = {'package_name': package_name}
            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        elif sub == 'search':
            arg = {}
            arg = {'package_name': package_name}
            arg['ddns'] = SystemModelSetting.get('ddns')

            try:
                import downloader
                arg['is_available_normal_download'] = downloader.Logic.is_available_normal_download(
                )
            except:
                arg['is_available_normal_download'] = False
            arg["search_word"] = request.args.get('search_word')
            arg['is_torrent_info_installed'] = False
            try:
                import torrent_info
                arg['is_torrent_info_installed'] = True
            except Exception as e:
                pass
            arg['apikey'] = ''
            if SystemModelSetting.get_bool('auth_use_apikey'):
                arg['apikey'] = SystemModelSetting.get('auth_apikey')

            return render_template('%s_%s.html' % (package_name, sub), arg=arg)
        elif sub == 'log':
            return render_template('log.html', package=package_name)
        return render_template('sample.html',
                               title='%s - %s' % (package_name, sub))
    except Exception as e:
        logger.error('Exception:%s', e)
        logger.error(traceback.format_exc())
Пример #18
0
 def process_telegram_data(data):
     try:
         ret = ModelBotDownloaderKtvItem.process_telegram_data(data)
         #logger.debug(ret)
         if ret is not None:
             if ModelSetting.get_bool('receive_info_send_telegram'):
                 msg = '😉 TV 정보 수신\n'
                 msg += '제목 : %s\n' % data['filename']
                 if ret is None:
                     msg += '중복 마그넷입니다.'
                     #TelegramHandle.sendMessage(msg)
                 else:
                     url = '%s/%s/api/add_download?url=%s' % (
                         SystemModelSetting.get('ddns'), package_name,
                         ret.magnet)
                     if SystemModelSetting.get_bool('auth_use_apikey'):
                         url += '&apikey=%s' % SystemModelSetting.get(
                             'auth_apikey')
                     if app.config['config']['is_sjva_server']:
                         msg += '\n' + ret.magnet + '\n'
                     else:
                         msg += '\n➕ 다운로드 추가\n<%s>\n' % url
                     try:
                         if ret.daum_id is not None:
                             #url = 'https://search.daum.net/search?w=tv&q=%s&irk=%s&irt=tv-program&DA=TVP' % (urllib.quote(daum_tv.Logic.get_search_name_from_original(ret.file_name).encode('utf8')), ret.daum_id)
                             url = 'https://search.daum.net/search?w=tv&q=%s&irk=%s&irt=tv-program&DA=TVP' % (
                                 urllib.quote(
                                     ret.daum_title.encode('utf8')),
                                 ret.daum_id)
                             msg += '\n● Daum 정보\n%s' % url
                     except Exception as e:
                         logger.error('Exception:%s', e)
                         logger.error(traceback.format_exc())
                 import framework.common.notify as Notify
                 Notify.send_message(
                     msg,
                     image_url=ret.daum_poster_url,
                     message_id='bot_downloader_ktv_receive')
             LogicNormal.invoke()
             TorrentProcess.receive_new_data(ret, package_name)
     except Exception, e:
         logger.error('Exception:%s', e)
         logger.error(traceback.format_exc())
Пример #19
0
    def process_telegram_data(data):
        try:
            ret = ModelMovieItem.process_telegram_data(data)
            #logger.debug('telegram bot receive. is exist : %s', ret)
            if ret is not None:
                if ModelSetting.get_bool('receive_info_send_telegram'):
                    msg = '😉 영화 정보 수신\n'
                    msg += '제목 : %s (%s)\n' % (ret.movie_title, ret.movie_year)
                    msg += '파일 : %s\n' % ret.filename
                    url = '%s/%s/api/add_download?id=%s' % (
                        SystemModelSetting.get('ddns'), package_name, ret.id)
                    if SystemModelSetting.get_bool('auth_use_apikey'):
                        url += '&apikey=%s' % SystemModelSetting.get(
                            'auth_apikey')
                    if app.config['config']['is_sjva_server']:
                        msg += '\n' + ret.magnet + '\n'
                    else:
                        msg += '\n➕ 다운로드 추가\n<%s>\n' % url
                    #msg += '\n➕ 다운로드 추가\n<%s>\n' % url
                    try:
                        if ret.movie_title is not None:
                            if ret.movie_target == 'imdb':
                                url = 'https://www.imdb.com/title/%s' % ret.movie_id
                                msg += '\n● IMDB 정보\n%s' % url
                            else:
                                url = 'https://movie.daum.net/moviedb/main?movieId=%s' % (
                                    ret.movie_id)
                                msg += '\n● Daum 정보\n%s' % url
                    except Exception as e:
                        logger.error('Exception:%s', e)
                        logger.error(traceback.format_exc())

                    import framework.common.notify as Notify
                    Notify.send_message(
                        msg,
                        image_url=ret.daum_poster,
                        message_id='bot_downloader_movie_receive')
                LogicNormal.invoke()
                TorrentProcess.receive_new_data(ret, package_name)
        except Exception, e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #20
0
    def process_menu(self, sub, req):
        arg = ModelSetting.to_dict()
        arg["package_name"] = package_name
        if sub == "setting":
            arg["trackers"] = "\n".join(json.loads(arg["trackers"]))
            arg["tracker_update_from_list"] = [
                [x, f"https://ngosang.github.io/trackerslist/trackers_{x}.txt"] for x in self.tracker_update_from_list
            ]
            arg["plugin_ver"] = plugin_info["version"]
            from system.model import ModelSetting as SystemModelSetting

            ddns = SystemModelSetting.get("ddns")
            arg["json_api"] = f"{ddns}/{package_name}/api/json"
            arg["m2t_api"] = f"{ddns}/{package_name}/api/m2t"
            if SystemModelSetting.get_bool("auth_use_apikey"):
                arg["json_api"] += f"?apikey={SystemModelSetting.get('auth_apikey')}"
                arg["m2t_api"] += f"?apikey={SystemModelSetting.get('auth_apikey')}"
            return render_template(f"{package_name}_{sub}.html", sub=sub, arg=arg)
        if sub == "search":
            arg["cache_size"] = len(self.torrent_cache)
            return render_template(f"{package_name}_{sub}.html", arg=arg)
        return render_template("sample.html", title=f"{package_name} - {sub}")
Пример #21
0
    def get_m3u_for_sinaplayer():
        try:
            from system.model import ModelSetting as SystemModelSetting
            apikey = None
            if SystemModelSetting.get_bool('auth_use_apikey'):
                apikey = SystemModelSetting.get('auth_apikey')
            ddns = SystemModelSetting.get('ddns')
            m3u = '#EXTM3U\n'
            query = db.session.query(ModelCustom)
            query = query.order_by(ModelCustom.number)
            query = query.order_by(ModelCustom.epg_id)
            saved_channeld_list = query.all()

            for c in saved_channeld_list:
                if c.is_drm_channel:
                    play_info = LogicKlive.get_play_info(
                        c.source, c.source_id, c.quality)
                    play_info = json.dumps(play_info)
                else:
                    play_info = '%s/%s/api/url.m3u8?m=url&s=%s&i=%s&q=%s' % (
                        ddns, package_name, c.source, c.source_id, c.quality)
                    if apikey is not None:
                        play_info += '&apikey=%s' % apikey

                import epg
                ins = epg.ModelEpgMakerChannel.get_instance_by_name(c.epg_name)
                icon = '' if ins is None else ins.icon
                if icon is None:
                    icon = c.icon
                tvg_name = c.title
                group_name = c.group
                m3u += M3U_FORMAT % (c.source + '|' + c.source_id, tvg_name,
                                     icon, group_name, c.number, c.number,
                                     c.title, play_info)
            return m3u
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #22
0
    def get_channel_list(cls):
        try:
            stamp = str(datetime.datetime.today().strftime('%Y%m%d%H%M%S'))
            url = 'http://123.140.104.150/api/epg/v1/channel/virtual?access_key=C4A0697007C3548D389B&cp_id=S_LGU_HYUK0920&system_id=HDTV&SA_ID=500053434041&STB_MAC=v000.5343.4041&NSC_TYPE=LTE&BASE_GB=Y&BASE_CD=W172.017&YOUTH_YN=N&ORDER_GB=N&POOQ_YN=N&HDTV_VIEW_GB=R&SID=001010005638&CLIENT_IP=172.17.100.15&OS_INFO=android_4.4.2&NW_INFO=WIFI&APP_TYPE=ROSA&DEV_MODEL=SM-N935F&CARRIER_TYPE=E&UI_VER=04.38.04&NOW_PAGE=25&PRE_PAGE=&MENU_NM=&CONTS_GB=&TERM_BINVER=3.8.118.0106'
            ret = []
            request = py_urllib2.Request(url)
            response = py_urllib2.urlopen(request)
            tree = ET.parse(response)
            root = tree.getroot()
            for item in root.findall('list'):
                #info = {}
                #info['id'] = item.findtext('service_id')
                #info['title'] = item.findtext('service_name').strip()
                #info['img'] = item.findtext('img_url') + item.findtext('img_file_name')
                #info['summary'] = item.findtext('description')
                #url = item.findtext('live_server1') + item.findtext('live_file_name1')
                #info['url']  = '%s?VOD_RequestID=v2M2-0101-1010-7272-5050-0000%s;LTE;480p;WIFI&APPNAME=hdtv&ALBUM_ID=%s&ma=D0:17:C2:CE:D7:A1' % (url, stamp, info['id'])
                #if item.findtext('live_file_name1') != '' and item.findtext('genre_name') != u'성인':
                #	result.append(info)
                import system

                
                if item.findtext('service_id') in ['628', '629', '743']:
                    if not SystemModelSetting.get_bool('videoportal_adult'):
                        continue

                c = ModelChannel(cls.source_name, 
                    item.findtext('service_id'), 
                    item.findtext('service_name').strip(), 
                    item.findtext('img_url') + item.findtext('img_file_name'),
                    True)
                c.current = item.findtext('description')
                ret.append(c)

        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
        return ret
Пример #23
0
def detail(sub):
    if sub == 'setting':
        arg = ModelSetting.to_dict()
        arg['scheduler'] = str(scheduler.is_include(package_name))
        arg['is_running'] = str(scheduler.is_running(package_name))
        from system.model import ModelSetting as SystemModelSetting
        ddns = SystemModelSetting.get('ddns')
        arg['ddns'] = ddns
        apikey = None
        if SystemModelSetting.get_bool('auth_use_apikey'):
            apikey = SystemModelSetting.get('auth_apikey')
        for tmp in ['tvheadend', 'klive', 'hdhomerun']:
            arg[tmp] = '{ddns}/{package_name}/api/{sub}'.format(
                ddns=ddns, package_name=package_name, sub=tmp)
            if apikey is not None:
                arg[tmp] += '?apikey=' + apikey
        return render_template('{package_name}_{sub}.html'.format(
            package_name=package_name, sub=sub),
                               arg=arg)
    elif sub == 'log':
        return render_template('log.html', package=package_name)
    return render_template('sample.html',
                           title='%s - %s' % (package_name, sub))
Пример #24
0
    def process_telegram_data(data):
        try:
            ret = ModelItem.process_telegram_data(data)
            logger.debug(data)
            #ret = None
            if ret is not None:
                if ModelSetting.get_bool('receive_send_notify'):
                    msg = '😉 AV 정보 수신\n'
                    msg += '제목 : [%s] %s (%s)\n' % (ret.code, ret.title,
                                                    ret.date)
                    msg += '파일 : %s\n' % ret.filename
                    msg += '폴더 : %s\n' % ret.dirname
                    msg += '크기 : %s\n' % Util.sizeof_fmt(ret.total_size)

                    url = '%s/%s/api/add_download?id=%s' % (
                        SystemModelSetting.get('ddns'), package_name, ret.id)
                    if SystemModelSetting.get_bool('auth_use_apikey'):
                        url += '&apikey=%s' % SystemModelSetting.get(
                            'auth_apikey')
                    if app.config['config']['is_sjva_server']:
                        msg += '\n' + ret.magnet + '\n'
                    else:
                        msg += '\n➕ 다운로드 추가\n<%s>\n' % url
                    #msg += '\n➕ 다운로드 추가\n<%s>\n' % url

                    poster = ret.poster if ModelSetting.get_bool(
                        'show_poster_notify') else None
                    import framework.common.notify as Notify
                    Notify.send_message(msg,
                                        image_url=poster,
                                        message_id='bot_downloader_av_receive')
                LogicNormal.invoke()
                TorrentProcess.receive_new_data(ret, package_name)
        except Exception, e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #25
0
def api(sub):
    if sub == 'url.m3u8':
        try:
            mode = request.args.get('m')
            source = request.args.get('s')
            source_id = request.args.get('i')
            quality = request.args.get('q')
            #logger.debug('m:%s, s:%s, i:%s', mode, source, source_id)
            action, ret = LogicKlive.get_url(source, source_id, quality, mode)
            #logger.debug('action:%s, url:%s', action, ret)

            if mode == 'plex':
                from system.model import ModelSetting as SystemModelSetting
                #new_url = '%s/klive/api/url.m3u8?m=web_play&s=%s&i=%s&q=%s' % (SystemModelSetting.get('ddns'), source, source_id, quality)
                new_url = '%s/klive/api/url.m3u8?m=url&s=%s&i=%s&q=%s' % (
                    SystemModelSetting.get('ddns'), source, source_id, quality)
                #logger.debug(SystemModelSetting.get_bool('auth_use_apikey'))
                if SystemModelSetting.get_bool('auth_use_apikey'):
                    new_url += '&apikey=%s' % SystemModelSetting.get(
                        'auth_apikey')

                def generate():
                    startTime = time.time()
                    buffer = []
                    sentBurst = False

                    if platform.system() == 'Windows':
                        path_ffmpeg = os.path.join(path_app_root, 'bin',
                                                   platform.system(),
                                                   'ffmpeg.exe')
                    else:
                        path_ffmpeg = 'ffmpeg'

                    #ffmpeg_command = [path_ffmpeg, "-i", new_url, "-c", "copy", "-f", "mpegts", "-tune", "zerolatency", "pipe:stdout"]
                    ffmpeg_command = [
                        path_ffmpeg, "-i", new_url, "-c:v", "copy", "-c:a",
                        "aac", "-b:a", "128k", "-f", "mpegts", "-tune",
                        "zerolatency", "pipe:stdout"
                    ]

                    logger.debug('command : %s', ffmpeg_command)
                    process = subprocess.Popen(ffmpeg_command,
                                               stdout=subprocess.PIPE,
                                               stderr=subprocess.STDOUT,
                                               bufsize=-1)
                    global process_list
                    process_list.append(process)
                    while True:
                        line = process.stdout.read(1024)
                        buffer.append(line)
                        if sentBurst is False and time.time(
                        ) > startTime + 1 and len(buffer) > 0:
                            sentBurst = True
                            for i in range(0, len(buffer) - 2):
                                yield buffer.pop(0)
                        elif time.time() > startTime + 1 and len(buffer) > 0:
                            yield buffer.pop(0)
                        process.poll()
                        if isinstance(process.returncode, int):
                            if process.returncode > 0:
                                logger.debug('FFmpeg Error :%s',
                                             process.returncode)
                            break

                return Response(stream_with_context(generate()),
                                mimetype="video/MP2T")

            if action == 'redirect':
                return redirect(ret, code=302)
            elif action == 'return_after_read':
                data = LogicKlive.get_return_data(source, source_id, ret, mode)
                #logger.debug('Data len : %s', len(data))
                return data, 200, {
                    'Content-Type': 'application/vnd.apple.mpegurl'
                }
            elif action == 'return':
                return ret
            if ret == None: return
            if mode == 'url.m3u8':
                return redirect(ret, code=302)
            elif mode == 'lc':
                return ret
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
    elif sub == 'm3uall':
        return LogicKlive.get_m3uall()
    elif sub == 'm3u':
        data = LogicKlive.get_m3u(m3u_format=request.args.get('format'),
                                  group=request.args.get('group'))
        if request.args.get('file') == 'true':
            import framework.common.util as CommonUtil
            basename = 'klive_custom.m3u'
            filename = os.path.join(path_data, 'tmp', basename)
            CommonUtil.write_file(data, filename)
            return send_file(filename,
                             as_attachment=True,
                             attachment_filename=basename)
        else:
            return data
    elif sub == 'm3utvh':
        return LogicKlive.get_m3u(for_tvh=True,
                                  m3u_format=request.args.get('format'),
                                  group=request.args.get('group'),
                                  quality=request.args.get('quality'))
    elif sub == 'redirect':
        try:

            url = request.args.get('url')
            proxy = request.args.get('proxy')
            proxies = None
            if proxy is not None:
                proxy = urllib.unquote(proxy)
                proxies = {"https": proxy, 'http': proxy}
            url = urllib.unquote(url)
            #logger.debug('REDIRECT:%s', url)
            res = requests.get(url, proxies=proxies)
            data = res.content
            return data, 200, {'Content-Type': res.headers['Content-Type']}
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #26
0
def api(sub):
    try:
        if sub == 'add_download':
            db_id = request.args.get('id')
            ret1 = LogicNormal.add_download(db_id)
            ret2 = LogicNormal.add_download_sub(db_id, -1)
            return jsonify(ret1)
        elif sub == 'rss':
            ret = ModelMovieItem.api_list(request)
            data = []
            for item in ret:
                entity = {}
                entity['title'] = item.filename
                entity['link'] = item.magnet
                entity['created_time'] = item.created_time
                data.append(entity)
                if item.sub is not None:
                    for idx, sub in enumerate(item.sub):
                        url = '%s/%s/api/attach?id=%s_%s' % (
                            SystemModelSetting.get('ddns'), package_name,
                            item.id, idx)
                        if SystemModelSetting.get_bool('auth_use_apikey'):
                            url += '&apikey=%s' % SystemModelSetting.get(
                                'auth_apikey')
                        entity = {}
                        entity['title'] = sub[1]
                        entity['link'] = url
                        entity['created_time'] = item.created_time
                        data.append(entity)

            from framework.common.rss import RssUtil
            xml = RssUtil.make_rss(package_name, data)
            return Response(xml, mimetype='application/xml')
        elif sub == 'attach':
            tmp = request.args.get('id').split('_')
            entity = ModelMovieItem.get_by_id(tmp[0])
            if entity is not None:
                import requests
                import io
                session = requests.Session()

                if entity.sub[int(tmp[1])][2] != 'NONE':
                    logger.debug('url : %s', entity.sub[int(tmp[1])][2])
                    page = get_html(session,
                                    entity.sub[int(tmp[1])][2],
                                    stream=True)
                else:
                    logger.debug('url : %s', entity.url)
                    logger.debug('url : %s', entity.sub[int(tmp[1])][0])
                    page = get_html(session, entity.url)
                    page = get_html(session,
                                    entity.sub[int(tmp[1])][0],
                                    referer=entity.url,
                                    stream=True)

                byteio = io.BytesIO()
                for chunk in page.iter_content(1024):
                    byteio.write(chunk)

                filedata = byteio.getvalue()
                logger.debug('LENGTH : %s', len(filedata))

                attach_filename = entity.sub[int(tmp[1])][1]
                if ModelSetting.get_bool('sub_change_filename'):
                    ext = os.path.splitext(attach_filename)[1].lower()
                    if ext in ['.smi', '.srt', '.ass']:
                        attach_filename = '%s%s' % (os.path.splitext(
                            entity.filename)[0], ext)

                logger.debug('filename : %s', attach_filename)
            return send_file(io.BytesIO(filedata),
                             mimetype='application/octet-stream',
                             as_attachment=True,
                             attachment_filename=attach_filename)
    except Exception as e:
        logger.error('Exception:%s', e)
        logger.error(traceback.format_exc())
Пример #27
0
    def scheduler_function():
        try:
            last_id = ModelSetting.get_int('last_id')
            flag_first = False
            if last_id == -1:
                flag_first = True
                # 최초 실행은 -1로 판단하고, 봇을 설정안했다면 0으로
                query = db.session.query(ModelMovieItem) \
                    .filter(ModelMovieItem.created_time > datetime.datetime.now() + datetime.timedelta(days=-7))
                items = query.all()
            else:
                query = db.session.query(ModelMovieItem) \
                    .filter(ModelMovieItem.id > last_id )
                items = query.all()

            # 하나씩 판단....
            logger.debug('New Feed.. last_id:%s count :%s', last_id,
                         len(items))
            for item in items:
                try:
                    flag_download = False
                    item.download_status = ''
                    item.downloader_item_id = None
                    item.log = ''

                    option_auto_download = ModelSetting.get(
                        'option_auto_download')
                    if option_auto_download == '0':
                        item.download_status = 'no'
                    else:
                        flag_download = LogicNormal.check_option_meta(item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_target(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_country_include(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_country_exclude(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_year(item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_genre_include(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_genre_exclude(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_rate(item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_keyword_include(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_keyword_exclude(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_quality(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_source(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_video_codec(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_audio_codec(
                                item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_sub(item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_plex(item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_size(item)
                        if flag_download:
                            flag_download = LogicNormal.check_option_server_id_mod(
                                item)

                        #다운로드
                        if flag_download:
                            if option_auto_download == '1':
                                import downloader
                                downloader_item_id = downloader.Logic.add_download2(
                                    item.magnet,
                                    ModelSetting.get('torrent_program'),
                                    ModelSetting.get('path'),
                                    request_type=package_name,
                                    request_sub_type='',
                                    server_id='%s_%s_%s' %
                                    (item.server_id, item.file_count,
                                     item.total_size))['downloader_item_id']
                                item.downloader_item_id = downloader_item_id
                                item.download_status = 'true'

                                is_available_normal_download = downloader.Logic.is_available_normal_download(
                                )
                                if is_available_normal_download and item.sub is not None:
                                    for idx, sub in enumerate(item.sub):
                                        url = '%s/%s/api/attach?id=%s_%s' % (
                                            SystemModelSetting.get('ddns'),
                                            package_name, item.id, idx)
                                        if SystemModelSetting.get_bool(
                                                'auth_use_apikey'):
                                            url += '&apikey=%s' % SystemModelSetting.get(
                                                'auth_apikey')

                                        downloader.Logic.add_download2(
                                            url,
                                            ModelSetting.get(
                                                'torrent_program'),
                                            ModelSetting.get('path'),
                                            request_type=package_name,
                                            request_sub_type='',
                                            server_id='%s_%s_%s' %
                                            (item.server_id, item.file_count,
                                             item.total_size))
                            else:
                                item.download_status = 'true_only_status'
                        else:
                            if option_auto_download == '1':
                                item.download_status = 'false'
                            else:
                                item.download_status = 'false_only_status'

                    if ModelSetting.get_bool('download_start_send_telegram'):
                        LogicNormal.send_telegram_message(item)
                    item.download_check_time = datetime.datetime.now()
                    db.session.add(item)
                except Exception as e:
                    logger.error('Exception:%s', e)
                    logger.error(traceback.format_exc())

            new_last_id = last_id
            if flag_first and len(items) == 0:
                new_last_id = '0'
            else:
                if len(items) > 0:
                    new_last_id = '%s' % items[len(items) - 1].id
            if new_last_id != last_id:
                ModelSetting.set('last_id', str(new_last_id))
            db.session.commit()

        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #28
0
    def add_download2(download_url,
                      default_torrent_program,
                      download_path,
                      request_type='web',
                      request_sub_type='',
                      server_id=None,
                      magnet=None):
        try:

            ######################## add name to magnet
            if ModelSetting.get_bool('use_download_name'):
                if "&dn=" not in download_url:
                    try:
                        data = {'uri': download_url}
                        url = '%s/torrent_info/api/json' % (
                            SystemModelSetting.get('ddns'))
                        if SystemModelSetting.get_bool('auth_use_apikey'):
                            url += '?apikey=%s' % SystemModelSetting.get(
                                'auth_apikey')

                        raw_info = requests.get(url, data).json()
                        if raw_info[u'success']:
                            download_url += '&dn=' + raw_info[u'info'][u'name']
                        # else:
                        #     #logger.debug("log: %d", str(raw_info[u'log']))
                    except:
                        pass
            ######################## torrent_tracker
            if ModelSetting.get_bool('use_tracker'):
                tracker_list = []
                tracker_list += [
                    tracker.strip()
                    for tracker in ModelSetting.get('tracker_list').split('\n')
                    if len(tracker.strip()) != 0
                ]
                tracker_list += [
                    tracker.strip() for tracker in ModelSetting.get(
                        'tracker_list_manual').split('\n')
                    if len(tracker.strip()) != 0
                ]
                for tracker in tracker_list:
                    download_url += '&tr=' + tracker
            ########################

            setting_list = db.session.query(ModelSetting).all()
            arg = Util.db_list_to_dict(setting_list)
            if default_torrent_program is None:
                default_torrent_program = arg['default_torrent_program']

            if download_path is not None and download_path.strip() == '':
                download_path = None
            if default_torrent_program == '0':
                if download_path is None:
                    download_path = arg['transmission_default_path']
                download_path = LogicNormal.get_download_path(download_path,
                                                              server_id,
                                                              download_url,
                                                              magnet=magnet)
                ret = LogicTransmission.add_download(download_url,
                                                     download_path)
            elif default_torrent_program == '1':
                if download_path is None:
                    download_path = arg['downloadstation_default_path']
                download_path = LogicNormal.get_download_path(download_path,
                                                              server_id,
                                                              download_url,
                                                              magnet=magnet)
                ret = LogicDownloadStation.add_download(
                    download_url, download_path)
            elif default_torrent_program == '2':
                if download_path is None:
                    download_path = arg['qbittorrnet_default_path']
                download_path = LogicNormal.get_download_path(download_path,
                                                              server_id,
                                                              download_url,
                                                              magnet=magnet)
                ret = LogicQbittorrent.add_download(download_url,
                                                    download_path)
            elif default_torrent_program == '3':
                if download_path is None:
                    download_path = arg['aria2_default_path']
                download_path = LogicNormal.get_download_path(download_path,
                                                              server_id,
                                                              download_url,
                                                              magnet=magnet)
                ret = LogicAria2.add_download(download_url, download_path)

            ret['default_torrent_program'] = default_torrent_program
            ret['downloader_item_id'] = ModelDownloaderItem.save(
                ret, request_type, request_sub_type)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
            ret = {'ret': 'error'}
        finally:
            return ret
Пример #29
0
    def make_rss(title,
                 rss_list,
                 torrent_mode,
                 ddns,
                 is_bot=False,
                 search_word=None):
        from framework.common.rss import RssUtil
        xml = '<rss xmlns:showrss="http://showrss.info/" version="2.0">\n'
        xml += '\t<channel>\n'
        xml += '\t\t<title>' + '%s</title>\n' % title
        xml += '\t\t<link></link>\n'
        xml += '\t\t<description></description>\n'
        magnet_flag = False
        for bbs in rss_list:
            _dict = bbs.as_dict()
            if bbs.torrent_info is None and 'magnet' in _dict and _dict[
                    'magnet'] is not None:
                for magnet in _dict['magnet']:
                    magnet_flag = True
                    item_str = '\t\t<item>\n'
                    tmp = '\t\t\t<title>%s</title>\n' % RssUtil.replace_xml(
                        bbs.title)
                    item_str += tmp
                    item_str += '\t\t\t<link>%s</link>\n' % magnet
                    date_str = bbs.created_time.strftime(
                        '%a, %d %b %Y %H:%M:%S') + ' +0900'
                    item_str += '\t\t\t<pubDate>%s</pubDate>\n' % date_str
                    item_str += '\t\t</item>\n'
                    xml += item_str

            else:
                if bbs.torrent_info is not None:
                    for info in bbs.torrent_info:
                        magnet_flag = True
                        item_str = '\t\t<item>\n'
                        if search_word is not None and search_word != '' and info[
                                'name'].find(search_word) == -1:
                            continue
                        tmp = '\t\t\t<title>%s</title>\n' % RssUtil.replace_xml(
                            info['name'])
                        item_str += tmp
                        item_str += '\t\t\t<link>magnet:?xt=urn:btih:%s</link>\n' % info[
                            'info_hash']
                        date_str = bbs.created_time.strftime(
                            '%a, %d %b %Y %H:%M:%S') + ' +0900'
                        item_str += '\t\t\t<pubDate>%s</pubDate>\n' % date_str
                        item_str += '\t\t</item>\n'
                        xml += item_str

            if _dict['files']:
                for index, download in enumerate(_dict['files']):
                    try:
                        item_str = '\t\t<item>\n'
                        if magnet_flag and download[1].lower().endswith(
                                '.torrent'):
                            continue
                        item_str += '\t\t\t<title>%s</title>\n' % RssUtil.replace_xml(
                            download[1])
                        url = '%s/%s/api/download/%s_%s' % (ddns, package_name,
                                                            bbs.id, index)
                        if SystemModelSetting.get_bool('auth_use_apikey'):
                            url += '?apikey=%s' % SystemModelSetting.get(
                                'auth_apikey')
                        item_str += '\t\t\t<link>%s</link>\n' % url
                        date_str = bbs.created_time.strftime(
                            '%a, %d %b %Y %H:%M:%S') + ' +0900'
                        item_str += '\t\t\t<pubDate>%s</pubDate>\n' % date_str
                        item_str += '\t\t</item>\n'
                        xml += item_str
                    except Exception as e:
                        logger.debug('Exception:%s', e)
                        logger.debug(traceback.format_exc())

        xml += '\t</channel>\n'
        xml += '</rss>'
        return xml
Пример #30
0
def xmltv_php(source):
    url = '/%s/%s/api/epg' % (package_name, source)
    if SystemModelSetting.get_bool('auth_use_apikey'):
        url += '?apikey=%s' % SystemModelSetting.get('auth_apikey')
    return redirect(url)