fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
208 lines
7.1 KiB
Python
208 lines
7.1 KiB
Python
# -*- coding:utf-8 -*-
|
|
"""
|
|
证券系统元方法,如获取交易日等
|
|
"""
|
|
import time
|
|
import zlib
|
|
import baostock.data.resultset as rs
|
|
import baostock.common.contants as cons
|
|
import baostock.util.stringutil as strUtil
|
|
import baostock.common.context as conx
|
|
import baostock.util.socketutil as sock
|
|
import baostock.data.messageheader as msgheader
|
|
|
|
|
|
def query_trade_dates(start_date=None, end_date=None):
|
|
"""查询出给定范围的交易日信息
|
|
|
|
@param start_date: 起始日期,默认2015-01-01
|
|
@param end_date: 终止日期,默认当前日期
|
|
@return: calendar_date 日期;is_trading_day,是否交易日,0:非交易日;1:交易日
|
|
"""
|
|
data = rs.ResultData()
|
|
|
|
if start_date is None or start_date == "":
|
|
start_date = cons.DEFAULT_START_DATE
|
|
if end_date is None or end_date == "":
|
|
end_date = time.strftime("%Y-%m-%d", time.localtime())
|
|
|
|
user_id = ""
|
|
try:
|
|
user_id = getattr(conx, "user_id")
|
|
except Exception:
|
|
print("you don't login.")
|
|
data.error_code = cons.BSERR_NO_LOGIN
|
|
data.error_msg = "you don't login."
|
|
return data
|
|
|
|
param = "%s,%s,%s,%s,%s,%s" % (
|
|
"query_trade_dates", user_id, "1",
|
|
cons.BAOSTOCK_PER_PAGE_COUNT, start_date, end_date)
|
|
|
|
msg_body = strUtil.organize_msg_body(param)
|
|
msg_header = msgheader.to_message_header(
|
|
cons.MESSAGE_TYPE_QUERYTRADEDATES_REQUEST, len(msg_body))
|
|
|
|
data.msg_type = cons.MESSAGE_TYPE_QUERYTRADEDATES_REQUEST
|
|
data.msg_body = msg_body
|
|
|
|
head_body = msg_header + msg_body
|
|
crc32str = zlib.crc32(bytes(head_body, encoding='utf-8'))
|
|
receive_data = sock.send_msg(head_body + cons.MESSAGE_SPLIT + str(crc32str))
|
|
|
|
if receive_data is None or receive_data.strip() == "":
|
|
data.error_code = cons.BSERR_RECVSOCK_FAIL
|
|
data.error_msg = "网络接收错误。"
|
|
return data
|
|
|
|
msg_header = receive_data[0:cons.MESSAGE_HEADER_LENGTH]
|
|
msg_body = receive_data[cons.MESSAGE_HEADER_LENGTH:-1]
|
|
header_arr = msg_header.split(cons.MESSAGE_SPLIT)
|
|
body_arr = msg_body.split(cons.MESSAGE_SPLIT)
|
|
data.msg_body_length = header_arr[2]
|
|
data.error_code = body_arr[0]
|
|
data.error_msg = body_arr[1]
|
|
|
|
if cons.BSERR_SUCCESS == data.error_code:
|
|
data.method = body_arr[2]
|
|
data.user_id = body_arr[3]
|
|
data.cur_page_num = body_arr[4]
|
|
data.per_page_count = body_arr[5]
|
|
data.setData(body_arr[6])
|
|
data.start_date = body_arr[7]
|
|
data.end_date = body_arr[8]
|
|
data.setFields(body_arr[9])
|
|
|
|
return data
|
|
|
|
|
|
def query_all_stock(day=None):
|
|
"""查询给定日期的所有证券信息,
|
|
|
|
@param day: 默认当前日期
|
|
"""
|
|
data = rs.ResultData()
|
|
|
|
if day is None or day == "":
|
|
day = time.strftime("%Y-%m-%d", time.localtime())
|
|
|
|
user_id = ""
|
|
try:
|
|
user_id = getattr(conx, "user_id")
|
|
except Exception:
|
|
print("you don't login.")
|
|
data.error_code = cons.BSERR_NO_LOGIN
|
|
data.error_msg = "you don't login."
|
|
return data
|
|
|
|
param = "%s,%s,%s,%s,%s" % (
|
|
"query_all_stock", user_id, "1",
|
|
cons.BAOSTOCK_PER_PAGE_COUNT, day)
|
|
|
|
msg_body = strUtil.organize_msg_body(param)
|
|
msg_header = msgheader.to_message_header(
|
|
cons.MESSAGE_TYPE_QUERYALLSTOCK_REQUEST, len(msg_body))
|
|
|
|
data.msg_type = cons.MESSAGE_TYPE_QUERYALLSTOCK_REQUEST
|
|
data.msg_body = msg_body
|
|
|
|
head_body = msg_header + msg_body
|
|
crc32str = zlib.crc32(bytes(head_body, encoding='utf-8'))
|
|
receive_data = sock.send_msg(head_body + cons.MESSAGE_SPLIT + str(crc32str))
|
|
|
|
if receive_data is None or receive_data.strip() == "":
|
|
data.error_code = cons.BSERR_RECVSOCK_FAIL
|
|
data.error_msg = "网络接收错误。"
|
|
return data
|
|
|
|
msg_header = receive_data[0:cons.MESSAGE_HEADER_LENGTH]
|
|
msg_body = receive_data[cons.MESSAGE_HEADER_LENGTH:-1]
|
|
header_arr = msg_header.split(cons.MESSAGE_SPLIT)
|
|
body_arr = msg_body.split(cons.MESSAGE_SPLIT)
|
|
data.msg_body_length = header_arr[2]
|
|
data.error_code = body_arr[0]
|
|
data.error_msg = body_arr[1]
|
|
|
|
if cons.BSERR_SUCCESS == data.error_code:
|
|
data.method = body_arr[2]
|
|
data.user_id = body_arr[3]
|
|
data.cur_page_num = body_arr[4]
|
|
data.per_page_count = body_arr[5]
|
|
data.setData(body_arr[6])
|
|
data.day = body_arr[7]
|
|
data.setFields(body_arr[8])
|
|
|
|
return data
|
|
|
|
|
|
def query_stock_basic(code="", code_name=""):
|
|
"""A股证券基本资料
|
|
@param code: 证券代码,可为空
|
|
@param code_name: 证券名称,可为空,支持模糊查询
|
|
"""
|
|
data = rs.ResultData()
|
|
|
|
if code is None or code == "":
|
|
code = ""
|
|
if code != "" and code is not None:
|
|
if len(code) != cons.STOCK_CODE_LENGTH:
|
|
print("股票代码应为" + str(cons.STOCK_CODE_LENGTH) + "位,请检查。格式示例:sh.600000。")
|
|
data.error_msg = "股票代码应为" + str(cons.STOCK_CODE_LENGTH) + "位,请检查。格式示例:sh.600000。"
|
|
data.error_code = cons.BSERR_PARAM_ERR
|
|
return data
|
|
code = code.lower()
|
|
if (code.endswith("sh") or code.endswith("sz")):
|
|
code = code[7:9].lower() + "." + code[0:6]
|
|
|
|
if code_name is None or code_name == "":
|
|
code_name = ""
|
|
|
|
user_id = ""
|
|
try:
|
|
user_id = getattr(conx, "user_id")
|
|
except Exception:
|
|
print("you don't login.")
|
|
data.error_code = cons.BSERR_NO_LOGIN
|
|
data.error_msg = "you don't login."
|
|
return data
|
|
|
|
param = "query_stock_basic," + str(user_id) + ",1," + \
|
|
str(cons.BAOSTOCK_PER_PAGE_COUNT) + \
|
|
"," + str(code) + "," + str(code_name)
|
|
|
|
msg_body = strUtil.organize_msg_body(param)
|
|
msg_header = msgheader.to_message_header(
|
|
cons.MESSAGE_TYPE_QUERYSTOCKBASIC_REQUEST, len(msg_body))
|
|
|
|
data.msg_type = cons.MESSAGE_TYPE_QUERYSTOCKBASIC_REQUEST
|
|
data.msg_body = msg_body
|
|
|
|
head_body = msg_header + msg_body
|
|
crc32str = zlib.crc32(bytes(head_body, encoding='utf-8'))
|
|
receive_data = sock.send_msg(head_body + cons.MESSAGE_SPLIT + str(crc32str))
|
|
|
|
if receive_data is None or receive_data.strip() == "":
|
|
data.error_code = cons.BSERR_RECVSOCK_FAIL
|
|
data.error_msg = "网络接收错误。"
|
|
return data
|
|
|
|
msg_header = receive_data[0:cons.MESSAGE_HEADER_LENGTH]
|
|
msg_body = receive_data[cons.MESSAGE_HEADER_LENGTH:-1]
|
|
header_arr = msg_header.split(cons.MESSAGE_SPLIT)
|
|
body_arr = msg_body.split(cons.MESSAGE_SPLIT)
|
|
data.msg_body_length = header_arr[2]
|
|
data.error_code = body_arr[0]
|
|
data.error_msg = body_arr[1]
|
|
|
|
if cons.BSERR_SUCCESS == data.error_code:
|
|
data.method = body_arr[2]
|
|
data.user_id = body_arr[3]
|
|
data.cur_page_num = body_arr[4]
|
|
data.per_page_count = body_arr[5]
|
|
data.setData(body_arr[6])
|
|
data.code = body_arr[7]
|
|
data.code_name = body_arr[8]
|
|
data.setFields(body_arr[9])
|
|
|
|
return data
|