Skip to content
GitLab
Explore
Sign in
Register
Commits on Source (2)
增加解锁下发
· 3a7fb951
leewcc
authored
Jul 22, 2025
3a7fb951
Merge branch 'dev' of www.fuconx.com:fuconx/tushareweb into dev
· fbe10f1a
leewcc
authored
Jul 22, 2025
fbe10f1a
Show whitespace changes
Inline
Side-by-side
tushare-token-front/.gitignore
View file @
fbe10f1a
...
...
@@ -24,7 +24,6 @@ dist-ssr
*.sw?
# Environment variables
.env
.env.local
.env.development.local
.env.test.local
...
...
tushare-token-front/src/config/environment.js
0 → 100644
View file @
fbe10f1a
// 环境配置
export
const
environment
=
{
// API基础地址
API_BASE_URL
:
'
http://114.132.244.63/token-tushare
'
,
// Tushare服务地址
TUSHARE_API_URL
:
'
http://114.132.244.63/api-tushare
'
}
export
default
environment
;
\ No newline at end of file
tushare-token-front/src/views/AdminView.vue
View file @
fbe10f1a
...
...
@@ -69,6 +69,7 @@
</span>
<div
class=
"table-cell cell-actions"
>
<button
v-if=
"token.status === 'locked'"
class=
"unlock-btn"
@
click=
"unlockToken(token)"
>
解锁
</button>
<button
class=
"issue-btn"
@
click=
"issueToken(token)"
>
下发
</button>
</div>
</div>
</div>
...
...
@@ -157,6 +158,8 @@ import { useRouter } from 'vue-router'
import
{
useRoute
}
from
'
vue-router
'
import
TopNavbar
from
'
../components/TopNavbar.vue
'
import
SidebarMenu
from
'
../components/SidebarMenu.vue
'
import
{
environment
}
from
'
../config/environment
'
const
route
=
useRoute
()
const
isTokenMenuActive
=
computed
(()
=>
route
.
path
===
'
/
'
)
const
isUserMenuActive
=
computed
(()
=>
route
.
path
===
'
/user-admin
'
)
...
...
@@ -219,7 +222,7 @@ async function addToken() {
else
if
(
newToken
.
period
===
'
6m
'
)
validity_period
=
6
else
if
(
newToken
.
period
===
'
1y
'
)
validity_period
=
12
try
{
const
response
=
await
fetch
(
`
${
API_BASE_URL
}
/api/token/create`
,
{
const
response
=
await
fetch
(
`
${
environment
.
API_BASE_URL
}
/api/token/create`
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
},
credentials
:
'
include
'
,
...
...
@@ -247,7 +250,20 @@ async function addToken() {
}
async
function
unlockToken
(
token
)
{
try
{
const
response
=
await
fetch
(
`
${
API_BASE_URL
}
/api/token/unlock`
,
{
// 1. 先调用tushare服务的解锁接口
const
tushareResponse
=
await
fetch
(
`
${
environment
.
TUSHARE_API_URL
}
/tushare/unlock_token`
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
},
body
:
JSON
.
stringify
({
token
:
token
.
value
})
})
const
tushareRes
=
await
tushareResponse
.
json
()
if
(
!
tushareRes
.
success
)
{
alert
(
'
tushare服务解锁失败:
'
+
(
tushareRes
.
msg
||
'
未知错误
'
))
return
}
// 2. 再调用本地后端解锁接口
const
response
=
await
fetch
(
`
${
environment
.
API_BASE_URL
}
/api/token/unlock`
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
},
credentials
:
'
include
'
,
...
...
@@ -257,7 +273,24 @@ async function unlockToken(token) {
if
(
res
.
success
)
{
fetchTokens
()
}
else
{
alert
(
res
.
message
||
'
解锁失败
'
)
alert
(
res
.
message
||
'
本地服务解锁失败
'
)
}
}
catch
(
e
)
{
alert
(
'
网络错误或服务器无响应
'
)
}
}
async
function
issueToken
(
token
)
{
try
{
const
response
=
await
fetch
(
`
${
environment
.
TUSHARE_API_URL
}
/tushare/add_token`
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
},
body
:
JSON
.
stringify
({
token
:
token
.
value
})
})
const
res
=
await
response
.
json
()
if
(
res
.
success
)
{
alert
(
'
下发成功
'
)
}
else
{
alert
(
res
.
msg
||
'
下发失败
'
)
}
}
catch
(
e
)
{
alert
(
'
网络错误或服务器无响应
'
)
...
...
@@ -370,7 +403,7 @@ async function fetchTokens() {
if
(
statusFilter
.
value
[
0
]
===
'
locked
'
)
params
.
append
(
'
is_locked
'
,
'
true
'
)
if
(
statusFilter
.
value
[
0
]
===
'
normal
'
)
params
.
append
(
'
is_locked
'
,
'
false
'
)
}
const
response
=
await
fetch
(
`
${
API_BASE_URL
}
/api/token/list?
${
params
.
toString
()}
`
,
{
const
response
=
await
fetch
(
`
${
environment
.
API_BASE_URL
}
/api/token/list?
${
params
.
toString
()}
`
,
{
credentials
:
'
include
'
})
const
res
=
await
response
.
json
()
...
...
@@ -391,7 +424,6 @@ async function fetchTokens() {
}
}
const
API_BASE_URL
=
import
.
meta
.
env
.
VITE_API_BASE_URL
const
loading
=
ref
(
false
)
onMounted
(()
=>
{
...
...
@@ -614,6 +646,20 @@ onBeforeUnmount(() => {
background
:
#16a34a
;
}
.delete-btn
{
color
:
#ef4444
;
}
.issue-btn
{
background
:
#3b82f6
;
color
:
#fff
;
border
:
none
;
border-radius
:
4px
;
padding
:
4px
16px
;
font-size
:
14px
;
cursor
:
pointer
;
transition
:
background
0.2s
;
margin-left
:
8px
;
}
.issue-btn
:hover
{
background
:
#2563eb
;
}
.table-footer
{
display
:
flex
;
...
...
tushare-token-front/vite.config.js
View file @
fbe10f1a
...
...
@@ -4,6 +4,7 @@ import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export
default
defineConfig
({
base
:
'
/tushare-web/
'
,
// 部署到子路径时必须加上
plugins
:
[
vue
()],
resolve
:
{
alias
:
{
...
...
tushare-web-api/app/api/tushare.py
View file @
fbe10f1a
...
...
@@ -3,9 +3,12 @@ from app.service import tushare_funet
from
app.services
import
TokenService
import
inspect
from
datetime
import
datetime
,
timedelta
from
app.utils.logger
import
get_logger
router
=
APIRouter
(
prefix
=
"
/tushare
"
,
tags
=
[
"
tushare
"
])
logger
=
get_logger
(
"
tushare_entry
"
)
ALL_TOKENS
=
{}
# key: token_value, value: token_info(完整字典)
TOKEN_IP_MAP
=
{}
# token_value -> {'ip': ip, 'locked_at': datetime or None}
LOCKED_TOKENS
=
set
()
# 被锁定的token
...
...
@@ -113,25 +116,39 @@ router.add_api_route("/pro_bar", pro_bar_view, methods=["POST"])
@router.post
(
""
)
async
def
tushare_entry
(
request
:
Request
):
import
time
start_time
=
time
.
time
()
client_ip
=
request
.
client
.
host
t1
=
time
.
time
()
body
=
await
request
.
json
()
t2
=
time
.
time
()
token
=
body
.
get
(
"
token
"
)
ok
,
msg
=
check_token
(
token
,
client_ip
)
t3
=
time
.
time
()
if
not
ok
:
logger
.
info
(
f
"
[tushare_entry] token check failed, total:
{
time
.
time
()
-
start_time
:
.
4
f
}
s, body:
{
t2
-
t1
:
.
4
f
}
s, check_token:
{
t3
-
t2
:
.
4
f
}
s
"
)
return
Response
(
content
=
msg
,
status_code
=
401
)
api_name
=
body
.
get
(
"
api_name
"
)
t4
=
time
.
time
()
if
not
api_name
:
logger
.
info
(
f
"
[tushare_entry] api_name missing, total:
{
time
.
time
()
-
start_time
:
.
4
f
}
s, body:
{
t2
-
t1
:
.
4
f
}
s, check_token:
{
t3
-
t2
:
.
4
f
}
s, api_name:
{
t4
-
t3
:
.
4
f
}
s
"
)
return
{
"
success
"
:
False
,
"
msg
"
:
"
api_name 不能为空
"
}
# 动态分发
if
not
hasattr
(
pro
,
api_name
):
logger
.
info
(
f
"
[tushare_entry] api_name not supported, total:
{
time
.
time
()
-
start_time
:
.
4
f
}
s, body:
{
t2
-
t1
:
.
4
f
}
s, check_token:
{
t3
-
t2
:
.
4
f
}
s, api_name:
{
t4
-
t3
:
.
4
f
}
s
"
)
return
{
"
success
"
:
False
,
"
msg
"
:
f
"
不支持的api_name:
{
api_name
}
"
}
method
=
getattr
(
pro
,
api_name
)
t5
=
time
.
time
()
try
:
resp
=
method
(
**
body
)
t6
=
time
.
time
()
if
hasattr
(
resp
,
"
status_code
"
)
and
hasattr
(
resp
,
"
content
"
):
logger
.
info
(
f
"
[tushare_entry] finished, total:
{
time
.
time
()
-
start_time
:
.
4
f
}
s, body:
{
t2
-
t1
:
.
4
f
}
s, check_token:
{
t3
-
t2
:
.
4
f
}
s, api_name:
{
t4
-
t3
:
.
4
f
}
s, get_method:
{
t5
-
t4
:
.
4
f
}
s, method_call:
{
t6
-
t5
:
.
4
f
}
s, response:
{
time
.
time
()
-
t6
:
.
4
f
}
s
"
)
return
Response
(
content
=
resp
.
content
,
status_code
=
resp
.
status_code
,
headers
=
dict
(
resp
.
headers
),
media_type
=
resp
.
headers
.
get
(
"
content-type
"
,
None
))
logger
.
info
(
f
"
[tushare_entry] finished, total:
{
time
.
time
()
-
start_time
:
.
4
f
}
s, body:
{
t2
-
t1
:
.
4
f
}
s, check_token:
{
t3
-
t2
:
.
4
f
}
s, api_name:
{
t4
-
t3
:
.
4
f
}
s, get_method:
{
t5
-
t4
:
.
4
f
}
s, method_call:
{
t6
-
t5
:
.
4
f
}
s, response:
{
time
.
time
()
-
t6
:
.
4
f
}
s
"
)
return
resp
except
Exception
as
e
:
logger
.
error
(
f
"
[tushare_entry] exception, total:
{
time
.
time
()
-
start_time
:
.
4
f
}
s, body:
{
t2
-
t1
:
.
4
f
}
s, check_token:
{
t3
-
t2
:
.
4
f
}
s, api_name:
{
t4
-
t3
:
.
4
f
}
s, get_method:
{
t5
-
t4
:
.
4
f
}
s, exception:
{
str
(
e
)
}
"
)
return
Response
(
content
=
str
(
e
),
status_code
=
500
)
@router.post
(
"
/unlock_token
"
)
...
...
tushare-web-api/requirements.txt
View file @
fbe10f1a
fastapi
uvicorn
uvicorn
[standard]
pydantic
sqlalchemy
pymysql
requests
pandas
python-dateutil
python-dotenv
\ No newline at end of file
tushare-web-api/test/test_tushare_api.py
0 → 100644
View file @
fbe10f1a
import
os
import
requests
import
pytest
import
tushare
as
ts
import
tushare_data
as
ts1
import
pandas
as
pd
TUSHARE_TOKEN
=
os
.
getenv
(
'
TS_TOKEN
'
,
'
le2937d38d26f5322ae6096286072faf933
'
)
MY_TOKEN
=
os
.
getenv
(
'
MY_TOKEN
'
,
'
1ab08efbf57546eab5a62499848c542a
'
)
# tushare官方接口列表(可根据需要补充)
TUSHARE_APIS
=
[
(
'
stock_basic
'
,
{
'
exchange
'
:
''
,
'
list_status
'
:
'
L
'
,
'
fields
'
:
'
ts_code,symbol,name,area,industry,list_date
'
}),
# ('daily', {...}),
# ... 其他接口及参数
]
pro
=
ts
.
pro_api
(
TUSHARE_TOKEN
)
pro1
=
ts1
.
pro_api
(
MY_TOKEN
)
def
compare_result
(
my_result
,
tushare_result
):
"""
严格对比两个DataFrame的字段、行数、所有单元格的值。
"""
# 字段名对比
assert
list
(
my_result
.
columns
)
==
list
(
tushare_result
.
columns
),
f
"
字段不一致:
{
list
(
my_result
.
columns
)
}
vs
{
list
(
tushare_result
.
columns
)
}
"
# 行数对比
assert
len
(
my_result
)
==
len
(
tushare_result
),
f
"
行数不一致:
{
len
(
my_result
)
}
vs
{
len
(
tushare_result
)
}
"
# 所有值对比(忽略索引和数据类型差异)
pd
.
testing
.
assert_frame_equal
(
my_result
.
reset_index
(
drop
=
True
),
tushare_result
.
reset_index
(
drop
=
True
),
check_dtype
=
False
,
check_like
=
True
,
check_exact
=
False
# 允许浮点误差
)
def
test_stock_basic
():
tushare_result
=
ts
.
stock_basic
(
exchange
=
''
,
list_status
=
'
L
'
,
fields
=
'
ts_code,symbol,name,area,industry,list_date
'
)
my_result
=
ts1
.
stock_basic
(
exchange
=
''
,
list_status
=
'
L
'
,
fields
=
'
ts_code,symbol,name,area,industry,list_date
'
)
compare_result
(
my_result
,
tushare_result
)
\ No newline at end of file
tushare-web-api/test/tushare_data.py
0 → 100644
View file @
fbe10f1a
import
requests
import
pandas
as
pd
import
time
class
pro_api
:
# def __init__(self, token):
# self.token = token # 实例变量 name
# set_token(token)
def
__init__
(
self
,
token
=
None
):
if
token
is
not
None
:
self
.
token
=
token
# 实例变量,用于内部使用或调试
set_token
(
token
)
else
:
self
.
token
=
get_token
()
if
self
.
token
is
None
:
raise
ValueError
(
"
请设置token
"
)
else
:
pass
def
query
(
self
,
api_name
,
fields
=
''
,
**
kwargs
):
"""
Fetch stock data from a given URL with specified parameters.
Parameters:
ts_code (str): The stock code to fetch data for.
start_date (str): The start date for fetching data (in
'
YYYY-MM-DD HH:MM:SS
'
format).
end_date (str): The end date for fetching data (in
'
YYYY-MM-DD HH:MM:SS
'
format).
freq (str): The frequency of the data (e.g.,
'
1min
'
,
'
5min
'
,
'
15min
'
,
'
30min
'
,
'
60min
'
).
token (str): The access token for the data source. Default is provided.
offset (str, 可选): 数据偏移量,用于分页获取数据,默认为
'
0
'
。当需要获取更多数据时,可以增大此值。
freq (str, 可选): 数据频率,指定返回数据的时间间隔,例如
'
1min
'
(1分钟)、
'
5min
'
(5分钟)、
'
15min
'
(15分钟)、
'
30min
'
(30分钟)、
'
60min
'
(60分钟,即1小时)等。默认为
'
60min
'
。
Returns:
pd.DataFrame: A DataFrame containing the fetched stock data.
"""
# url="http://127.0.0.1:9002/tq"
url
=
"
http://114.132.244.63/api-tushare/tushare
"
params
=
{
'
token
'
:
get_token
(),
'
api_name
'
:
api_name
,
'
params
'
:
kwargs
,
'
fields
'
:
fields
,
}
start_time
=
time
.
time
()
# 增加耗时统计开始
response
=
requests
.
post
(
url
,
json
=
params
)
elapsed
=
time
.
time
()
-
start_time
# 统计耗时
print
(
f
"
[tushare_data.py] query接口耗时:
{
elapsed
:
.
3
f
}
秒
"
)
if
response
.
status_code
==
200
:
try
:
data
=
response
.
json
()
# print('DEBUG tushare_data.py 返回数据:', data) # 新增调试打印
# print(data)
if
data
==
'
token无效或已超期,请重新购买
'
:
return
data
else
:
df
=
pd
.
DataFrame
(
data
)
return
df
except
ValueError
as
e
:
raise
ValueError
(
"
数据获取错误
"
,
e
)
else
:
# print(f"Failed to fetch data. Status code: {response.status_code}")
# print(response.text)
raise
ValueError
(
"
数据获取错误
"
,
response
.
status_code
,
response
.
text
)
def
fund_basic
(
self
,
api_name
=
'
fund_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stock_basic
(
self
,
api_name
=
'
stock_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
trade_cal
(
self
,
api_name
=
'
trade_cal
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
daily
(
self
,
api_name
=
'
daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
adj_factor
(
self
,
api_name
=
'
adj_factor
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
daily_basic
(
self
,
api_name
=
'
daily_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
income
(
self
,
api_name
=
'
income
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
income_vip
(
self
,
api_name
=
'
income_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
balancesheet
(
self
,
api_name
=
'
balancesheet
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
balancesheet_vip
(
self
,
api_name
=
'
balancesheet_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cashflow
(
self
,
api_name
=
'
cashflow
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cashflow_vip
(
self
,
api_name
=
'
cashflow_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
forecast
(
self
,
api_name
=
'
forecast
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
forecast_vip
(
self
,
api_name
=
'
forecast_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
express
(
self
,
api_name
=
'
express
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
express_vip
(
self
,
api_name
=
'
express_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
moneyflow_hsgt
(
self
,
api_name
=
'
moneyflow_hsgt
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hsgt_top10
(
self
,
api_name
=
'
hsgt_top10
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ggt_top10
(
self
,
api_name
=
'
ggt_top10
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coinpair
(
self
,
api_name
=
'
coinpair
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coinlist
(
self
,
api_name
=
'
coinlist
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coincap
(
self
,
api_name
=
'
coincap
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
margin
(
self
,
api_name
=
'
margin
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
margin_detail
(
self
,
api_name
=
'
margin_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
top10_holders
(
self
,
api_name
=
'
top10_holders
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
top10_floatholders
(
self
,
api_name
=
'
top10_floatholders
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coinfees
(
self
,
api_name
=
'
coinfees
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coinexchanges
(
self
,
api_name
=
'
coinexchanges
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
jinse
(
self
,
api_name
=
'
jinse
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
btc8
(
self
,
api_name
=
'
btc8
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bishijie
(
self
,
api_name
=
'
bishijie
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
exchange_ann
(
self
,
api_name
=
'
exchange_ann
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
btc_marketcap
(
self
,
api_name
=
'
btc_marketcap
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
btc_pricevol
(
self
,
api_name
=
'
btc_pricevol
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fina_indicator
(
self
,
api_name
=
'
fina_indicator
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fina_indicator_vip
(
self
,
api_name
=
'
fina_indicator_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fina_audit
(
self
,
api_name
=
'
fina_audit
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fina_mainbz
(
self
,
api_name
=
'
fina_mainbz
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fina_mainbz_vip
(
self
,
api_name
=
'
fina_mainbz_vip
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
tmt_twincomedetail
(
self
,
api_name
=
'
tmt_twincomedetail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
tmt_twincome
(
self
,
api_name
=
'
tmt_twincome
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
exchange_twitter
(
self
,
api_name
=
'
exchange_twitter
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_basic
(
self
,
api_name
=
'
index_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_daily
(
self
,
api_name
=
'
index_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_weight
(
self
,
api_name
=
'
index_weight
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
namechange
(
self
,
api_name
=
'
namechange
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
dividend
(
self
,
api_name
=
'
dividend
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hs_const
(
self
,
api_name
=
'
hs_const
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
twitter_kol
(
self
,
api_name
=
'
twitter_kol
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
top_list
(
self
,
api_name
=
'
top_list
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
top_inst
(
self
,
api_name
=
'
top_inst
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
pledge_stat
(
self
,
api_name
=
'
pledge_stat
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
pledge_detail
(
self
,
api_name
=
'
pledge_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stock_company
(
self
,
api_name
=
'
stock_company
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bo_monthly
(
self
,
api_name
=
'
bo_monthly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bo_weekly
(
self
,
api_name
=
'
bo_weekly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bo_daily
(
self
,
api_name
=
'
bo_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bo_cinema
(
self
,
api_name
=
'
bo_cinema
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_company
(
self
,
api_name
=
'
fund_company
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_nav
(
self
,
api_name
=
'
fund_nav
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_div
(
self
,
api_name
=
'
fund_div
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_portfolio
(
self
,
api_name
=
'
fund_portfolio
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
new_share
(
self
,
api_name
=
'
new_share
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
repurchase
(
self
,
api_name
=
'
repurchase
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
concept
(
self
,
api_name
=
'
concept
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
concept_detail
(
self
,
api_name
=
'
concept_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_daily
(
self
,
api_name
=
'
fund_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_dailybasic
(
self
,
api_name
=
'
index_dailybasic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_basic
(
self
,
api_name
=
'
fut_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
trade_cal
(
self
,
api_name
=
'
trade_cal
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_daily
(
self
,
api_name
=
'
fut_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_holding
(
self
,
api_name
=
'
fut_holding
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_wsr
(
self
,
api_name
=
'
fut_wsr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_settle
(
self
,
api_name
=
'
fut_settle
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
news
(
self
,
api_name
=
'
news
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
weekly
(
self
,
api_name
=
'
weekly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
monthly
(
self
,
api_name
=
'
monthly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
shibor
(
self
,
api_name
=
'
shibor
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
shibor_quote
(
self
,
api_name
=
'
shibor_quote
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
shibor_lpr
(
self
,
api_name
=
'
shibor_lpr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
libor
(
self
,
api_name
=
'
libor
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hibor
(
self
,
api_name
=
'
hibor
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cctv_news
(
self
,
api_name
=
'
cctv_news
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
index_daily
(
self
,
api_name
=
'
index_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
film_record
(
self
,
api_name
=
'
film_record
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
opt_basic
(
self
,
api_name
=
'
opt_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
opt_daily
(
self
,
api_name
=
'
opt_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
share_float
(
self
,
api_name
=
'
share_float
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
block_trade
(
self
,
api_name
=
'
block_trade
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
disclosure_date
(
self
,
api_name
=
'
disclosure_date
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_account
(
self
,
api_name
=
'
stk_account
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_account_old
(
self
,
api_name
=
'
stk_account_old
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_holdernumber
(
self
,
api_name
=
'
stk_holdernumber
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
moneyflow
(
self
,
api_name
=
'
moneyflow
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_weekly
(
self
,
api_name
=
'
index_weekly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_monthly
(
self
,
api_name
=
'
index_monthly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
wz_index
(
self
,
api_name
=
'
wz_index
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
gz_index
(
self
,
api_name
=
'
gz_index
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_holdertrade
(
self
,
api_name
=
'
stk_holdertrade
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
anns_d
(
self
,
api_name
=
'
anns_d
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fx_obasic
(
self
,
api_name
=
'
fx_obasic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fx_daily
(
self
,
api_name
=
'
fx_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
teleplay_record
(
self
,
api_name
=
'
teleplay_record
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_classify
(
self
,
api_name
=
'
index_classify
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_limit
(
self
,
api_name
=
'
stk_limit
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cb_basic
(
self
,
api_name
=
'
cb_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cb_issue
(
self
,
api_name
=
'
cb_issue
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cb_daily
(
self
,
api_name
=
'
cb_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hk_hold
(
self
,
api_name
=
'
hk_hold
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_mapping
(
self
,
api_name
=
'
fut_mapping
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hk_basic
(
self
,
api_name
=
'
hk_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hk_daily
(
self
,
api_name
=
'
hk_daily
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
stk_managers
(
self
,
api_name
=
'
stk_managers
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_rewards
(
self
,
api_name
=
'
stk_rewards
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
major_news
(
self
,
api_name
=
'
major_news
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
ggt_daily
(
self
,
api_name
=
'
ggt_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ggt_monthly
(
self
,
api_name
=
'
ggt_monthly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_adj
(
self
,
api_name
=
'
fund_adj
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
yc_cb
(
self
,
api_name
=
'
yc_cb
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ncov_num
(
self
,
api_name
=
'
ncov_num
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_share
(
self
,
api_name
=
'
fund_share
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_manager
(
self
,
api_name
=
'
fund_manager
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_global
(
self
,
api_name
=
'
index_global
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
idx_factor_pro
(
self
,
api_name
=
'
idx_factor_pro
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_factor_pro
(
self
,
api_name
=
'
fund_factor_pro
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ncov_global
(
self
,
api_name
=
'
ncov_global
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
suspend_d
(
self
,
api_name
=
'
suspend_d
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
daily_info
(
self
,
api_name
=
'
daily_info
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_weekly_detail
(
self
,
api_name
=
'
fut_weekly_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_tycr
(
self
,
api_name
=
'
us_tycr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_trycr
(
self
,
api_name
=
'
us_trycr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_tbr
(
self
,
api_name
=
'
us_tbr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_tltr
(
self
,
api_name
=
'
us_tltr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_trltr
(
self
,
api_name
=
'
us_trltr
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cn_gdp
(
self
,
api_name
=
'
cn_gdp
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cn_cpi
(
self
,
api_name
=
'
cn_cpi
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
eco_cal
(
self
,
api_name
=
'
eco_cal
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coin_bar
(
self
,
api_name
=
'
coin_bar
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cn_m
(
self
,
api_name
=
'
cn_m
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cn_ppi
(
self
,
api_name
=
'
cn_ppi
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cb_price_chg
(
self
,
api_name
=
'
cb_price_chg
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cb_share
(
self
,
api_name
=
'
cb_share
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hk_tradecal
(
self
,
api_name
=
'
hk_tradecal
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_basic
(
self
,
api_name
=
'
us_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_tradecal
(
self
,
api_name
=
'
us_tradecal
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_daily
(
self
,
api_name
=
'
us_daily
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
bak_daily
(
self
,
api_name
=
'
bak_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
repo_daily
(
self
,
api_name
=
'
repo_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
coin_pair
(
self
,
api_name
=
'
coin_pair
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ths_index
(
self
,
api_name
=
'
ths_index
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ths_daily
(
self
,
api_name
=
'
ths_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
dc_index
(
self
,
api_name
=
'
dc_index
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
dc_member
(
self
,
api_name
=
'
dc_member
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ths_member
(
self
,
api_name
=
'
ths_member
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bak_basic
(
self
,
api_name
=
'
bak_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_sales_ratio
(
self
,
api_name
=
'
fund_sales_ratio
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fund_sales_vol
(
self
,
api_name
=
'
fund_sales_vol
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
broker_recommend
(
self
,
api_name
=
'
broker_recommend
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
sz_daily_info
(
self
,
api_name
=
'
sz_daily_info
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cb_call
(
self
,
api_name
=
'
cb_call
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bond_blk
(
self
,
api_name
=
'
bond_blk
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bond_blk_detail
(
self
,
api_name
=
'
bond_blk_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ccass_hold_detail
(
self
,
api_name
=
'
ccass_hold_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_surv
(
self
,
api_name
=
'
stk_surv
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
sge_basic
(
self
,
api_name
=
'
sge_basic
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
sge_daily
(
self
,
api_name
=
'
sge_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
report_rc
(
self
,
api_name
=
'
report_rc
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cyq_perf
(
self
,
api_name
=
'
cyq_perf
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cyq_chips
(
self
,
api_name
=
'
cyq_chips
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ccass_hold
(
self
,
api_name
=
'
ccass_hold
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_factor
(
self
,
api_name
=
'
stk_factor
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
limit_list_d
(
self
,
api_name
=
'
limit_list_d
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stock_mx
(
self
,
api_name
=
'
stock_mx
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stock_vx
(
self
,
api_name
=
'
stock_vx
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hk_mins
(
self
,
api_name
=
'
hk_mins
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
cb_rate
(
self
,
api_name
=
'
cb_rate
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ci_daily
(
self
,
api_name
=
'
ci_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
sf_month
(
self
,
api_name
=
'
sf_month
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hm_list
(
self
,
api_name
=
'
hm_list
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
hm_detail
(
self
,
api_name
=
'
hm_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ft_mins
(
self
,
api_name
=
'
ft_mins
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
realtime_quote
(
self
,
api_name
=
'
realtime_quote
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
realtime_tick
(
self
,
api_name
=
'
realtime_tick
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
realtime_list
(
self
,
api_name
=
'
realtime_list
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ths_hot
(
self
,
api_name
=
'
ths_hot
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
dc_hot
(
self
,
api_name
=
'
dc_hot
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bc_otcqt
(
self
,
api_name
=
'
bc_otcqt
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
bc_bestotcqt
(
self
,
api_name
=
'
bc_bestotcqt
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
cn_pmi
(
self
,
api_name
=
'
cn_pmi
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
margin_secs
(
self
,
api_name
=
'
margin_secs
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
sw_daily
(
self
,
api_name
=
'
sw_daily
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_factor_pro
(
self
,
api_name
=
'
stk_factor_pro
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_premarket
(
self
,
api_name
=
'
stk_premarket
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
slb_len
(
self
,
api_name
=
'
slb_len
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
slb_sec
(
self
,
api_name
=
'
slb_sec
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
slb_sec_detail
(
self
,
api_name
=
'
slb_sec_detail
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
slb_len_mm
(
self
,
api_name
=
'
slb_len_mm
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
index_member_all
(
self
,
api_name
=
'
index_member_all
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_weekly_monthly
(
self
,
api_name
=
'
stk_weekly_monthly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
fut_weekly_monthly
(
self
,
api_name
=
'
fut_weekly_monthly
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
us_daily_adj
(
self
,
api_name
=
'
us_daily_adj
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
hk_daily_adj
(
self
,
api_name
=
'
hk_daily_adj
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
rt_fut_min
(
self
,
api_name
=
'
rt_fut_min
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
opt_mins
(
self
,
api_name
=
'
opt_mins
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
moneyflow_ind_ths
(
self
,
api_name
=
'
moneyflow_ind_ths
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
moneyflow_ind_dc
(
self
,
api_name
=
'
moneyflow_ind_dc
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
moneyflow_mkt_dc
(
self
,
api_name
=
'
moneyflow_mkt_dc
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
kpl_list
(
self
,
api_name
=
'
kpl_list
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
moneyflow_ths
(
self
,
api_name
=
'
moneyflow_ths
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
moneyflow_dc
(
self
,
api_name
=
'
moneyflow_dc
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
kpl_concept
(
self
,
api_name
=
'
kpl_concept
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
kpl_concept_cons
(
self
,
api_name
=
'
kpl_concept_cons
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_auction_o
(
self
,
api_name
=
'
stk_auction_o
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
stk_auction_c
(
self
,
api_name
=
'
stk_auction_c
'
,
**
kwargs
):
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
def
stk_auction
(
self
,
api_name
=
'
stk_auction
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
ft_limit
(
self
,
api_name
=
'
ft_limit
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
irm_qa_sh
(
self
,
api_name
=
'
irm_qa_sh
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
irm_qa_sz
(
self
,
api_name
=
'
irm_qa_sz
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
stk_week_month_adj
(
self
,
api_name
=
'
stk_week_month_adj
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
limit_list_ths
(
self
,
api_name
=
'
limit_list_ths
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
limit_step
(
self
,
api_name
=
'
limit_step
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
def
limit_cpt_list
(
self
,
api_name
=
'
limit_cpt_list
'
,
**
kwargs
):
return
self
.
query
(
token
=
self
.
token
,
api_name
=
api_name
,
**
kwargs
)
import
pandas
as
pd
import
os
BK
=
'
bk
'
def
set_token
(
token
):
df
=
pd
.
DataFrame
([
token
],
columns
=
[
'
token
'
])
user_home
=
os
.
path
.
expanduser
(
'
~
'
)
fp
=
os
.
path
.
join
(
user_home
,
'
c_t.csv
'
)
df
.
to_csv
(
fp
,
index
=
False
)
def
get_token
():
user_home
=
os
.
path
.
expanduser
(
'
~
'
)
fp
=
os
.
path
.
join
(
user_home
,
'
c_t.csv
'
)
if
os
.
path
.
exists
(
fp
):
df
=
pd
.
read_csv
(
fp
)
return
str
(
df
.
loc
[
0
][
'
token
'
])
else
:
print
(
"
请设置token
"
)
return
None
import
warnings
warnings
.
simplefilter
(
action
=
'
ignore
'
,
category
=
FutureWarning
)
#消除告警
import
requests
#
#
def
pro_bar
(
ts_code
=
''
,
api
=
None
,
start_date
=
''
,
end_date
=
''
,
freq
=
'
D
'
,
asset
=
'
E
'
,
exchange
=
''
,
adj
=
None
,
ma
=
[],
factors
=
None
,
adjfactor
=
False
,
offset
=
None
,
limit
=
None
,
fields
=
''
,
contract_type
=
''
):
"""
"""
# url = "http://127.0.0.1:9002/tp"
url
=
"
http://120.53.122.167:9002/tp
"
params
=
{
'
token
'
:
get_token
(),
'
ts_code
'
:
ts_code
,
'
api
'
:
api
,
'
start_date
'
:
start_date
,
'
end_date
'
:
end_date
,
'
freq
'
:
freq
,
'
asset
'
:
asset
,
'
exchange
'
:
exchange
,
'
adj
'
:
adj
,
'
ma
'
:
ma
,
"
factors
"
:
factors
,
"
adjfactor
"
:
adjfactor
,
"
offset
"
:
offset
,
"
limit
"
:
limit
,
"
fields
"
:
fields
,
"
contract_type
"
:
contract_type
}
if
'
min
'
in
freq
:
return
'
此接口为单独权限,和积分没有关系,需要单独购买
'
else
:
response
=
requests
.
post
(
url
,
json
=
params
,)
if
response
.
status_code
==
200
:
try
:
data
=
response
.
json
()
# print(data)
if
data
==
'
token无效或已超期,请重新购买
'
:
return
data
else
:
df
=
pd
.
DataFrame
(
data
)
return
df
except
ValueError
as
e
:
# print("Error parsing JSON response:", e)
# return None
raise
ValueError
(
e
)
else
:
raise
ValueError
(
"
数据获取错误
"
,
response
.
status_code
,
response
.
text
)
\ No newline at end of file