v1.3.2 파일명에 경로 지정 시 이미 존재하는 경로면 에러가 발생하는 문제 수정

파일명에 경로 지정 시 이미 존재하는 경로면 에러가 발생하는 문제 수정
celery 적용
This commit is contained in:
joyfuI
2020-03-10 17:56:36 +09:00
parent a9165a78be
commit d8e5955028
5 changed files with 34 additions and 11 deletions

View File

@@ -71,8 +71,8 @@ API에선 직접 비트레이트를 설정할 수 있습니다.
`save_path` | 저장 폴더 경로. 미지정 시 사용자 설정 | X | String `save_path` | 저장 폴더 경로. 미지정 시 사용자 설정 | X | String
`format_code` | 동영상 포맷. 포맷 지정은 https://github.com/ytdl-org/youtube-dl/blob/master/README.md#format-selection 참고. 미지정 시 최고 화질 | X | String `format_code` | 동영상 포맷. 포맷 지정은 https://github.com/ytdl-org/youtube-dl/blob/master/README.md#format-selection 참고. 미지정 시 최고 화질 | X | String
`preferedformat` | 변환할 비디오 포맷. 가능한 포맷은 https://ffmpeg.org/general.html#File-Formats 참고. 미지정 시 변환하지 않음 | X | String `preferedformat` | 변환할 비디오 포맷. 가능한 포맷은 https://ffmpeg.org/general.html#File-Formats 참고. 미지정 시 변환하지 않음 | X | String
`preferredcodec` | 추출할 오디오 코덱. 가능한 값은 `"mp3"`, `"aac"`, `"flac"`, `"m4a"`, `"opus"`, `"vorbis"`, `"wav"`. 미지정 시 추출하지 않음 | X | String `preferredcodec` | 추출할 오디오 코덱. 가능한 값은 `"best"`, `"mp3"`, `"aac"`, `"flac"`, `"m4a"`, `"opus"`, `"vorbis"`, `"wav"`. 미지정 시 추출하지 않음 | X | String
`preferredquality` | 추출한 오디오의 비트레이트. `preferredcodec` 키가 있을 때만 유효. 기본값: `"192"` | X | String `preferredquality` | 추출한 오디오의 비트레이트. 0 ~ 9 사이의 VBR 퀄리티 값(0에 가까울수록 좋음) 혹은 특정 비트레이트 값. `preferredcodec` 키가 있을 때만 유효. 기본값: `"192"` | X | String
`start` | 다운로드 준비 후 바로 다운로드를 시작할지 여부. 기본값: `false` | X | Boolean `start` | 다운로드 준비 후 바로 다운로드를 시작할지 여부. 기본값: `false` | X | Boolean
#### Response #### Response
키 | 설명 | 타입 키 | 설명 | 타입
@@ -130,6 +130,10 @@ API에선 직접 비트레이트를 설정할 수 있습니다.
물론 해당 정보가 없으면 null입니다. 물론 해당 정보가 없으면 null입니다.
## Changelog ## Changelog
v1.3.2
* 파일명에 경로 지정 시 이미 존재하는 경로면 에러가 발생하는 문제 수정
* celery 적용
v1.3.1 v1.3.1
v1.3.0 v1.3.0

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": "1.3.1", "home": "https://github.com/joyfuI/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", "name": "youtube-dl", "more": "", "version": "1.3.2", "home": "https://github.com/joyfuI/youtube-dl", "category_name": "vod", "developer": "joyfuI"}

View File

@@ -6,7 +6,7 @@ import os
# third-party # third-party
# sjva 공용 # sjva 공용
from framework import db, app, path_app_root from framework import app, db, path_app_root
# 패키지 # 패키지
from .plugin import package_name from .plugin import package_name

View File

@@ -4,9 +4,8 @@ from __future__ import unicode_literals
# python # python
import os import os
import traceback import traceback
import shutil
import tempfile import tempfile
import glob # import glob2
from threading import Thread from threading import Thread
import json import json
from datetime import datetime from datetime import datetime
@@ -15,9 +14,24 @@ from enum import Enum
# third-party # third-party
import youtube_dl import youtube_dl
# 패키지 # sjva 공용, 패키지
import framework.common.celery as celery_shutil
from .plugin import logger from .plugin import logger
try:
import glob2
except Exception as e:
import subprocess
import platform
# glob2 설치
logger.debug('glob2 install')
if platform.system() == 'Windows': # 윈도우일 때
pip = 'pip.exe'
else:
pip = 'pip'
logger.debug(subprocess.check_output([pip, 'install', 'glob2'], universal_newlines=True))
import glob2
class Status(Enum): class Status(Enum):
READY = 0 READY = 0
START = 1 START = 1
@@ -111,15 +125,20 @@ class Youtube_dl(object):
with youtube_dl.YoutubeDL(ydl_opts) as ydl: with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([self.url]) ydl.download([self.url])
if self.status == Status.FINISHED: # 다운로드 성공 if self.status == Status.FINISHED: # 다운로드 성공
for i in glob.glob(self.temp_path + '/*'): for i in glob2.glob(self.temp_path + '/**/*'):
shutil.move(i, self.save_path) # 파일 이동 path = i.replace(self.temp_path, self.save_path, 1)
if os.path.isdir(i):
if not os.path.isdir(path):
os.mkdir(path)
continue
celery_shutil.move(i, path) # 파일 이동
self.status = Status.COMPLETED self.status = Status.COMPLETED
except Exception as e: except Exception as e:
self.status = Status.ERROR self.status = Status.ERROR
logger.error('Exception:%s', e) logger.error('Exception:%s', e)
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
finally: finally:
shutil.rmtree(self.temp_path, ignore_errors=True) # 임시폴더 삭제 celery_shutil.rmtree(self.temp_path) # 임시폴더 삭제
self.end_time = datetime.now() self.end_time = datetime.now()
def stop(self): def stop(self):

View File

@@ -36,7 +36,7 @@ menu = {
} }
plugin_info = { plugin_info = {
'version': '1.3.1', 'version': '1.3.2',
'name': 'youtube-dl', 'name': 'youtube-dl',
'category_name': 'vod', 'category_name': 'vod',
'developer': 'joyfuI', 'developer': 'joyfuI',