#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
import json
from tornado import gen
import libs.common as common
import libs.stock_web_dic as stock_web_dic
import web.base as webBase
import logging
import datetime
# info 蓝色 云财经
# success 绿色
# danger 红色 东方财富
# warning 黄色
WEB_EASTMONEY_URL = u"""
东财
指标
东研
"""
# 和在dic中的字符串一致。字符串前面都不特别声明是u""
eastmoney_name = "查看股票"
# 获得页面数据。
class GetStockHtmlHandler(webBase.BaseHandler):
@gen.coroutine
def get(self):
name = self.get_argument("table_name", default=None, strip=False)
stockWeb = stock_web_dic.STOCK_WEB_DATA_MAP[name]
# self.uri_ = ("self.request.url:", self.request.uri)
# print self.uri_
date_now = datetime.datetime.now()
date_now_str = date_now.strftime("%Y%m%d")
# 每天的 16 点前显示昨天数据。
if date_now.hour < 16:
date_now_str = (date_now + datetime.timedelta(days=-1)).strftime("%Y%m%d")
try:
# 增加columns 字段中的【查看股票 东方财富】
logging.info(eastmoney_name in stockWeb.column_names)
if eastmoney_name in stockWeb.column_names:
tmp_idx = stockWeb.column_names.index(eastmoney_name)
logging.info(tmp_idx)
try:
# 防止重复插入数据。可能会报错。
stockWeb.columns.remove("eastmoney_url")
except Exception as e:
print("error :", e)
stockWeb.columns.insert(tmp_idx, "eastmoney_url")
except Exception as e:
print("error :", e)
logging.info("####################GetStockHtmlHandlerEnd")
self.render("stock_web.html", stockWeb=stockWeb, date_now=date_now_str,
pythonStockVersion=common.__version__,
leftMenu=webBase.GetLeftMenu(self.request.uri))
# 获得股票数据内容。
class GetStockDataHandler(webBase.BaseHandler):
def get(self):
# 获得分页参数。
start_param = self.get_argument("start", default=0, strip=False)
length_param = self.get_argument("length", default=10, strip=False)
print("page param:", length_param, start_param)
name_param = self.get_argument("name", default=None, strip=False)
type_param = self.get_argument("type", default=None, strip=False)
stock_web = stock_web_dic.STOCK_WEB_DATA_MAP[name_param]
# https://datatables.net/manual/server-side
self.set_header('Content-Type', 'application/json;charset=UTF-8')
order_by_column = []
order_by_dir = []
# 支持多排序。使用shift+鼠标左键。
for item, val in self.request.arguments.items():
# logging.info("item: %s, val: %s" % (item, val) )
if str(item).startswith("order["):
print("order:", item, ",val:", val[0])
if str(item).startswith("order[") and str(item).endswith("[column]"):
order_by_column.append(int(val[0]))
if str(item).startswith("order[") and str(item).endswith("[dir]"):
order_by_dir.append(val[0].decode("utf-8")) # bytes转换字符串
search_by_column = []
search_by_data = []
# 返回search字段。
for item, val in self.request.arguments.items():
# logging.info("item: %s, val: %s" % (item, val))
if str(item).startswith("columns[") and str(item).endswith("[search][value]"):
logging.info("item: %s, val: %s" % (item, val))
str_idx = item.replace("columns[", "").replace("][search][value]", "")
int_idx = int(str_idx)
# 找到字符串
str_val = val[0].decode("utf-8")
if str_val != "": # 字符串。
search_by_column.append(stock_web.columns[int_idx])
search_by_data.append(val[0].decode("utf-8")) # bytes转换字符串
# 打印日志。
search_sql = ""
search_idx = 0
logging.info(search_by_column)
logging.info(search_by_data)
for item in search_by_column:
val = search_by_data[search_idx]
logging.info("idx: %s, column: %s, value: %s " % (search_idx, item, val))
# 查询sql
if search_idx == 0:
search_sql = " WHERE `%s` = '%s' " % (item, val)
else:
search_sql = search_sql + " AND `%s` = '%s' " % (item, val)
search_idx = search_idx + 1
# print("stockWeb :", stock_web)
order_by_sql = ""
# 增加排序。
if len(order_by_column) != 0 and len(order_by_dir) != 0:
order_by_sql = " ORDER BY "
idx = 0
for key in order_by_column:
# 找到排序字段和dir。
col_tmp = stock_web.columns[key]
dir_tmp = order_by_dir[idx]
if idx != 0:
order_by_sql += " ,cast(`%s` as decimal) %s" % (col_tmp, dir_tmp)
else:
order_by_sql += " cast(`%s` as decimal) %s" % (col_tmp, dir_tmp)
idx += 1
# 查询数据库。
limit_sql = ""
if int(length_param) > 0:
limit_sql = " LIMIT %s , %s " % (start_param, length_param)
sql = " SELECT * FROM `%s` %s %s %s " % (
stock_web.table_name, search_sql, order_by_sql, limit_sql)
count_sql = " SELECT count(1) as num FROM `%s` %s " % (stock_web.table_name, search_sql)
logging.info("select sql : " + sql)
logging.info("count sql : " + count_sql)
stock_web_list = self.db.query(sql)
for tmp_obj in (stock_web_list):
logging.info("####################")
if type_param == "editor":
tmp_obj["DT_RowId"] = tmp_obj[stock_web.columns[0]]
# logging.info(tmp_obj)
try:
# 增加columns 字段中的【东方财富】
logging.info("eastmoney_name : %s " % eastmoney_name)
if eastmoney_name in stock_web.column_names:
tmp_idx = stock_web.column_names.index(eastmoney_name)
code_tmp = tmp_obj["code"]
# 判断上海还是 深圳,东方财富 接口要求。
if code_tmp.startswith("6"):
code_tmp = "SH" + code_tmp
else:
code_tmp = "SZ" + code_tmp
tmp_url = WEB_EASTMONEY_URL % (tmp_obj["code"], tmp_obj["code"], code_tmp)
tmp_obj["eastmoney_url"] = tmp_url
logging.info(tmp_idx)
logging.info(tmp_obj["eastmoney_url"])
# logging.info(type(tmp_obj))
# tmp.column_names.insert(tmp_idx, eastmoney_name)
except Exception as e:
print("error :", e)
stock_web_size = self.db.query(count_sql)
logging.info("stockWebList size : %s " % stock_web_size)
obj = {
"draw": 0,
"recordsTotal": stock_web_size[0]["num"],
"recordsFiltered": stock_web_size[0]["num"],
"data": stock_web_list
}
# logging.info("####################")
# logging.info(obj)
self.write(json.dumps(obj))