This commit is contained in:
soju6jan
2022-10-02 20:18:05 +09:00
parent b9c3aac91f
commit 29930fdef7
150 changed files with 53982 additions and 0 deletions

233
lib/system/logic_site.py Normal file
View File

@@ -0,0 +1,233 @@
# -*- 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'<strong>사이트 접속중입니다.</strong>'}
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