|
@@ -4,6 +4,7 @@ import tornado.log
|
|
|
import tornado.ioloop
|
|
|
import tornado.web
|
|
|
import json
|
|
|
+import time
|
|
|
from wechat_api.get_wechat_info import WechatApi
|
|
|
from wechat_action.login_ad import LogIn
|
|
|
from wechat_action import sql_tools
|
|
@@ -24,6 +25,8 @@ layout_typesetting_table = Table('layout_typesetting', db.metadata,
|
|
|
autoload=True, autoload_with=db.engine)
|
|
|
ad_plan_typesetting_table = Table('ad_plan_typesetting', db.metadata,
|
|
|
autoload=True, autoload_with=db.engine)
|
|
|
+action_record_table = Table('action_record', db.metadata,
|
|
|
+ autoload=True, autoload_with=db.engine)
|
|
|
|
|
|
|
|
|
# 1.实现本机服务
|
|
@@ -44,6 +47,8 @@ class BaseHandler(tornado.web.RequestHandler):
|
|
|
class create_ad_plan_remote(BaseHandler):
|
|
|
# 1.批量创建计划
|
|
|
# 返回创建计划是否已经开始
|
|
|
+ # TODO:落地页创建也在这个里面
|
|
|
+
|
|
|
def post(self):
|
|
|
user_id = self.get_argument("user_id", None)
|
|
|
ad_plan_name = self.get_argument("ad_plan_name", None)
|
|
@@ -79,6 +84,58 @@ class create_ad_plan_local(BaseHandler):
|
|
|
self.write({'status': {'msg': 'success', "RetCode": 200}})
|
|
|
|
|
|
|
|
|
+class create_ad_plan(BaseHandler):
|
|
|
+ # TODO:只要tornado开着就不允许修改数据库,------想好之后上线如何操作
|
|
|
+ def post(self):
|
|
|
+ request_dict = json.loads(self.request.body, encoding='utf-8')
|
|
|
+ print(request_dict)
|
|
|
+ user_id = request_dict['user_id']
|
|
|
+ #TODO:task_name设置全局唯一
|
|
|
+ ad_plan_list = request_dict['plan_list']
|
|
|
+
|
|
|
+ # 1.查看是否cookie可用
|
|
|
+ log_ad, cookie_canuse = ad_human_info.refresh_wechat_cookies(self, user_id=user_id)
|
|
|
+
|
|
|
+ # 2.数据存入数据库
|
|
|
+ print(user_id, ad_plan_list)
|
|
|
+ sql_session = db.DBSession()
|
|
|
+ if user_id is None or ad_plan_list is None:
|
|
|
+ self.write({'status': {'msg': 'url parameter error', "RetCode": 400}})
|
|
|
+ return
|
|
|
+ # 2.1存计划数据
|
|
|
+ for _ in ad_plan_list:
|
|
|
+ ad_plan_name = _['title']
|
|
|
+ ad_plan_typesetting_info = {'user_id': user_id, 'name': ad_plan_name,
|
|
|
+ 'typesetting': json.dumps(_, ensure_ascii=False)}
|
|
|
+ ad_plan_typesetting_inserte = sql_tools.save_ad_plan_typesetting_info(
|
|
|
+ ad_plan_typesetting_info=ad_plan_typesetting_info,
|
|
|
+ table_ad_plan_typesetting=ad_plan_typesetting_table)
|
|
|
+ sql_session.execute(ad_plan_typesetting_inserte)
|
|
|
+
|
|
|
+ # 2.2存行为历史记录
|
|
|
+ task_name='{user_id}_{time_sign}'.format(user_id=user_id,time_sign=time.time())
|
|
|
+ for _ in ad_plan_list:
|
|
|
+ # 1.查看历史中有无对应落地页
|
|
|
+
|
|
|
+ # TODO:落地页直接存放到action_record,运行过程中进行不同公众号进行不同操作
|
|
|
+
|
|
|
+ # 2.历史记录
|
|
|
+ print(_)
|
|
|
+ for action_type in ['create_ad_plan', 'create_ad_layout']:
|
|
|
+ object_name = _['title'] if action_type == 'create_ad_plan' else _['idea']['jump_type_page_type']
|
|
|
+ action_info = {'user_id': user_id, 'service_name': _['service_name'], 'wechat_name': _['wechat_name'],
|
|
|
+ 'action_type': action_type, 'object_name': object_name, 'task_name': task_name,
|
|
|
+ 'status': 'todo'}
|
|
|
+ record_insert = sql_tools.save_action_record(action_record_info=action_info,
|
|
|
+ table_action_record=action_record_table)
|
|
|
+ sql_session.execute(record_insert)
|
|
|
+ sql_session.commit()
|
|
|
+
|
|
|
+ # 4.开始运行
|
|
|
+ # threading.Thread(target=user_action.create_ad_plan,
|
|
|
+ # args=(user_id, ad_plan_name, wechat_json, log_ad, db, cookie_canuse)).start()
|
|
|
+
|
|
|
+
|
|
|
class get_ad_plan_local(BaseHandler):
|
|
|
def get(self):
|
|
|
user_id = self.get_argument('user_id', None)
|
|
@@ -391,7 +448,35 @@ class get_plan_action_record(BaseHandler):
|
|
|
_['ad_plan_name'] = name
|
|
|
_['id'] = i
|
|
|
_['create_time'] = create_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
- _['service_name'] =service_name
|
|
|
+ _['service_name'] = service_name
|
|
|
+ _['wechat_name'] = wechat_name
|
|
|
+ _['wechat_id_info'] = wechat_id_info
|
|
|
+ _['status'] = status
|
|
|
+ result_.append(_)
|
|
|
+ self.write({'statu': {'msg': 'success', "RetCode": 200},
|
|
|
+ 'local_ad_plan_info': result_})
|
|
|
+
|
|
|
+
|
|
|
+class get_task_list(BaseHandler):
|
|
|
+ def get(self):
|
|
|
+ user_id = self.get_argument('user_id', None)
|
|
|
+ sql_session = db.DBSession()
|
|
|
+ if user_id is None:
|
|
|
+ self.write({'status': {'msg': 'url parameter error', "RetCode": 400}})
|
|
|
+ return
|
|
|
+ # 落地页名字精确到毫秒,默认是全局唯一
|
|
|
+
|
|
|
+ result = sql_tools.get_plan_record(sql_session=sql_session, user_id=user_id)
|
|
|
+ result_ = []
|
|
|
+ for i in range(len(result)):
|
|
|
+ print(result[i])
|
|
|
+ user_id, name, service_name, wechat_name, create_time, status, typesetting, wechat_id_info = result[i]
|
|
|
+ _ = {}
|
|
|
+ _['typesetting'] = json.loads(typesetting)
|
|
|
+ _['ad_plan_name'] = name
|
|
|
+ _['id'] = i
|
|
|
+ _['create_time'] = create_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
+ _['service_name'] = service_name
|
|
|
_['wechat_name'] = wechat_name
|
|
|
_['wechat_id_info'] = wechat_id_info
|
|
|
_['status'] = status
|
|
@@ -402,18 +487,20 @@ class get_plan_action_record(BaseHandler):
|
|
|
|
|
|
def make_app():
|
|
|
return tornado.web.Application([
|
|
|
- ("/create_ad_plan_local", create_ad_plan_local),
|
|
|
- ("/create_ad_layout_local", create_ad_layout_local),
|
|
|
+ ("/create_ad_plan", create_ad_plan),
|
|
|
+ # ("/create_ad_plan_local", create_ad_plan_local),
|
|
|
+ # ("/create_ad_layout_local", create_ad_layout_local),
|
|
|
("/get_layout_local", get_ad_layout_local),
|
|
|
("/get_ad_plan_local", get_ad_plan_local),
|
|
|
("/delete_layout_local", delete_ad_layout),
|
|
|
("/delete_ad_plan_local", delete_ad_plan),
|
|
|
- ("/create_ad_plan_remote", create_ad_plan_remote),
|
|
|
- ("/create_ad_layout_remote", create_ad_layout_remote),
|
|
|
+ # ("/create_ad_plan_remote", create_ad_plan_remote),
|
|
|
+ # ("/create_ad_layout_remote", create_ad_layout_remote),
|
|
|
("/ad_human_info", ad_human_info),
|
|
|
("/ad_wechat_info", ad_wechat_info),
|
|
|
- ("/ad_status", ad_status),
|
|
|
- ("/get_plan_action_record", get_plan_action_record)
|
|
|
+ # ("/ad_status", ad_status),
|
|
|
+ ("/get_plan_action_record", get_plan_action_record),
|
|
|
+ ("/get_task_list", get_task_list)
|
|
|
], debug=True, autoreload=True)
|
|
|
|
|
|
|