123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- from wechat_action.sql_models import DB
- from settings import using_config
- import tornado.ioloop
- import tornado.web
- import json
- from wechat_api.get_wechat_info import WechatApi
- from wechat_action.login_ad import LogIn
- from wechat_action import sql_tools
- import threading
- from web_module import user_action
- from sqlalchemy import Table
- import pickle
- # TODO:需要添加上supervisor,来维护进程
- # TODO:有时间需要对tornado进行改进
- db = DB(config=using_config)
- wechat_cookies_table = Table('wechat_cookies', db.metadata,
- autoload=True, autoload_with=db.engine)
- layout_typesetting_table = Table('layout_typesetting', db.metadata,
- autoload=True, autoload_with=db.engine)
- # 1.实现本机服务
- # 2.实现线上docker-selenium服务
- class create_ad_plan_remote(tornado.web.RequestHandler):
- # 1.批量创建计划
- # 返回创建计划是否已经开始
- def get(self):
- pass
- def post(self):
- # 1.
- pass
- class create_ad_layout_remote(tornado.web.RequestHandler):
- # 1.批量创建落地页
- def post(self):
- user_id = self.get_argument("user_id", None)
- layout_name = self.get_argument("layout_name", None)
- # wechat_json :[{'service_name':'one','wechat_name':''},{'service_name':'','wechat_name':''}]
- wechat_json = self.get_argument('wechat_json', None)
- log_ad, cookie_canuse = ad_human_info.refresh_wechat_cookies(self, user_id=user_id)
- threading.Thread(target=user_action.create_layout,
- args=(user_id, layout_name, wechat_json, log_ad, db, cookie_canuse)).start()
- class create_ad_layout_local(tornado.web.RequestHandler):
- def post(self):
- user_id = self.get_argument("user_id", None)
- layout_typesetting = self.get_argument("layout_typesetting", None)
- layout_name = self.get_argument("layout_name", None)
- print(user_id, layout_typesetting, layout_name)
- sql_session = db.DBSession()
- if user_id is None or layout_name is None or layout_typesetting is None:
- self.write(json.dumps({'status': {'msg': 'url parameter error', "RetCode": 400}}))
- return
- # 落地页名字精确到毫秒,默认是全局唯一
- # TODO:检查一下layout--内容 有无问题-----和前端确定一下
- layout_typesetting_info = {'user_id': user_id, 'name': layout_name, 'typesetting': layout_typesetting}
- layout_typesetting_inserte = sql_tools.save_layout_typesetting_info(
- layout_typesetting_info=layout_typesetting_info,
- table_layout_typesetting=layout_typesetting_table)
- sql_session.execute(layout_typesetting_inserte)
- sql_session.commit()
- self.write(json.dumps({'status': {'msg': 'success', "RetCode": 200}}, ensure_ascii=False))
- class create_ad_plan_local(tornado.web.RequestHandler):
- pass
- # TODO:wechat_info,human_info 这两张表有空时需要进行对应改进
- class ad_status(tornado.web.RequestHandler):
- # 1.创建情况
- pass
- class ad_human_info(tornado.web.RequestHandler):
- @staticmethod
- def refresh_wechat_cookies(tornado_web, user_id):
- # 1.返回二维码链接
- # ----1.查看cookie是否可用
- sql_session = db.DBSession()
- cookie_db = sql_tools.get_wechat_cookies(sql_session, user_id=user_id)
- # 进行登录操作
- log_ad = LogIn()
- # 使driver可以使用
- cookie_canuse = False
- if cookie_db:
- cookie_db = pickle.loads(cookie_db)
- # TODO:log 日志需要进行对应配置
- if not log_ad.wechat_cookies_check_alive(cookie_db):
- # cookie 不能使用
- wechat_code = log_ad.log_in()
- tornado_web.write(json.dumps({'status': {'msg': 'success', "RetCode": 200},
- 'wechat_code': wechat_code}))
- print('cookie can not use')
- else:
- # cookie 可以继续使用
- cookie_canuse = True
- log_ad.driver.get('https://a.weixin.qq.com/index.html')
- tornado_web.write(json.dumps({'status': {'msg': 'success', "RetCode": 200}}))
- else:
- # cookie 不能使用
- wechat_code = log_ad.log_in()
- tornado_web.write(json.dumps({'status': {'msg': 'success', "RetCode": 200},
- 'wechat_code': wechat_code}))
- return log_ad, cookie_canuse
- # 1.人群包获取
- def get(self):
- # TODO:添加分页
- # 0.是否刷新
- # 1.获取userid,以及是否刷新
- user_id = self.get_argument("user_id", None)
- is_refresh = self.get_argument("is_refresh", None)
- print(user_id, is_refresh)
- if user_id is None or is_refresh is None:
- self.write(json.dumps({'status': {'msg': 'url parameter error', "RetCode": 400}}))
- return
- sql_session = db.DBSession()
- # TODO:一个涉及到selenium-driver的请求-生命周期.----看一下tornado是怎么处理请求的生命周期
- if int(is_refresh) == 1:
- log_ad, cookie_canuse = self.refresh_wechat_cookies(self, user_id=user_id)
- threading.Thread(target=user_action.get_human_info,
- args=(
- user_id, log_ad, db, cookie_canuse)).start()
- else:
- # 1.查看是否在刷新,
- # 在刷新中,
- # 返回正在刷新
- # -------不管上面逻辑让他们多刷新几次
- # 不在刷新
- # 返回对应数据
- # 2.获取userid对应数据
- result = sql_tools.get_human_info(sql_session=sql_session, user_id=user_id)
- result = [json.loads(x) for x in result]
- print(result)
- self.write(json.dumps({'status': {'msg': 'success', "RetCode": 200},
- 'human_info': result}, ensure_ascii=False))
- class ad_wechat_info(tornado.web.RequestHandler):
- # 1.公众号相关信息获取
- def get(self):
- # TODO:添加分页
- # 0.是否刷新
- # 1.获取userid,以及是否刷新
- user_id = self.get_argument("user_id", None)
- is_refresh = self.get_argument("is_refresh", None)
- print(user_id, is_refresh)
- if user_id is None or is_refresh is None:
- self.write(json.dumps({'status': {'msg': 'url parameter error', "RetCode": 400}}))
- return
- sql_session = db.DBSession()
- # TODO:一个涉及到selenium-driver的请求-生命周期.----看一下tornado是怎么处理请求的生命周期
- if int(is_refresh) == 1:
- log_ad, cookie_canuse = ad_human_info.refresh_wechat_cookies(self, user_id=user_id)
- threading.Thread(target=user_action.get_human_info,
- args=(
- user_id, log_ad, db, cookie_canuse)).start()
- else:
- # 1.查看是否在刷新,
- # 在刷新中,
- # 返回正在刷新
- # -------不管上面逻辑让他们多刷新几次
- # 不在刷新
- # 返回对应数据
- # 2.获取userid对应数据
- result = sql_tools.get_wechat_info(sql_session=sql_session, user_id=user_id)
- result_list = []
- for _ in result:
- service_name, wechat_name = _
- result_list.append({'service_name': service_name, 'wechat_name': wechat_name})
- print(result_list)
- self.write(json.dumps({'status': {'msg': 'success', "RetCode": 200},
- 'wechat_info': result_list}, ensure_ascii=False))
- 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_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)
- ], debug=True, autoreload=True)
- if __name__ == "__main__":
- app = make_app()
- app.listen(8888)
- tornado.ioloop.IOLoop.current().start()
|