v3.0.0 SJVA3 대응

This commit is contained in:
joyfuI
2021-05-02 14:30:16 +09:00
10 changed files with 45 additions and 74 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,4 @@
.idea/
.venv/
*.pyo
__pycache__/
test/

View File

@@ -199,6 +199,10 @@ API를 제공합니다. 다른 플러그인에서 동영상 정보나 다운로
물론 해당 정보가 없으면 null입니다.
## Changelog
v3.0.0
* SJVA3 대응
* SJVA에 flask_cors가 내장됨에 따라 항상 CORS 허용
v2.4.0
* API에 playlist 키 추가
플레이리스트 다운로드 시 범위나 순서를 지정할 수 있습니다.

View File

@@ -1,2 +1 @@
# -*- coding: utf-8 -*-
from .plugin import blueprint, menu, plugin_load, plugin_unload, plugin_info
from .plugin import blueprint, menu, plugin_info, plugin_load, plugin_unload

View File

@@ -1 +1 @@
{"description": "\uc720\ud29c\ube0c, \ub124\uc774\ubc84TV \ub4f1 \ub3d9\uc601\uc0c1 \uc0ac\uc774\ud2b8\uc5d0\uc11c \ub3d9\uc601\uc0c1 \ub2e4\uc6b4\ub85c\ub4dc", "name": "youtube-dl", "more": "", "version": "2.4.0", "home": "https://github.com/joyfuI/youtube-dl", "category_name": "vod", "developer": "joyfuI"}
{"version": "3.0.0", "name": "youtube-dl", "category_name": "vod", "developer": "joyfuI", "description": "\uc720\ud29c\ube0c, \ub124\uc774\ubc84TV \ub4f1 \ub3d9\uc601\uc0c1 \uc0ac\uc774\ud2b8\uc5d0\uc11c \ub3d9\uc601\uc0c1 \ub2e4\uc6b4\ub85c\ub4dc", "home": "https://github.com/joyfuI/youtube-dl", "more": ""}

View File

@@ -1,23 +1,20 @@
# -*- coding: utf-8 -*-
# python
import os
import sys
import platform
import subprocess
import traceback
import subprocess
import sqlite3
# third-party
# sjva 공용
from framework import db, path_app_root, path_data
from framework.logger import get_logger
from framework.util import Util
# 패키지
from .plugin import logger, package_name
from .logic_normal import LogicNormal
from .model import ModelSetting
package_name = __name__.split('.')[0]
logger = get_logger(package_name)
class Logic(object):
db_default = {
@@ -28,8 +25,7 @@ class Logic(object):
'temp_path': os.path.join(path_data, 'download_tmp'),
'save_path': os.path.join(path_data, 'download'),
'default_filename': '',
'proxy': '',
'activate_cors': False
'proxy': ''
}
@staticmethod
@@ -50,14 +46,6 @@ class Logic(object):
logger.debug('%s plugin_load', package_name)
Logic.db_init()
# 모듈 설치
try:
import glob2
except ImportError:
logger.debug('glob2 install')
logger.debug(subprocess.check_output([sys.executable, '-m', 'pip', 'install', 'glob2'],
universal_newlines=True))
# youtube-dl 업데이트
youtube_dl = LogicNormal.get_youtube_dl_package(ModelSetting.get('youtube_dl_package'))
logger.debug('%s upgrade' % youtube_dl)

View File

@@ -1,15 +1,15 @@
# -*- coding: utf-8 -*-
# python
import traceback
from datetime import datetime
# third-party
from flask import jsonify
# 패키지
from .plugin import logger
from framework.logger import get_logger
from .my_youtube_dl import MyYoutubeDL, Status
package_name = __name__.split('.')[0]
logger = get_logger(package_name)
class LogicNormal(object):
youtube_dl_list = []

View File

@@ -1,17 +1,12 @@
# -*- coding: utf-8 -*-
# python
import traceback
import os
import traceback
# third-party
# sjva 공용
from framework import app, db, path_data
from framework.logger import get_logger
from framework.util import Util
# 패키지
from .plugin import logger, package_name
package_name = __name__.split('.')[0]
logger = get_logger(package_name)
app.config['SQLALCHEMY_BINDS'][package_name] = 'sqlite:///%s' % (os.path.join(path_data, 'db', '%s.db' % package_name))

View File

