# -*- coding: utf-8 -*- from __future__ import absolute_import """ 广告接口 get (返回广告明细) params(gameid,localid)output(ad_title,ad_body,ad_image,ad_url) post(新增广告定义) params(name,gameid,localid,start_time,end_time,ad_nums,ad_title,ad_body,ad_image,ad_url,ad_sort,status=unapproved,) output(1,0) put(更新广告配置)params(name,gameid,localid,start_time,end_time,ad_nums,ad_title,ad_body,ad_image,ad_url,ad_sort)output(1,0) delete(删除定义的广告)params()output(1,0) """ from flask import Flask, jsonify from flask_restful import reqparse, abort, Api, Resource import logging # from myredis.myredis import ad_redis, expire_time from mysql.mmysql import MysqlBase from config import mysql_promotion_config import datetime import pdb log = logging.getLogger(__name__) mydb = MysqlBase(**mysql_promotion_config) parser = reqparse.RequestParser() parser.add_argument('id') parser.add_argument('gameid') parser.add_argument('name') parser.add_argument('locationid') parser.add_argument('begin_time') parser.add_argument('end_time') parser.add_argument('ad_num') parser.add_argument('ad_title') parser.add_argument('ad_body') parser.add_argument('ad_image') parser.add_argument('ad_url') parser.add_argument('ad_sort') parser.add_argument('status') class Ad(Resource): def __init__(self): self.args = parser.parse_args() def get(self): gameid = self.args['gameid'] localid = self.args['locationid'] status = self.args['status'] or 1 if not gameid or not localid: # log.error(f"请输入必须的游戏ID和位置ID字段,当前获得是{gameid},{localid}") return jsonify({'code': 500, "message": f"请输入必须的游戏ID和位置ID字段,当前获得是{gameid},{localid},{status}"}) now = datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S") sel_sql = f"select id,name,begin_time,end_time,ad_num,ad_title,ad_body,ad_image,ad_url,ad_sort from ad where gameid='{gameid}' and locationid='{localid}' and status={status};" data = mydb.query(sel_sql) ad_info = {} if data: try: ad_info['id'], ad_info['name'], ad_info['begin_time'], ad_info['end_time'], ad_info['ad_num'], ad_info[ 'ad_title'], ad_info['ad_body'], ad_info['ad_image'], ad_info['ad_url'], ad_info['ad_sort'] = \ data[0][0] return jsonify({'code': 200, 'message': ad_info}) except Exception: log.error("split data from mysql failed!", exc_info=True) else: return jsonify({ 'code': 404, 'message': f'ad not found with gameid={gameid},localid={localid},now={now},status={status}!' }) def post(self): ad = {} ad['id'] = self.get_adid() ad['name'] = self.args['name'] ad['gameid'] = self.args['gameid'] ad['locationid'] = self.args['locationid'] ad['begin_time'] = self.args['begin_time'] or '1999-01-01' ad['end_time'] = self.args['end_time'] or '3000-01-01' ad['ad_num'] = self.args['ad_num'] or -1 ad['ad_title'] = self.args['ad_title'] ad['ad_body'] = self.args['ad_body'] ad['ad_image'] = self.args['ad_image'] ad['ad_url'] = self.args['ad_url'] ad['ad_sort'] = self.args['ad_sort'] or 0 try: mydb.insert('ad', ad) return jsonify({'code': 200}) except Exception: log.error("Insert ad to mysql failed!", exc_info=True) return jsonify({'code': 500, 'message': f'insert {ad} failed! '}) def get_adid(self): max_id = f"select id from ad order by id desc limit 1" data = mydb.query(max_id) try: max = int(data[0][0]) + 1 log.info(f"max id was {max}!") except Exception: log.error(f"error with get ad id ", exc_info=True) max = 1001 return max def put(self): try: ad = {} ad['id'] = self.args['id'] ad['name'] = self.args['name'] ad['gameid'] = self.args['gameid'] ad['locationid'] = self.args['locationid'] ad['begin_time'] = self.args['begin_time'] or '1999-01-01' ad['end_time'] = self.args['end_time'] or '3000-01-01' ad['ad_num'] = self.args['ad_num'] or -1 ad['ad_title'] = self.args['ad_title'] ad['ad_body'] = self.args['ad_body'] ad['ad_image'] = self.args['ad_image'] ad['ad_url'] = self.args['ad_url'] ad['ad_sort'] = self.args['ad_sort'] ad['status'] = self.args['status'] or 0 sel_sql = f"select name from ad where id={self.args['id']};" data = mydb.query(sel_sql) if data: condition = f"id='{self.args['id']}'" mydb.update("ad", ad, condition) return jsonify({'code': 200}) else: return jsonify({'code': 404, 'message': f"{self.args['id']} not found in mysql!"}) except Exception: log.error("update values to ad mysql failed!", exc_info=True) return jsonify({'code': 500}) def delete(self): id = self.args['id'] or None if not id: return jsonify({'code': 404, 'message': f'{id} not found!'}) del_sql = f"delete from ad where id={id};" try: mydb.change(del_sql) return jsonify({'code': 200, 'message': f'remove adid={id} success!'}) except Exception: log.error("remove id from ad failed!", exc_info=True)