Пример #1
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))
Пример #2
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())
Пример #3
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))
        from system.model import ModelSetting as SystemModelSetting
        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
        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))
Пример #4
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())
Пример #5
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())
Пример #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 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())
Пример #8
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))
Пример #9
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())
Пример #10
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())
Пример #11
0
def proxy(sub):
    logger.debug('proxy %s %s', package_name, sub)
    # 설정 저장
    if sub == 'discover.json':
        try:
            ddns = SystemModelSetting.get('ddns')
            data = {
                "FriendlyName": "HDHomeRun CONNECT",
                "ModelNumber": "HDHR4-2US",
                "FirmwareName": "hdhomerun4_atsc",
                "FirmwareVersion": "20190621",
                "DeviceID": "104E8010",
                "DeviceAuth": "UF4CFfWQh05c3jROcArmAZaf",
                "BaseURL": "%s/hdhomerun/proxy" % ddns,
                "LineupURL": "%s/hdhomerun/proxy/lineup.json" % ddns,
                "TunerCount": 20
            }
            return jsonify(data)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
    elif sub == 'lineup_status.json':
        try:
            data = {
                "ScanInProgress": 0,
                "ScanPossible": 1,
                "Source": "Cable",
                "SourceList": ["Antenna", "Cable"]
            }
            return jsonify(data)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
    elif sub == 'lineup.json':
        try:
            lineup = []
            channel_list = LogicHDHomerun.channel_list(only_use=True)
            ddns = SystemModelSetting.get('ddns')
            for c in channel_list:
                lineup.append({
                    'GuideNumber': str(c.ch_number),
                    'GuideName': c.scan_name,
                    'URL': c.url
                })
            return jsonify(lineup)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #12
0
def get_theme():

    theme_list = {
        'Default': 56,
        'Cerulean': 56,
        'Cosmo': 54,
        'Cyborg': 54,
        'Darkly': 70,
        'Flatly': 70,
        'Journal': 56,
        'Litera': 57,
        'Lumen': 56,
        'Lux': 88,
        'Materia': 80,
        'Minty': 56,
        'Morph': 56,
        'Pulse': 75,
        'Quartz': 92,
        'Sandstone': 53,
        'Simplex': 67,
        'Sketchy': 56,
        'Slate': 53,
        'Solar': 56,
        'Spacelab': 58,
        'Superhero': 48,
        'United': 56,
        'Vapor': 56,
        'Yeti': 54,
        'Zephyr': 68,
    }
    from system.model import ModelSetting as SystemModelSetting
    theme = SystemModelSetting.get('theme')
    return [theme, theme_list[theme]]
Пример #13
0
    def start(bot_token):
        try:
            if TelegramBot.message_loop is None:
                TelegramBot.bot = Bot(bot_token)
                me = TelegramBot.bot.getMe()
                logger.debug('TelegramBot bot : %s', me)

                TelegramBot.message_loop = MessageLoop(
                    TelegramBot.bot, TelegramBot.receive_callback)
                TelegramBot.message_loop.run_as_thread()

                ToolBaseNotify.send_message('텔레그램 메시지 수신을 시작합니다. %s' %
                                            (datetime.datetime.now()))

                TelegramBot.SUPER_BOT = Bot(TelegramBot.SUPER_TOKEN)
                if SystemModelSetting.get(
                        'ddns') == app.config['DEFINE']['MAIN_SERVER_URL']:
                    logger.warning('ADMIN_TOKEN : %s ',
                                   TelegramBot.ADMIN_TOKEN)
                    logger.warning('ADMIN_TOKEN : %s ',
                                   TelegramBot.ADMIN_TOKEN)
                    logger.warning('ADMIN_TOKEN : %s ',
                                   TelegramBot.ADMIN_TOKEN)
                    TelegramBot.ADMIN_BOT = Bot(TelegramBot.ADMIN_TOKEN)
                    MessageLoop(
                        TelegramBot.ADMIN_BOT,
                        TelegramBot.super_receive_callback).run_as_thread()
                    #TelegramBotHandle.super_sendMessage('관리봇이 텔레그램 메시지 수신을 시작하였습니다.', encryped=False)
                    pass
                while TelegramBot.message_loop is not None:
                    time.sleep(60 * 60)
        except Exception as exception:
            logger.error('Exception:%s', exception)
            logger.error(traceback.format_exc())