@@ -1,18 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# python
import os
import glob
import traceback
import tempfile
from threading import Thread
import json
from datetime import datetime
from threading import Thread
from enum import Enum
# sjva 공용, 패키지
from framework.logger import get_logger
import framework.common.celery as celery_shutil
from .plugin import logger
package_name = __name__.split('.')[0]
logger = get_logger(package_name)
class Status(Enum):
@@ -46,8 +47,8 @@ class MyYoutubeDL(object):
def __init__(self, plugin, type_name, url, filename, temp_path, save_path=None, opts=None, dateafter=None,
datebefore=None):
# from youtube_dl.utils import DateRange
from .plugin import YOUTUBE_DL_PACKAGE
DateRange = __import__('%s.utils' % YOUTUBE_DL_PACKAGE, fromlist=['DateRange']).DateRange
from .plugin import youtube_dl_package
DateRange = __import__('%s.utils' % youtube_dl_package, fromlist=['DateRange']).DateRange
if save_path is None:
save_path = temp_path
@@ -102,9 +103,8 @@ class MyYoutubeDL(object):
def run(self):
# import youtube_dl
from .plugin import YOUTUBE_DL_PACKAGE
youtube_dl = __import__('%s' % YOUTUBE_DL_PACKAGE)
import glob2
from .plugin import youtube_dl_package
youtube_dl = __import__('%s' % youtube_dl_package)
try:
self.start_time = datetime.now()
@@ -130,7 +130,7 @@ class MyYoutubeDL(object):
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([self.url])
if self.status in (Status.START, Status.FINISHED): # 다운로드 성공
for i in glob2.glob(self.temp_path + '/**/*'):
for i in glob.glob(self.temp_path + '/**/*'):
path = i.replace(self.temp_path, self.save_path, 1)
if os.path.isdir(i):
if not os.path.isdir(path):
@@ -158,16 +158,16 @@ class MyYoutubeDL(object):
@staticmethod
def get_version():
# from youtube_dl.version import __version__
from .plugin import YOUTUBE_DL_PACKAGE
__version__ = __import__('%s.version' % YOUTUBE_DL_PACKAGE, fromlist=['__version__']).__version__
from .plugin import youtube_dl_package
__version__ = __import__('%s.version' % youtube_dl_package, fromlist=['__version__']).__version__
return __version__
@staticmethod
def get_info_dict(url, proxy=None, cookiefile=None):
# import youtube_dl
from .plugin import YOUTUBE_DL_PACKAGE
youtube_dl = __import__('%s' % YOUTUBE_DL_PACKAGE)
from .plugin import youtube_dl_package
youtube_dl = __import__('%s' % youtube_dl_package)
try:
ydl_opts = {

View File

@@ -1,26 +1,23 @@
# -*- coding: utf-8 -*-
# python
import os
import sys
import traceback
import subprocess
# third-party
from flask import Blueprint, request, render_template, redirect, jsonify, abort
from flask_login import login_required
from flask_cors import cross_origin
# sjva 공용
from framework.logger import get_logger
from framework import check_api, socketio
from framework.logger import get_logger
# 패키지
package_name = __name__.split('.')[0]
logger = get_logger(package_name)
from .logic import Logic
from .logic_normal import LogicNormal
from .model import ModelSetting
YOUTUBE_DL_PACKAGE = LogicNormal.get_youtube_dl_package(Logic.db_default['youtube_dl_package'], import_pkg=True)
package_name = __name__.split('.')[0]
logger = get_logger(package_name)
youtube_dl_package = LogicNormal.get_youtube_dl_package(
ModelSetting.get('youtube_dl_package') if ModelSetting.get('youtube_dl_package') else Logic.db_default[
'youtube_dl_package'], import_pkg=True)
#########################################################
# 플러그인 공용
@@ -28,15 +25,6 @@ YOUTUBE_DL_PACKAGE = LogicNormal.get_youtube_dl_package(Logic.db_default['youtub
blueprint = Blueprint(package_name, package_name, url_prefix='/%s' % package_name,
template_folder=os.path.join(os.path.dirname(__file__), 'templates'),
static_folder=os.path.join(os.path.dirname(__file__), 'static'))
if ModelSetting.get_bool('activate_cors'):
try:
from flask_cors import CORS
except ImportError:
logger.debug('flask-cors install')
logger.debug(subprocess.check_output([sys.executable, '-m', 'pip', 'install', 'flask-cors'],
universal_newlines=True))
from flask_cors import CORS
CORS(blueprint, resources={r"/youtube-dl/api/*": {"origins": "*"}})
menu = {
'main': [package_name, 'youtube-dl'],
@@ -48,7 +36,7 @@ menu = {
}
plugin_info = {
'version': '2.4.0',
'version': '3.0.0',
'name': 'youtube-dl',
'category_name': 'vod',
'developer': 'joyfuI',
@@ -60,8 +48,6 @@ plugin_info = {
def plugin_load():
Logic.plugin_load()
global YOUTUBE_DL_PACKAGE
YOUTUBE_DL_PACKAGE = LogicNormal.get_youtube_dl_package(ModelSetting.get('youtube_dl_package'), import_pkg=True)
def plugin_unload():
@@ -223,6 +209,7 @@ def ajax(sub):
#########################################################
# API 명세는 https://github.com/joyfuI/youtube-dl#api
@blueprint.route('/api/<sub>', methods=['GET', 'POST'])
@cross_origin()
@check_api
def api(sub):
plugin = request.values.get('plugin')

View File

@@ -9,7 +9,6 @@
{{ macros.setting_input_text_and_buttons('save_path', '저장 폴더', [['save_path_btn', '경로 선택']], value=arg['save_path'], desc='정상적으로 완료된 파일이 이동할 폴더입니다.') }}
{{ macros.setting_input_text('default_filename', '기본 파일명', value=arg['default_filename'], placeholder=arg['DEFAULT_FILENAME'], desc='템플릿 규칙은 https://github.com/ytdl-org/youtube-dl/#output-template 참고') }}
{{ macros.setting_input_text('proxy', '프록시', value=arg['proxy'], desc=['HTTP/HTTPS/SOCKS를 지원합니다. 예) socks5://127.0.0.1:1080/', '빈칸으로 두면 프록시를 사용하지 않습니다.']) }}
{{ macros.setting_checkbox('activate_cors', 'CORS 허용', value=arg['activate_cors'], desc='API로의 크로스 도메인 요청을 허용합니다. 설정 저장 후 재시작이 필요합니다.') }}
{{ macros.setting_button([['global_setting_save_btn', '저장']]) }}
</form>