# -*- coding: utf-8 -*- ######################################################### # python import os import traceback import logging import platform import time # third-party from flask import Blueprint, request, Response, send_file, render_template, redirect, jsonify from framework import F, path_app_root, path_data, socketio, scheduler from tool_base import d # 패키지 from .plugin import logger, package_name from .model import ModelSetting class SystemLogicSite(object): # 매번 split 하기 머해서 daum_cookie = None @staticmethod def process_ajax(sub, req): try: ret = {} if sub == 'site_daum_test': site_daum_test = req.form['site_daum_test'] ModelSetting.set('site_daum_test', site_daum_test) from framework.common.daum import DaumTV, MovieSearch ret['TV'] = DaumTV.get_daum_tv_info(site_daum_test) if ret['TV'] is not None and 'episode_list' in ret['TV']: del ret['TV']['episode_list'] ret['MOVIE'] = MovieSearch.search_movie(site_daum_test, -1) return jsonify(ret) elif sub == 'site_daum_cookie_refresh': ret = SystemLogicSite.get_daum_cookie_by_selenium(notify=True) return jsonify(ret) elif sub == 'scheduler': go = req.form['scheduler'] if go == 'true': SystemLogicSite.scheduler_start() else: SystemLogicSite.scheduler_stop() return jsonify(go) elif sub == 'tving_login': try: from support.site.tving import SupportTving token = SupportTving().do_login(req.form['tving_id'], req.form['tving_pw'], req.form['tving_login_type']) if token is None: ret['ret'] = False else: ret['ret'] = True ret['token'] = token return jsonify(ret) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) elif sub == 'tving_deviceid': try: from support.site.tving import SupportTving device_list = SupportTving(token=req.form['tving_token']).get_device_list() if device_list is None: ret['ret'] = False else: ret['ret'] = True ret['device_list'] = device_list return jsonify(ret) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) ret['ret'] = False ret['log'] = str(traceback.format_exc()) return jsonify(ret) @staticmethod def process_api(sub, req): ret = {} try: if sub == 'daum_cookie': return ModelSetting.get('site_daum_cookie') except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) ret['ret'] = 'exception' ret['data'] = str(exception) return jsonify(ret) ########################################################################## @staticmethod def plugin_load(): SystemLogicSite.create_tving_instance() return SystemLogicSite.get_daum_cookies(force=True) if ModelSetting.get_bool('site_daum_auto_start'): SystemLogicSite.scheduler_start() @staticmethod def create_tving_instance(): from support.site.tving import SupportTving proxy = None if ModelSetting.get_bool('site_tving_use_proxy'): proxy = ModelSetting.get('site_tving_proxy_url') SupportTving.ins = SupportTving(token=ModelSetting.get('site_tving_token'), proxy=proxy, deviceid=ModelSetting.get('site_tving_deviceid'), uuid=ModelSetting.get('site_tving_uuid')) @staticmethod def scheduler_start(): job = Job(package_name, '%s_site' % package_name, ModelSetting.get('site_daum_interval'), SystemLogicSite.scheduler_function, u"Daum cookie refresh", False) scheduler.add_job_instance(job) @staticmethod def scheduler_stop(): scheduler.remove_job('%s_site' % package_name) @staticmethod def scheduler_function(): try: data = SystemLogicSite.get_daum_cookie_by_selenium() if data['ret']: ModelSetting.set('site_daum_cookie', data['data']) SystemLogicSite.get_daum_cookies(force=True) except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) @staticmethod def get_daum_cookie_by_selenium(notify=False): try: ret = {} ret['ret'] = False from .logic_selenium import SystemLogicSelenium if notify: data = {'type':'success', 'msg' : u'사이트 접속중입니다.'} socketio.emit("notify", data, namespace='/framework', broadcast=True) SystemLogicSelenium.get_pagesoruce_by_selenium('https://www.daum.net', '//*[@id="daumFoot"]/div/a[1]/img') if notify: data = {'type':'success', 'msg' : u'쿠키 확인'} socketio.emit("notify", data, namespace='/framework', broadcast=True) driver = SystemLogicSelenium.get_driver() cookies = driver.get_cookies() for tmp in cookies: if tmp['name'] == 'TIARA': ret['ret'] = True ret['data'] = 'TIARA=%s' % tmp['value'] return ret except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return ret @staticmethod def get_daum_cookies(force=False): try: if SystemLogicSite.daum_cookie is None or force: ret = {} tmp = ModelSetting.get('site_daum_cookie') tmps = tmp.split(';') for t in tmps: t2 = t.split('=') if len(t2) == 2: ret[t2[0]] = t2[1] SystemLogicSite.daum_cookie = ret return SystemLogicSite.daum_cookie except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return {'TIARA':'gaXEIPluo-wWAFlwZN6l8gN3yzhkoo_piP.Kymhuy.6QBt4Q6.cRtxbKDaWpWajcyteRHzrlTVpJRxLjwLoMvyYLVi_7xJ1L'} daum_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Language' : 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7', } @classmethod def get_tree_daum(cls, url, post_data=None): from lxml import html from framework import SystemModelSetting text = cls.get_text_daum(url, post_data=post_data) if text is None: return return html.fromstring(text) @classmethod def get_text_daum(cls, url, post_data=None): from system.logic_site import SystemLogicSite from framework import SystemModelSetting res = cls.get_response(url, proxy_url=SystemModelSetting.get('site_daum_proxy'), headers=SystemLogicSite.daum_headers, post_data=post_data, cookies=SystemLogicSite.get_daum_cookies()) return res.text @classmethod def get_response_daum(cls, url, post_data=None): from system.logic_site import SystemLogicSite from framework import SystemModelSetting res = cls.get_response(url, proxy_url=SystemModelSetting.get('site_daum_proxy'), headers=SystemLogicSite.daum_headers, post_data=post_data, cookies=SystemLogicSite.get_daum_cookies()) return res @classmethod def get_response(cls, url, proxy_url=None, headers=None, post_data=None, cookies=None): import requests proxies = None if proxy_url is not None and proxy_url != '': proxies = {"http" : proxy_url, "https" : proxy_url} if headers is None: headers = SystemLogicSite.default_headers if post_data is None: #logger.warning(d(headers)) #logger.warning(d(proxies)) #logger.warning(d(cookies)) res = requests.get(url, headers=headers, proxies=proxies, cookies=cookies) else: res = requests.post(url, headers=headers, proxies=proxies, data=post_data, cookies=cookies) return res