import logging from logging import handlers import os from model.sql_models import DB from data_processing import video_processing from config import using_config as db_config def video_check(): # 1.检查media表中是否有byte为空,但是download_path有数据的 sql = '''select download_path from t_ads_media tam where download_path is not null and video_bit_rate is null and type =2 ; ''' cursor = zx_db.session.execute(sql) download_path_list = [] for line in cursor.fetchall(): download_path_list.append(line[0]) zx_db.session.commit() # 2.检查signature(md5),是否已经存在于media,如果已经存在,一切用原来的信息 for download_path in download_path_list: download_url = 'https://zx-media-database.oss-cn-hangzhou.aliyuncs.com/' + download_path logging.info('开始解析视频:{} '.format(download_url)) # 3.进行视频解析 cloud_filepath, metadata_title, video_size, duration, bit_rate, width, height, format = video_processing.change_format( download_url) # -1.更新media,idea两种表的数据 type = 2 signature = metadata_title[3:] media_size = video_size media_format = format video_length = duration video_bit_rate = bit_rate max_media_size = media_size height = height width = width aspect_ratio = round(width / (height if height else 1), 1) media_sql = ''' update t_ads_media set video_mate_data='{video_mate_data}', type='{type}' ,signature='{signature}', media_size='{media_size}', media_format = '{media_format}', video_length='{video_length}', video_bit_rate = '{video_bit_rate}', max_media_size='{max_media_size}', height='{height}', width='{width}', aspect_ratio = '{aspect_ratio}' where download_path='{download_path}'; '''.format(download_path=download_path, video_mate_data=metadata_title, type=type, signature=signature, media_size=media_size, media_format=media_format, video_length=video_length, video_bit_rate=video_bit_rate, max_media_size=max_media_size, height=height, width=width, aspect_ratio=aspect_ratio) idea_sql = ''' update t_ads_idea set signature='{signature}', video_mate_data='{video_mate_data}', media_size='{media_size}',type='{type}' , media_format = '{media_format}', video_length='{video_length}', video_bit_rate = '{video_bit_rate}', max_media_size='{max_media_size}', height='{height}', width='{width}', aspect_ratio = '{aspect_ratio}' where download_path='{download_path}' '''.format(download_path=download_path, video_mate_data=metadata_title, type=type, signature=signature, media_size=media_size, media_format=media_format, video_length=video_length, video_bit_rate=video_bit_rate, max_media_size=max_media_size, height=height, width=width, aspect_ratio=aspect_ratio) zx_db.session.execute(media_sql) zx_db.session.execute(idea_sql) zx_db.session.commit() def run(): # 1.检查上一个进程是否已经完结 result = os.popen('ps aux | grep python | grep minuteRun.py | grep -v grep') res = result.read() for line in res.splitlines(): print(line) print(len(res.splitlines())) if len(res.splitlines()) > 2: #大于2是因为线上是由crontab来运行,crontab相关的运行会导致两行数据产生 logging.info('前面有视频检查程序在运行') return else: video_check() if __name__ == '__main__': # 定时检查素材库里的视频数据,是否是有 # 广告创意----也需要检查----图片可能是被动上传 # logging.basicConfig( handlers=[ logging.handlers.RotatingFileHandler('./log/minute_Run.log', maxBytes=10 * 1024 * 1024, backupCount=5, encoding='utf-8') , logging.StreamHandler() # 供输出使用 ], level=logging.INFO, format="%(asctime)s - %(levelname)s %(filename)s %(funcName)s %(lineno)s - %(message)s" ) zx_db = DB(db_config.zx_ads) logging.info('视频检查,开始') run() logging.info('视频检查,结束')