1
2
mirror of https://github.com/vimagick/dockerfiles synced 2024-07-05 01:21:58 +00:00
dockerfiles/youtube/youtube-worker/worker.py

68 lines
1.7 KiB
Python
Raw Normal View History

2015-07-12 16:43:50 +00:00
#!/usr/bin/env python
2015-07-13 04:45:26 +00:00
#-*- coding: utf-8 -*-
2015-07-12 16:43:50 +00:00
#
# youtube_dl worker
#
import logging
import os
import redis
2015-07-12 17:34:17 +00:00
import time
2015-07-12 16:43:50 +00:00
import youtube_dl
def download(url):
2015-07-12 17:34:17 +00:00
def hook(info):
2015-07-12 17:46:37 +00:00
now = int(time.time())
2015-07-12 17:34:17 +00:00
status = info['status']
if status == 'downloading':
2015-07-12 17:46:37 +00:00
rdb.zadd('running', now, url)
2015-07-12 17:58:37 +00:00
elif status == 'error':
2015-07-12 17:34:17 +00:00
rdb.zrem('running', url)
2015-07-12 17:46:37 +00:00
rdb.zadd('error', now, url)
2015-07-12 17:34:17 +00:00
elif status == 'finished':
rdb.zrem('running', url)
2015-07-12 17:46:37 +00:00
rdb.zadd('finished', now, url)
2015-07-12 17:34:17 +00:00
if rdb.zrank('finished', url) != None:
2015-07-12 18:05:59 +00:00
logging.warn('This video already exists.')
2015-07-12 17:34:17 +00:00
return False
2015-07-12 17:58:37 +00:00
try:
opts = {
'format': os.getenv('FORMAT', 'best'),
2015-07-13 04:45:26 +00:00
'outtmpl': unicode(os.getenv('OUTTMPL', '%(title)s-%(id)s.%(ext)s'), 'utf-8'),
2015-07-12 17:58:37 +00:00
'progress_hooks': [hook],
2015-07-13 02:31:43 +00:00
'writeinfojson': True,
2015-07-12 17:58:37 +00:00
}
with youtube_dl.YoutubeDL(opts) as ydl:
ydl.download([url])
except Exception as ex:
logging.error('error: %s', ex)
rdb.zrem('running', url)
rdb.zadd('error', int(time.time()), url)
return False
2015-07-12 16:43:50 +00:00
2015-07-12 17:34:17 +00:00
return True
2015-07-12 16:43:50 +00:00
if __name__ == '__main__':
2015-07-12 17:01:12 +00:00
logging.basicConfig(format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%FT%T', level='INFO')
2015-07-12 16:43:50 +00:00
logging.info('connect redis')
2015-07-12 17:34:17 +00:00
rdb = redis.StrictRedis(host='redis', db=os.getenv('DATABASE', 0), password=os.getenv('PASSWORD'))
2015-07-12 16:43:50 +00:00
rdb.ping()
while True:
try:
2015-07-12 17:34:17 +00:00
_, url = rdb.brpop('pending')
2015-07-12 16:43:50 +00:00
logging.info('process: %s', url)
2015-07-12 17:34:17 +00:00
ok = download(url)
logging.info('success: %s', ok)
2015-07-12 16:43:50 +00:00
except Exception as ex:
logging.error('error: %s', ex)