Пример #14
0
    def get_download_path(download_path, server_id, download_url, magnet=None):
        logger.debug('download_path:%s server_id:%s download_url:%s',
                     download_path, server_id, download_url)
        try:
            if server_id is not None and ModelSetting.get_bool(
                    'use_share_upload'):
                if magnet is None:
                    _hash = download_url[20:60].lower()
                else:
                    _hash = magnet[20:60].lower()

                download_path = os.path.join(
                    download_path,
                    '%s_%s_%s' % (server_id, _hash,
                                  SystemModelSetting.get('sjva_me_user_id')))
                rule = ModelSetting.get('use_share_upload_make_dir_rule')
                if rule == '':
                    sjva_path = download_path
                else:
                    rule = rule.split('|')
                    sjva_path = download_path.replace(rule[0], rule[1])
                if os.path.exists(os.path.dirname(sjva_path)):
                    if not os.path.exists(sjva_path):
                        os.makedirs(sjva_path)
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
        finally:
            logger.debug('download_path2:%s server_id:%s', download_path,
                         server_id)
            return download_path
Пример #15
0
    def send_telegram_message(item):
        try:
            msg = '😉 봇 다운로드 - 영화 처리결과\n'
            msg += '제목 : %s (%s)\n' % (item.movie_title, item.movie_year)
            msg += '파일 : %s\n' % item.filename

            if item.download_status == 'true':
                status_str = '✔조건일치 - 요청'
            elif item.download_status == 'false':
                status_str = '⛔패스 '
            elif item.download_status == 'no':
                status_str = '자동 다운로드 사용안함'
            elif item.download_status == 'true_only_status':
                status_str = '✔조건일치 - 상태만'
            elif item.download_status == 'false_only_status':
                status_str = '⛔조건불일치 - 상태만'

            msg += '결과 : %s\n' % status_str
            msg += '%s/%s/list\n' % (SystemModelSetting.get('ddns'),
                                     package_name)
            msg += '로그\n' + item.log

            import framework.common.notify as Notify
            Notify.send_message(msg, message_id='bot_downloader_movie_result')
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #16
0
            def func():
                ret = RcloneTool.do_action(ModelSetting.get('rclone_path'),
                                           ModelSetting.get('rclone_info'),
                                           action,
                                           'category',
                                           folder_id,
                                           '',
                                           '',
                                           my_remote_path,
                                           'real',
                                           folder_id_encrypted=True,
                                           listener=None)

                msg = u'Percent : %s\n' % ret['percent']
                socketio.emit("command_modal_add_text",
                              str(msg),
                              namespace='/framework',
                              broadcast=True)
                #msg = u'폴더ID : %s\n' % ret['folder_id']
                #socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)

                if ret['percent'] == 100:
                    msg = u'업로드 크기 적용..\n'
                    socketio.emit("command_modal_add_text",
                                  str(msg),
                                  namespace='/framework',
                                  broadcast=True)
                    tmp = ModelSetting.get_int('size_upload')
                    tmp += size
                    ModelSetting.set('size_upload', str(tmp))

                    if board_type != 'share_private':
                        msg = u'게시물 등록중...\n'
                        socketio.emit("command_modal_add_text",
                                      str(msg),
                                      namespace='/framework',
                                      broadcast=True)

                        data = {
                            'board_type': board_type,
                            'category_type': category_type,
                            'board_title': board_title,
                            'board_content': board_content,
                            'board_daum_url': board_daum_url,
                            'folder_name': folder_name,
                            'size': size,
                            'daum_info': daum_info,
                            'folder_id': ret['folder_id'],
                            'user_id':
                            SystemModelSetting.get('sjva_me_user_id'),
                            'lsjson': json.dumps(ret['lsjson'])
                        }
                        LogicUser.site_append(data)

                msg = u'모두 완료되었습니다.\n'
                socketio.emit("command_modal_add_text",
                              str(msg),
                              namespace='/framework',
                              broadcast=True)
Пример #17
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())
Пример #18
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())
Пример #19
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())
Пример #20
0
    def do_action(req):
        try:
            logger.debug(req.form)
            #return
            folder_id = req.form['folder_id']
            my_remote_path = req.form['my_remote_path']
            
            # 게시판
            board_type = req.form['board_type']
            category_type = req.form['category_type']
            board_title = req.form['board_title']
            board_content = req.form['board_content']
            board_daum_url = req.form['board_daum_url']
            folder_name = req.form['folder_name'] 

            size = int(req.form['size'])
            daum_info = req.form['daum_info']
            action = req.form['action']
            user_id = SystemModelSetting.get('sjva_me_user_id')
            if board_content.startswith('ID:'):
                user_id = board_content.split('\n')[0].split(':')[1].strip()
                board_content = board_content[board_content.find('\n'):]


            def func():
                ret = RcloneTool.do_action(ModelSetting.get('rclone_path'), ModelSetting.get('rclone_config_path'), action, 'category', folder_id, folder_name, '', my_remote_path, 'real', folder_id_encrypted=True, listener=None)

                msg = u'Percent : %s\n' % ret['percent']
                socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)
                #msg = u'폴더ID : %s\n' % ret['folder_id']
                #socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)

                if ret['percent'] == 100:
                    msg = u'업로드 크기 적용..\n'
                    socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)
                    tmp = ModelSetting.get_int('size_upload')
                    tmp += size
                    ModelSetting.set('size_upload', str(tmp))
                    logger.debug('폴더ID:%s', ret['folder_id'])
                    if board_type != 'share_private' and ret['folder_id'] != '':
                        msg = u'게시물 등록중...\n'
                        socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)
                        
                        data = {'board_type' : board_type, 'category_type':category_type, 'board_title':board_title, 'board_content':board_content, 'board_daum_url' : board_daum_url, 'folder_name':folder_name, 'size':size, 'daum_info':daum_info, 'folder_id':ret['folder_id'], 'user_id':user_id, 'lsjson' : json.dumps(ret['lsjson'])}
                        LogicUser.site_append(data)
                    else:
                        msg = u'업로드한 폴더ID값을 가져올 수 없어서 사이트 등록에 실패하였습니다.\n관리자에게 등록 요청하세요.\n'
                        socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)
                msg = u'모두 완료되었습니다.\n'
                socketio.emit("command_modal_add_text", str(msg), namespace='/framework', broadcast=True)

            thread = threading.Thread(target=func, args=())
            thread.setDaemon(True)
            thread.start()
            return ''
        except Exception as e: 
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #21
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())
Пример #22
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())
Пример #23
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())
Пример #24
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())
Пример #25
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())
Пример #26
0
def first_menu(sub):
    if sub == 'setting':
        arg = ModelSetting.to_dict()
        arg['package_name'] = package_name
        arg['agent_server'] = SystemModelSetting.get(
            'ddns') + '/%s/api' % package_name
        return render_template('%s_setting.html' % 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))
Пример #27
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())
Пример #28
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))
Пример #29
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())
Пример #30
0
    def add_copy_force(self, item_id):
        try:
            item = ModelShareItem.get_by_id(item_id)
            logger.debug(f'복사 재요청!!!!! {item_id}')
            ret = {'ret':'fail', 'remote_path':item.remote_path, 'server_response':None}
            can_use_share_flag = RcloneTool2.can_use_share(ModelSetting.get('rclone_path'), ModelSetting.get('rclone_config_path'), ret['remote_path'])
            if not can_use_share_flag:
                ret['ret'] = 'cannot_access'
                return ret

            data = item.as_dict()
            data['ddns'] = SystemModelSetting.get('ddns')
            data['sjva_me_id'] = SystemModelSetting.get('sjva_me_user_id')
            data['version'] = version
            url = P.SERVER_URL + '/gd_share_server/noapi/user/request'
            res = requests.post(url, data={'data':json.dumps(data)})

            ret['server_response'] = res.json()
            if ret['server_response']['ret'] == 'enqueue':
                if 'db_id' in ret['server_response'] and ret['server_response']['queue_name'] is not None:
                    item.status = 'request'
                    item.request_time = datetime.now()
                    item.save()
                    ret['ret'] = 'success'
            else:
                item.status = ret['server_response']['ret']
                ret['ret'] = ret['server_response']['ret']

        except Exception as e: 
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
            ret['ret'] = 'fail'
            ret['log'] = str(e)

        logger.debug(ret)
        return ret