stock-tracker
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
**/__pycache__/
|
||||
**/.venv/
|
||||
**/.env
|
||||
**/.git/
|
||||
**/node_modules/
|
||||
**/stock_tracker.db
|
||||
*.md
|
||||
@@ -0,0 +1,68 @@
|
||||
REGISTRY ?= your-registry
|
||||
BACKEND_IMAGE ?= $(REGISTRY)/stock-tracker-backend
|
||||
FRONTEND_IMAGE ?= $(REGISTRY)/stock-tracker-frontend
|
||||
TAG ?= latest
|
||||
PLATFORMS ?= linux/amd64,linux/arm64
|
||||
|
||||
.PHONY: help build build-backend build-frontend push push-backend \
|
||||
push-frontend multiarch multiarch-backend multiarch-frontend \
|
||||
compose-up compose-down compose-build clean
|
||||
|
||||
help: ## 显示帮助信息
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
|
||||
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
# ── 本地构建(当前架构) ──────────────────────────────────
|
||||
|
||||
build: build-backend build-frontend ## 构建后端和前端镜像(当前架构)
|
||||
|
||||
build-backend: ## 构建后端镜像
|
||||
docker build -t $(BACKEND_IMAGE):$(TAG) ./backend
|
||||
|
||||
build-frontend: ## 构建前端镜像
|
||||
docker build -t $(FRONTEND_IMAGE):$(TAG) ./frontend
|
||||
|
||||
# ── 推送单架构镜像 ──────────────────────────────────────
|
||||
|
||||
push: push-backend push-frontend ## 推送后端和前端镜像
|
||||
|
||||
push-backend: build-backend ## 构建并推送后端镜像
|
||||
docker push $(BACKEND_IMAGE):$(TAG)
|
||||
|
||||
push-frontend: build-frontend ## 构建并推送前端镜像
|
||||
docker push $(FRONTEND_IMAGE):$(TAG)
|
||||
|
||||
# ── 多架构构建(arm64 + amd64) ─────────────────────────
|
||||
|
||||
multiarch: multiarch-backend multiarch-frontend ## 构建并推送多架构镜像(arm64 + amd64)
|
||||
|
||||
multiarch-backend: ## 构建并推送后端多架构镜像
|
||||
docker buildx build \
|
||||
--platform $(PLATFORMS) \
|
||||
-t $(BACKEND_IMAGE):$(TAG) \
|
||||
./backend \
|
||||
--push
|
||||
|
||||
multiarch-frontend: ## 构建并推送前端多架构镜像
|
||||
docker buildx build \
|
||||
--platform $(PLATFORMS) \
|
||||
-t $(FRONTEND_IMAGE):$(TAG) \
|
||||
./frontend \
|
||||
--push
|
||||
|
||||
# ── docker compose 管理 ────────────────────────────────
|
||||
|
||||
compose-up: ## 启动所有服务
|
||||
docker compose up -d
|
||||
|
||||
compose-down: ## 停止所有服务
|
||||
docker compose down
|
||||
|
||||
compose-build: ## 构建所有服务(本地架构)
|
||||
docker compose build
|
||||
|
||||
# ── 清理 ───────────────────────────────────────────────
|
||||
|
||||
clean: ## 清理本地构建的镜像
|
||||
-docker rmi $(BACKEND_IMAGE):$(TAG) 2>/dev/null || true
|
||||
-docker rmi $(FRONTEND_IMAGE):$(TAG) 2>/dev/null || true
|
||||
@@ -0,0 +1,241 @@
|
||||
<#
|
||||
.Synopsis
|
||||
Activate a Python virtual environment for the current PowerShell session.
|
||||
|
||||
.Description
|
||||
Pushes the python executable for a virtual environment to the front of the
|
||||
$Env:PATH environment variable and sets the prompt to signify that you are
|
||||
in a Python virtual environment. Makes use of the command line switches as
|
||||
well as the `pyvenv.cfg` file values present in the virtual environment.
|
||||
|
||||
.Parameter VenvDir
|
||||
Path to the directory that contains the virtual environment to activate. The
|
||||
default value for this is the parent of the directory that the Activate.ps1
|
||||
script is located within.
|
||||
|
||||
.Parameter Prompt
|
||||
The prompt prefix to display when this virtual environment is activated. By
|
||||
default, this prompt is the name of the virtual environment folder (VenvDir)
|
||||
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
|
||||
|
||||
.Example
|
||||
Activate.ps1
|
||||
Activates the Python virtual environment that contains the Activate.ps1 script.
|
||||
|
||||
.Example
|
||||
Activate.ps1 -Verbose
|
||||
Activates the Python virtual environment that contains the Activate.ps1 script,
|
||||
and shows extra information about the activation as it executes.
|
||||
|
||||
.Example
|
||||
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
|
||||
Activates the Python virtual environment located in the specified location.
|
||||
|
||||
.Example
|
||||
Activate.ps1 -Prompt "MyPython"
|
||||
Activates the Python virtual environment that contains the Activate.ps1 script,
|
||||
and prefixes the current prompt with the specified string (surrounded in
|
||||
parentheses) while the virtual environment is active.
|
||||
|
||||
.Notes
|
||||
On Windows, it may be required to enable this Activate.ps1 script by setting the
|
||||
execution policy for the user. You can do this by issuing the following PowerShell
|
||||
command:
|
||||
|
||||
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
|
||||
For more information on Execution Policies:
|
||||
https://go.microsoft.com/fwlink/?LinkID=135170
|
||||
|
||||
#>
|
||||
Param(
|
||||
[Parameter(Mandatory = $false)]
|
||||
[String]
|
||||
$VenvDir,
|
||||
[Parameter(Mandatory = $false)]
|
||||
[String]
|
||||
$Prompt
|
||||
)
|
||||
|
||||
<# Function declarations --------------------------------------------------- #>
|
||||
|
||||
<#
|
||||
.Synopsis
|
||||
Remove all shell session elements added by the Activate script, including the
|
||||
addition of the virtual environment's Python executable from the beginning of
|
||||
the PATH variable.
|
||||
|
||||
.Parameter NonDestructive
|
||||
If present, do not remove this function from the global namespace for the
|
||||
session.
|
||||
|
||||
#>
|
||||
function global:deactivate ([switch]$NonDestructive) {
|
||||
# Revert to original values
|
||||
|
||||
# The prior prompt:
|
||||
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
|
||||
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
|
||||
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
|
||||
}
|
||||
|
||||
# The prior PYTHONHOME:
|
||||
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
|
||||
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
|
||||
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
|
||||
}
|
||||
|
||||
# The prior PATH:
|
||||
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
|
||||
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
|
||||
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
|
||||
}
|
||||
|
||||
# Just remove the VIRTUAL_ENV altogether:
|
||||
if (Test-Path -Path Env:VIRTUAL_ENV) {
|
||||
Remove-Item -Path env:VIRTUAL_ENV
|
||||
}
|
||||
|
||||
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
|
||||
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
|
||||
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
|
||||
}
|
||||
|
||||
# Leave deactivate function in the global namespace if requested:
|
||||
if (-not $NonDestructive) {
|
||||
Remove-Item -Path function:deactivate
|
||||
}
|
||||
}
|
||||
|
||||
<#
|
||||
.Description
|
||||
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
|
||||
given folder, and returns them in a map.
|
||||
|
||||
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
|
||||
two strings separated by `=` (with any amount of whitespace surrounding the =)
|
||||
then it is considered a `key = value` line. The left hand string is the key,
|
||||
the right hand is the value.
|
||||
|
||||
If the value starts with a `'` or a `"` then the first and last character is
|
||||
stripped from the value before being captured.
|
||||
|
||||
.Parameter ConfigDir
|
||||
Path to the directory that contains the `pyvenv.cfg` file.
|
||||
#>
|
||||
function Get-PyVenvConfig(
|
||||
[String]
|
||||
$ConfigDir
|
||||
) {
|
||||
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
|
||||
|
||||
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
|
||||
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
|
||||
|
||||
# An empty map will be returned if no config file is found.
|
||||
$pyvenvConfig = @{ }
|
||||
|
||||
if ($pyvenvConfigPath) {
|
||||
|
||||
Write-Verbose "File exists, parse `key = value` lines"
|
||||
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
|
||||
|
||||
$pyvenvConfigContent | ForEach-Object {
|
||||
$keyval = $PSItem -split "\s*=\s*", 2
|
||||
if ($keyval[0] -and $keyval[1]) {
|
||||
$val = $keyval[1]
|
||||
|
||||
# Remove extraneous quotations around a string value.
|
||||
if ("'""".Contains($val.Substring(0, 1))) {
|
||||
$val = $val.Substring(1, $val.Length - 2)
|
||||
}
|
||||
|
||||
$pyvenvConfig[$keyval[0]] = $val
|
||||
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
|
||||
}
|
||||
}
|
||||
}
|
||||
return $pyvenvConfig
|
||||
}
|
||||
|
||||
|
||||
<# Begin Activate script --------------------------------------------------- #>
|
||||
|
||||
# Determine the containing directory of this script
|
||||
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
||||
$VenvExecDir = Get-Item -Path $VenvExecPath
|
||||
|
||||
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
|
||||
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
|
||||
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
|
||||
|
||||
# Set values required in priority: CmdLine, ConfigFile, Default
|
||||
# First, get the location of the virtual environment, it might not be
|
||||
# VenvExecDir if specified on the command line.
|
||||
if ($VenvDir) {
|
||||
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
|
||||
}
|
||||
else {
|
||||
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
|
||||
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
|
||||
Write-Verbose "VenvDir=$VenvDir"
|
||||
}
|
||||
|
||||
# Next, read the `pyvenv.cfg` file to determine any required value such
|
||||
# as `prompt`.
|
||||
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
|
||||
|
||||
# Next, set the prompt from the command line, or the config file, or
|
||||
# just use the name of the virtual environment folder.
|
||||
if ($Prompt) {
|
||||
Write-Verbose "Prompt specified as argument, using '$Prompt'"
|
||||
}
|
||||
else {
|
||||
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
|
||||
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
|
||||
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
|
||||
$Prompt = $pyvenvCfg['prompt'];
|
||||
}
|
||||
else {
|
||||
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virutal environment)"
|
||||
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
|
||||
$Prompt = Split-Path -Path $venvDir -Leaf
|
||||
}
|
||||
}
|
||||
|
||||
Write-Verbose "Prompt = '$Prompt'"
|
||||
Write-Verbose "VenvDir='$VenvDir'"
|
||||
|
||||
# Deactivate any currently active virtual environment, but leave the
|
||||
# deactivate function in place.
|
||||
deactivate -nondestructive
|
||||
|
||||
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
|
||||
# that there is an activated venv.
|
||||
$env:VIRTUAL_ENV = $VenvDir
|
||||
|
||||
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
||||
|
||||
Write-Verbose "Setting prompt to '$Prompt'"
|
||||
|
||||
# Set the prompt to include the env name
|
||||
# Make sure _OLD_VIRTUAL_PROMPT is global
|
||||
function global:_OLD_VIRTUAL_PROMPT { "" }
|
||||
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
|
||||
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
|
||||
|
||||
function global:prompt {
|
||||
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
|
||||
_OLD_VIRTUAL_PROMPT
|
||||
}
|
||||
}
|
||||
|
||||
# Clear PYTHONHOME
|
||||
if (Test-Path -Path Env:PYTHONHOME) {
|
||||
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
|
||||
Remove-Item -Path Env:PYTHONHOME
|
||||
}
|
||||
|
||||
# Add the venv to the PATH
|
||||
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
|
||||
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
|
||||
@@ -0,0 +1,66 @@
|
||||
# This file must be used with "source bin/activate" *from bash*
|
||||
# you cannot run it directly
|
||||
|
||||
deactivate () {
|
||||
# reset old environment variables
|
||||
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
||||
PATH="${_OLD_VIRTUAL_PATH:-}"
|
||||
export PATH
|
||||
unset _OLD_VIRTUAL_PATH
|
||||
fi
|
||||
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
||||
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
||||
export PYTHONHOME
|
||||
unset _OLD_VIRTUAL_PYTHONHOME
|
||||
fi
|
||||
|
||||
# This should detect bash and zsh, which have a hash command that must
|
||||
# be called to get it to forget past commands. Without forgetting
|
||||
# past commands the $PATH changes we made may not be respected
|
||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
||||
hash -r 2> /dev/null
|
||||
fi
|
||||
|
||||
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
||||
PS1="${_OLD_VIRTUAL_PS1:-}"
|
||||
export PS1
|
||||
unset _OLD_VIRTUAL_PS1
|
||||
fi
|
||||
|
||||
unset VIRTUAL_ENV
|
||||
if [ ! "${1:-}" = "nondestructive" ] ; then
|
||||
# Self destruct!
|
||||
unset -f deactivate
|
||||
fi
|
||||
}
|
||||
|
||||
# unset irrelevant variables
|
||||
deactivate nondestructive
|
||||
|
||||
VIRTUAL_ENV="/Users/cjun/Code/github/stock-tracker/backend/.venv"
|
||||
export VIRTUAL_ENV
|
||||
|
||||
_OLD_VIRTUAL_PATH="$PATH"
|
||||
PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
export PATH
|
||||
|
||||
# unset PYTHONHOME if set
|
||||
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
||||
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
||||
if [ -n "${PYTHONHOME:-}" ] ; then
|
||||
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
||||
unset PYTHONHOME
|
||||
fi
|
||||
|
||||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
||||
_OLD_VIRTUAL_PS1="${PS1:-}"
|
||||
PS1="(.venv) ${PS1:-}"
|
||||
export PS1
|
||||
fi
|
||||
|
||||
# This should detect bash and zsh, which have a hash command that must
|
||||
# be called to get it to forget past commands. Without forgetting
|
||||
# past commands the $PATH changes we made may not be respected
|
||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
||||
hash -r 2> /dev/null
|
||||
fi
|
||||
@@ -0,0 +1,25 @@
|
||||
# This file must be used with "source bin/activate.csh" *from csh*.
|
||||
# You cannot run it directly.
|
||||
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
||||
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
||||
|
||||
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
|
||||
|
||||
# Unset irrelevant variables.
|
||||
deactivate nondestructive
|
||||
|
||||
setenv VIRTUAL_ENV "/Users/cjun/Code/github/stock-tracker/backend/.venv"
|
||||
|
||||
set _OLD_VIRTUAL_PATH="$PATH"
|
||||
setenv PATH "$VIRTUAL_ENV/bin:$PATH"
|
||||
|
||||
|
||||
set _OLD_VIRTUAL_PROMPT="$prompt"
|
||||
|
||||
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
||||
set prompt = "(.venv) $prompt"
|
||||
endif
|
||||
|
||||
alias pydoc python -m pydoc
|
||||
|
||||
rehash
|
||||
@@ -0,0 +1,64 @@
|
||||
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
|
||||
# (https://fishshell.com/); you cannot run it directly.
|
||||
|
||||
function deactivate -d "Exit virtual environment and return to normal shell environment"
|
||||
# reset old environment variables
|
||||
if test -n "$_OLD_VIRTUAL_PATH"
|
||||
set -gx PATH $_OLD_VIRTUAL_PATH
|
||||
set -e _OLD_VIRTUAL_PATH
|
||||
end
|
||||
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
||||
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
||||
set -e _OLD_VIRTUAL_PYTHONHOME
|
||||
end
|
||||
|
||||
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
||||
functions -e fish_prompt
|
||||
set -e _OLD_FISH_PROMPT_OVERRIDE
|
||||
functions -c _old_fish_prompt fish_prompt
|
||||
functions -e _old_fish_prompt
|
||||
end
|
||||
|
||||
set -e VIRTUAL_ENV
|
||||
if test "$argv[1]" != "nondestructive"
|
||||
# Self-destruct!
|
||||
functions -e deactivate
|
||||
end
|
||||
end
|
||||
|
||||
# Unset irrelevant variables.
|
||||
deactivate nondestructive
|
||||
|
||||
set -gx VIRTUAL_ENV "/Users/cjun/Code/github/stock-tracker/backend/.venv"
|
||||
|
||||
set -gx _OLD_VIRTUAL_PATH $PATH
|
||||
set -gx PATH "$VIRTUAL_ENV/bin" $PATH
|
||||
|
||||
# Unset PYTHONHOME if set.
|
||||
if set -q PYTHONHOME
|
||||
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
||||
set -e PYTHONHOME
|
||||
end
|
||||
|
||||
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
||||
# fish uses a function instead of an env var to generate the prompt.
|
||||
|
||||
# Save the current fish_prompt function as the function _old_fish_prompt.
|
||||
functions -c fish_prompt _old_fish_prompt
|
||||
|
||||
# With the original prompt function renamed, we can override with our own.
|
||||
function fish_prompt
|
||||
# Save the return status of the last command.
|
||||
set -l old_status $status
|
||||
|
||||
# Output the venv prompt; color taken from the blue of the Python logo.
|
||||
printf "%s%s%s" (set_color 4B8BBE) "(.venv) " (set_color normal)
|
||||
|
||||
# Restore the return status of the previous command.
|
||||
echo "exit $old_status" | .
|
||||
# Output the original/"old" prompt.
|
||||
_old_fish_prompt
|
||||
end
|
||||
|
||||
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
||||
end
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from dotenv.__main__ import cli
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(cli())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from numpy.f2py.f2py2e import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from fastapi.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from idna.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from charset_normalizer.cli import cli_detect
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(cli_detect())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
python3
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
/Applications/Xcode.app/Contents/Developer/usr/bin/python3
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
python3
|
||||
Executable
+410
@@ -0,0 +1,410 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# Copyright (c) 2005-2012 Stephen John Machin, Lingfo Pty Ltd
|
||||
# This script is part of the xlrd package, which is released under a
|
||||
# BSD-style licence.
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
cmd_doc = """
|
||||
Commands:
|
||||
|
||||
2rows Print the contents of first and last row in each sheet
|
||||
3rows Print the contents of first, second and last row in each sheet
|
||||
bench Same as "show", but doesn't print -- for profiling
|
||||
biff_count[1] Print a count of each type of BIFF record in the file
|
||||
biff_dump[1] Print a dump (char and hex) of the BIFF records in the file
|
||||
fonts hdr + print a dump of all font objects
|
||||
hdr Mini-overview of file (no per-sheet information)
|
||||
hotshot Do a hotshot profile run e.g. ... -f1 hotshot bench bigfile*.xls
|
||||
labels Dump of sheet.col_label_ranges and ...row... for each sheet
|
||||
name_dump Dump of each object in book.name_obj_list
|
||||
names Print brief information for each NAME record
|
||||
ov Overview of file
|
||||
profile Like "hotshot", but uses cProfile
|
||||
show Print the contents of all rows in each sheet
|
||||
version[0] Print versions of xlrd and Python and exit
|
||||
xfc Print "XF counts" and cell-type counts -- see code for details
|
||||
|
||||
[0] means no file arg
|
||||
[1] means only one file arg i.e. no glob.glob pattern
|
||||
"""
|
||||
|
||||
options = None
|
||||
if __name__ == "__main__":
|
||||
import xlrd
|
||||
import sys
|
||||
import time
|
||||
import glob
|
||||
import traceback
|
||||
import gc
|
||||
|
||||
from xlrd.timemachine import xrange, REPR
|
||||
|
||||
|
||||
class LogHandler(object):
|
||||
|
||||
def __init__(self, logfileobj):
|
||||
self.logfileobj = logfileobj
|
||||
self.fileheading = None
|
||||
self.shown = 0
|
||||
|
||||
def setfileheading(self, fileheading):
|
||||
self.fileheading = fileheading
|
||||
self.shown = 0
|
||||
|
||||
def write(self, text):
|
||||
if self.fileheading and not self.shown:
|
||||
self.logfileobj.write(self.fileheading)
|
||||
self.shown = 1
|
||||
self.logfileobj.write(text)
|
||||
|
||||
null_cell = xlrd.empty_cell
|
||||
|
||||
def show_row(bk, sh, rowx, colrange, printit):
|
||||
if bk.ragged_rows:
|
||||
colrange = range(sh.row_len(rowx))
|
||||
if not colrange: return
|
||||
if printit: print()
|
||||
if bk.formatting_info:
|
||||
for colx, ty, val, cxfx in get_row_data(bk, sh, rowx, colrange):
|
||||
if printit:
|
||||
print("cell %s%d: type=%d, data: %r, xfx: %s"
|
||||
% (xlrd.colname(colx), rowx+1, ty, val, cxfx))
|
||||
else:
|
||||
for colx, ty, val, _unused in get_row_data(bk, sh, rowx, colrange):
|
||||
if printit:
|
||||
print("cell %s%d: type=%d, data: %r" % (xlrd.colname(colx), rowx+1, ty, val))
|
||||
|
||||
def get_row_data(bk, sh, rowx, colrange):
|
||||
result = []
|
||||
dmode = bk.datemode
|
||||
ctys = sh.row_types(rowx)
|
||||
cvals = sh.row_values(rowx)
|
||||
for colx in colrange:
|
||||
cty = ctys[colx]
|
||||
cval = cvals[colx]
|
||||
if bk.formatting_info:
|
||||
cxfx = str(sh.cell_xf_index(rowx, colx))
|
||||
else:
|
||||
cxfx = ''
|
||||
if cty == xlrd.XL_CELL_DATE:
|
||||
try:
|
||||
showval = xlrd.xldate_as_tuple(cval, dmode)
|
||||
except xlrd.XLDateError as e:
|
||||
showval = "%s:%s" % (type(e).__name__, e)
|
||||
cty = xlrd.XL_CELL_ERROR
|
||||
elif cty == xlrd.XL_CELL_ERROR:
|
||||
showval = xlrd.error_text_from_code.get(cval, '<Unknown error code 0x%02x>' % cval)
|
||||
else:
|
||||
showval = cval
|
||||
result.append((colx, cty, showval, cxfx))
|
||||
return result
|
||||
|
||||
def bk_header(bk):
|
||||
print()
|
||||
print("BIFF version: %s; datemode: %s"
|
||||
% (xlrd.biff_text_from_num[bk.biff_version], bk.datemode))
|
||||
print("codepage: %r (encoding: %s); countries: %r"
|
||||
% (bk.codepage, bk.encoding, bk.countries))
|
||||
print("Last saved by: %r" % bk.user_name)
|
||||
print("Number of data sheets: %d" % bk.nsheets)
|
||||
print("Use mmap: %d; Formatting: %d; On demand: %d"
|
||||
% (bk.use_mmap, bk.formatting_info, bk.on_demand))
|
||||
print("Ragged rows: %d" % bk.ragged_rows)
|
||||
if bk.formatting_info:
|
||||
print("FORMATs: %d, FONTs: %d, XFs: %d"
|
||||
% (len(bk.format_list), len(bk.font_list), len(bk.xf_list)))
|
||||
if not options.suppress_timing:
|
||||
print("Load time: %.2f seconds (stage 1) %.2f seconds (stage 2)"
|
||||
% (bk.load_time_stage_1, bk.load_time_stage_2))
|
||||
print()
|
||||
|
||||
def show_fonts(bk):
|
||||
print("Fonts:")
|
||||
for x in xrange(len(bk.font_list)):
|
||||
font = bk.font_list[x]
|
||||
font.dump(header='== Index %d ==' % x, indent=4)
|
||||
|
||||
def show_names(bk, dump=0):
|
||||
bk_header(bk)
|
||||
if bk.biff_version < 50:
|
||||
print("Names not extracted in this BIFF version")
|
||||
return
|
||||
nlist = bk.name_obj_list
|
||||
print("Name list: %d entries" % len(nlist))
|
||||
for nobj in nlist:
|
||||
if dump:
|
||||
nobj.dump(sys.stdout,
|
||||
header="\n=== Dump of name_obj_list[%d] ===" % nobj.name_index)
|
||||
else:
|
||||
print("[%d]\tName:%r macro:%r scope:%d\n\tresult:%r\n"
|
||||
% (nobj.name_index, nobj.name, nobj.macro, nobj.scope, nobj.result))
|
||||
|
||||
def print_labels(sh, labs, title):
|
||||
if not labs:return
|
||||
for rlo, rhi, clo, chi in labs:
|
||||
print("%s label range %s:%s contains:"
|
||||
% (title, xlrd.cellname(rlo, clo), xlrd.cellname(rhi-1, chi-1)))
|
||||
for rx in xrange(rlo, rhi):
|
||||
for cx in xrange(clo, chi):
|
||||
print(" %s: %r" % (xlrd.cellname(rx, cx), sh.cell_value(rx, cx)))
|
||||
|
||||
def show_labels(bk):
|
||||
# bk_header(bk)
|
||||
hdr = 0
|
||||
for shx in range(bk.nsheets):
|
||||
sh = bk.sheet_by_index(shx)
|
||||
clabs = sh.col_label_ranges
|
||||
rlabs = sh.row_label_ranges
|
||||
if clabs or rlabs:
|
||||
if not hdr:
|
||||
bk_header(bk)
|
||||
hdr = 1
|
||||
print("sheet %d: name = %r; nrows = %d; ncols = %d" %
|
||||
(shx, sh.name, sh.nrows, sh.ncols))
|
||||
print_labels(sh, clabs, 'Col')
|
||||
print_labels(sh, rlabs, 'Row')
|
||||
if bk.on_demand: bk.unload_sheet(shx)
|
||||
|
||||
def show(bk, nshow=65535, printit=1):
|
||||
bk_header(bk)
|
||||
if 0:
|
||||
rclist = xlrd.sheet.rc_stats.items()
|
||||
rclist = sorted(rclist)
|
||||
print("rc stats")
|
||||
for k, v in rclist:
|
||||
print("0x%04x %7d" % (k, v))
|
||||
if options.onesheet:
|
||||
try:
|
||||
shx = int(options.onesheet)
|
||||
except ValueError:
|
||||
shx = bk.sheet_by_name(options.onesheet).number
|
||||
shxrange = [shx]
|
||||
else:
|
||||
shxrange = range(bk.nsheets)
|
||||
# print("shxrange", list(shxrange))
|
||||
for shx in shxrange:
|
||||
sh = bk.sheet_by_index(shx)
|
||||
nrows, ncols = sh.nrows, sh.ncols
|
||||
colrange = range(ncols)
|
||||
anshow = min(nshow, nrows)
|
||||
print("sheet %d: name = %s; nrows = %d; ncols = %d" %
|
||||
(shx, REPR(sh.name), sh.nrows, sh.ncols))
|
||||
if nrows and ncols:
|
||||
# Beat the bounds
|
||||
for rowx in xrange(nrows):
|
||||
nc = sh.row_len(rowx)
|
||||
if nc:
|
||||
sh.row_types(rowx)[nc-1]
|
||||
sh.row_values(rowx)[nc-1]
|
||||
sh.cell(rowx, nc-1)
|
||||
for rowx in xrange(anshow-1):
|
||||
if not printit and rowx % 10000 == 1 and rowx > 1:
|
||||
print("done %d rows" % (rowx-1,))
|
||||
show_row(bk, sh, rowx, colrange, printit)
|
||||
if anshow and nrows:
|
||||
show_row(bk, sh, nrows-1, colrange, printit)
|
||||
print()
|
||||
if bk.on_demand: bk.unload_sheet(shx)
|
||||
|
||||
def count_xfs(bk):
|
||||
bk_header(bk)
|
||||
for shx in range(bk.nsheets):
|
||||
sh = bk.sheet_by_index(shx)
|
||||
nrows = sh.nrows
|
||||
print("sheet %d: name = %r; nrows = %d; ncols = %d" %
|
||||
(shx, sh.name, sh.nrows, sh.ncols))
|
||||
# Access all xfindexes to force gathering stats
|
||||
type_stats = [0, 0, 0, 0, 0, 0, 0]
|
||||
for rowx in xrange(nrows):
|
||||
for colx in xrange(sh.row_len(rowx)):
|
||||
xfx = sh.cell_xf_index(rowx, colx)
|
||||
assert xfx >= 0
|
||||
cty = sh.cell_type(rowx, colx)
|
||||
type_stats[cty] += 1
|
||||
print("XF stats", sh._xf_index_stats)
|
||||
print("type stats", type_stats)
|
||||
print()
|
||||
if bk.on_demand: bk.unload_sheet(shx)
|
||||
|
||||
def main(cmd_args):
|
||||
import optparse
|
||||
global options
|
||||
usage = "\n%prog [options] command [input-file-patterns]\n" + cmd_doc
|
||||
oparser = optparse.OptionParser(usage)
|
||||
oparser.add_option(
|
||||
"-l", "--logfilename",
|
||||
default="",
|
||||
help="contains error messages")
|
||||
oparser.add_option(
|
||||
"-v", "--verbosity",
|
||||
type="int", default=0,
|
||||
help="level of information and diagnostics provided")
|
||||
oparser.add_option(
|
||||
"-m", "--mmap",
|
||||
type="int", default=-1,
|
||||
help="1: use mmap; 0: don't use mmap; -1: accept heuristic")
|
||||
oparser.add_option(
|
||||
"-e", "--encoding",
|
||||
default="",
|
||||
help="encoding override")
|
||||
oparser.add_option(
|
||||
"-f", "--formatting",
|
||||
type="int", default=0,
|
||||
help="0 (default): no fmt info\n"
|
||||
"1: fmt info (all cells)\n",
|
||||
)
|
||||
oparser.add_option(
|
||||
"-g", "--gc",
|
||||
type="int", default=0,
|
||||
help="0: auto gc enabled; 1: auto gc disabled, manual collect after each file; 2: no gc")
|
||||
oparser.add_option(
|
||||
"-s", "--onesheet",
|
||||
default="",
|
||||
help="restrict output to this sheet (name or index)")
|
||||
oparser.add_option(
|
||||
"-u", "--unnumbered",
|
||||
action="store_true", default=0,
|
||||
help="omit line numbers or offsets in biff_dump")
|
||||
oparser.add_option(
|
||||
"-d", "--on-demand",
|
||||
action="store_true", default=0,
|
||||
help="load sheets on demand instead of all at once")
|
||||
oparser.add_option(
|
||||
"-t", "--suppress-timing",
|
||||
action="store_true", default=0,
|
||||
help="don't print timings (diffs are less messy)")
|
||||
oparser.add_option(
|
||||
"-r", "--ragged-rows",
|
||||
action="store_true", default=0,
|
||||
help="open_workbook(..., ragged_rows=True)")
|
||||
options, args = oparser.parse_args(cmd_args)
|
||||
if len(args) == 1 and args[0] in ("version", ):
|
||||
pass
|
||||
elif len(args) < 2:
|
||||
oparser.error("Expected at least 2 args, found %d" % len(args))
|
||||
cmd = args[0]
|
||||
xlrd_version = getattr(xlrd, "__VERSION__", "unknown; before 0.5")
|
||||
if cmd == 'biff_dump':
|
||||
xlrd.dump(args[1], unnumbered=options.unnumbered)
|
||||
sys.exit(0)
|
||||
if cmd == 'biff_count':
|
||||
xlrd.count_records(args[1])
|
||||
sys.exit(0)
|
||||
if cmd == 'version':
|
||||
print("xlrd: %s, from %s" % (xlrd_version, xlrd.__file__))
|
||||
print("Python:", sys.version)
|
||||
sys.exit(0)
|
||||
if options.logfilename:
|
||||
logfile = LogHandler(open(options.logfilename, 'w'))
|
||||
else:
|
||||
logfile = sys.stdout
|
||||
mmap_opt = options.mmap
|
||||
mmap_arg = xlrd.USE_MMAP
|
||||
if mmap_opt in (1, 0):
|
||||
mmap_arg = mmap_opt
|
||||
elif mmap_opt != -1:
|
||||
print('Unexpected value (%r) for mmap option -- assuming default' % mmap_opt)
|
||||
fmt_opt = options.formatting | (cmd in ('xfc', ))
|
||||
gc_mode = options.gc
|
||||
if gc_mode:
|
||||
gc.disable()
|
||||
for pattern in args[1:]:
|
||||
for fname in glob.glob(pattern):
|
||||
print("\n=== File: %s ===" % fname)
|
||||
if logfile != sys.stdout:
|
||||
logfile.setfileheading("\n=== File: %s ===\n" % fname)
|
||||
if gc_mode == 1:
|
||||
n_unreachable = gc.collect()
|
||||
if n_unreachable:
|
||||
print("GC before open:", n_unreachable, "unreachable objects")
|
||||
try:
|
||||
t0 = time.time()
|
||||
bk = xlrd.open_workbook(
|
||||
fname,
|
||||
verbosity=options.verbosity, logfile=logfile,
|
||||
use_mmap=mmap_arg,
|
||||
encoding_override=options.encoding,
|
||||
formatting_info=fmt_opt,
|
||||
on_demand=options.on_demand,
|
||||
ragged_rows=options.ragged_rows,
|
||||
)
|
||||
t1 = time.time()
|
||||
if not options.suppress_timing:
|
||||
print("Open took %.2f seconds" % (t1-t0,))
|
||||
except xlrd.XLRDError as e:
|
||||
print("*** Open failed: %s: %s" % (type(e).__name__, e))
|
||||
continue
|
||||
except KeyboardInterrupt:
|
||||
print("*** KeyboardInterrupt ***")
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
sys.exit(1)
|
||||
except BaseException as e:
|
||||
print("*** Open failed: %s: %s" % (type(e).__name__, e))
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
continue
|
||||
t0 = time.time()
|
||||
if cmd == 'hdr':
|
||||
bk_header(bk)
|
||||
elif cmd == 'ov': # OverView
|
||||
show(bk, 0)
|
||||
elif cmd == 'show': # all rows
|
||||
show(bk)
|
||||
elif cmd == '2rows': # first row and last row
|
||||
show(bk, 2)
|
||||
elif cmd == '3rows': # first row, 2nd row and last row
|
||||
show(bk, 3)
|
||||
elif cmd == 'bench':
|
||||
show(bk, printit=0)
|
||||
elif cmd == 'fonts':
|
||||
bk_header(bk)
|
||||
show_fonts(bk)
|
||||
elif cmd == 'names': # named reference list
|
||||
show_names(bk)
|
||||
elif cmd == 'name_dump': # named reference list
|
||||
show_names(bk, dump=1)
|
||||
elif cmd == 'labels':
|
||||
show_labels(bk)
|
||||
elif cmd == 'xfc':
|
||||
count_xfs(bk)
|
||||
else:
|
||||
print("*** Unknown command <%s>" % cmd)
|
||||
sys.exit(1)
|
||||
del bk
|
||||
if gc_mode == 1:
|
||||
n_unreachable = gc.collect()
|
||||
if n_unreachable:
|
||||
print("GC post cmd:", fname, "->", n_unreachable, "unreachable objects")
|
||||
if not options.suppress_timing:
|
||||
t1 = time.time()
|
||||
print("\ncommand took %.2f seconds\n" % (t1-t0,))
|
||||
|
||||
return None
|
||||
|
||||
av = sys.argv[1:]
|
||||
if not av:
|
||||
main(av)
|
||||
firstarg = av[0].lower()
|
||||
if firstarg == "hotshot":
|
||||
import hotshot
|
||||
import hotshot.stats
|
||||
av = av[1:]
|
||||
prof_log_name = "XXXX.prof"
|
||||
prof = hotshot.Profile(prof_log_name)
|
||||
# benchtime, result = prof.runcall(main, *av)
|
||||
result = prof.runcall(main, *(av, ))
|
||||
print("result", repr(result))
|
||||
prof.close()
|
||||
stats = hotshot.stats.load(prof_log_name)
|
||||
stats.strip_dirs()
|
||||
stats.sort_stats('time', 'calls')
|
||||
stats.print_stats(20)
|
||||
elif firstarg == "profile":
|
||||
import cProfile
|
||||
av = av[1:]
|
||||
cProfile.run('main(av)', 'YYYY.prof')
|
||||
import pstats
|
||||
p = pstats.Stats('YYYY.prof')
|
||||
p.strip_dirs().sort_stats('cumulative').print_stats(30)
|
||||
else:
|
||||
main(av)
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from tabulate import _main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(_main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from tqdm.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from uvicorn.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from watchfiles.cli import cli
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(cli())
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/Users/cjun/Code/github/stock-tracker/backend/.venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from websockets.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,164 @@
|
||||
/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */
|
||||
|
||||
/* Greenlet object interface */
|
||||
|
||||
#ifndef Py_GREENLETOBJECT_H
|
||||
#define Py_GREENLETOBJECT_H
|
||||
|
||||
|
||||
#include <Python.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* This is deprecated and undocumented. It does not change. */
|
||||
#define GREENLET_VERSION "1.0.0"
|
||||
|
||||
#ifndef GREENLET_MODULE
|
||||
#define implementation_ptr_t void*
|
||||
#endif
|
||||
|
||||
typedef struct _greenlet {
|
||||
PyObject_HEAD
|
||||
PyObject* weakreflist;
|
||||
PyObject* dict;
|
||||
implementation_ptr_t pimpl;
|
||||
} PyGreenlet;
|
||||
|
||||
#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type))
|
||||
|
||||
|
||||
/* C API functions */
|
||||
|
||||
/* Total number of symbols that are exported */
|
||||
#define PyGreenlet_API_pointers 12
|
||||
|
||||
#define PyGreenlet_Type_NUM 0
|
||||
#define PyExc_GreenletError_NUM 1
|
||||
#define PyExc_GreenletExit_NUM 2
|
||||
|
||||
#define PyGreenlet_New_NUM 3
|
||||
#define PyGreenlet_GetCurrent_NUM 4
|
||||
#define PyGreenlet_Throw_NUM 5
|
||||
#define PyGreenlet_Switch_NUM 6
|
||||
#define PyGreenlet_SetParent_NUM 7
|
||||
|
||||
#define PyGreenlet_MAIN_NUM 8
|
||||
#define PyGreenlet_STARTED_NUM 9
|
||||
#define PyGreenlet_ACTIVE_NUM 10
|
||||
#define PyGreenlet_GET_PARENT_NUM 11
|
||||
|
||||
#ifndef GREENLET_MODULE
|
||||
/* This section is used by modules that uses the greenlet C API */
|
||||
static void** _PyGreenlet_API = NULL;
|
||||
|
||||
# define PyGreenlet_Type \
|
||||
(*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM])
|
||||
|
||||
# define PyExc_GreenletError \
|
||||
((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM])
|
||||
|
||||
# define PyExc_GreenletExit \
|
||||
((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM])
|
||||
|
||||
/*
|
||||
* PyGreenlet_New(PyObject *args)
|
||||
*
|
||||
* greenlet.greenlet(run, parent=None)
|
||||
*/
|
||||
# define PyGreenlet_New \
|
||||
(*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \
|
||||
_PyGreenlet_API[PyGreenlet_New_NUM])
|
||||
|
||||
/*
|
||||
* PyGreenlet_GetCurrent(void)
|
||||
*
|
||||
* greenlet.getcurrent()
|
||||
*/
|
||||
# define PyGreenlet_GetCurrent \
|
||||
(*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM])
|
||||
|
||||
/*
|
||||
* PyGreenlet_Throw(
|
||||
* PyGreenlet *greenlet,
|
||||
* PyObject *typ,
|
||||
* PyObject *val,
|
||||
* PyObject *tb)
|
||||
*
|
||||
* g.throw(...)
|
||||
*/
|
||||
# define PyGreenlet_Throw \
|
||||
(*(PyObject * (*)(PyGreenlet * self, \
|
||||
PyObject * typ, \
|
||||
PyObject * val, \
|
||||
PyObject * tb)) \
|
||||
_PyGreenlet_API[PyGreenlet_Throw_NUM])
|
||||
|
||||
/*
|
||||
* PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args)
|
||||
*
|
||||
* g.switch(*args, **kwargs)
|
||||
*/
|
||||
# define PyGreenlet_Switch \
|
||||
(*(PyObject * \
|
||||
(*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \
|
||||
_PyGreenlet_API[PyGreenlet_Switch_NUM])
|
||||
|
||||
/*
|
||||
* PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent)
|
||||
*
|
||||
* g.parent = new_parent
|
||||
*/
|
||||
# define PyGreenlet_SetParent \
|
||||
(*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \
|
||||
_PyGreenlet_API[PyGreenlet_SetParent_NUM])
|
||||
|
||||
/*
|
||||
* PyGreenlet_GetParent(PyObject* greenlet)
|
||||
*
|
||||
* return greenlet.parent;
|
||||
*
|
||||
* This could return NULL even if there is no exception active.
|
||||
* If it does not return NULL, you are responsible for decrementing the
|
||||
* reference count.
|
||||
*/
|
||||
# define PyGreenlet_GetParent \
|
||||
(*(PyGreenlet* (*)(PyGreenlet*)) \
|
||||
_PyGreenlet_API[PyGreenlet_GET_PARENT_NUM])
|
||||
|
||||
/*
|
||||
* deprecated, undocumented alias.
|
||||
*/
|
||||
# define PyGreenlet_GET_PARENT PyGreenlet_GetParent
|
||||
|
||||
# define PyGreenlet_MAIN \
|
||||
(*(int (*)(PyGreenlet*)) \
|
||||
_PyGreenlet_API[PyGreenlet_MAIN_NUM])
|
||||
|
||||
# define PyGreenlet_STARTED \
|
||||
(*(int (*)(PyGreenlet*)) \
|
||||
_PyGreenlet_API[PyGreenlet_STARTED_NUM])
|
||||
|
||||
# define PyGreenlet_ACTIVE \
|
||||
(*(int (*)(PyGreenlet*)) \
|
||||
_PyGreenlet_API[PyGreenlet_ACTIVE_NUM])
|
||||
|
||||
|
||||
|
||||
|
||||
/* Macro that imports greenlet and initializes C API */
|
||||
/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we
|
||||
keep the older definition to be sure older code that might have a copy of
|
||||
the header still works. */
|
||||
# define PyGreenlet_Import() \
|
||||
{ \
|
||||
_PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \
|
||||
}
|
||||
|
||||
#endif /* GREENLET_MODULE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !Py_GREENLETOBJECT_H */
|
||||
Executable
BIN
Binary file not shown.
@@ -0,0 +1 @@
|
||||
pip
|
||||
@@ -0,0 +1,19 @@
|
||||
Copyright 2005-2024 SQLAlchemy authors and contributors <see AUTHORS file>.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,243 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: SQLAlchemy
|
||||
Version: 2.0.36
|
||||
Summary: Database Abstraction Library
|
||||
Home-page: https://www.sqlalchemy.org
|
||||
Author: Mike Bayer
|
||||
Author-email: mike_mp@zzzcomputing.com
|
||||
License: MIT
|
||||
Project-URL: Documentation, https://docs.sqlalchemy.org
|
||||
Project-URL: Issue Tracker, https://github.com/sqlalchemy/sqlalchemy/
|
||||
Classifier: Development Status :: 5 - Production/Stable
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Classifier: Programming Language :: Python :: 3.8
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Programming Language :: Python :: 3.12
|
||||
Classifier: Programming Language :: Python :: 3.13
|
||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
||||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
||||
Classifier: Topic :: Database :: Front-Ends
|
||||
Requires-Python: >=3.7
|
||||
Description-Content-Type: text/x-rst
|
||||
License-File: LICENSE
|
||||
Requires-Dist: typing-extensions >=4.6.0
|
||||
Requires-Dist: greenlet !=0.4.17 ; python_version < "3.13" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))
|
||||
Requires-Dist: importlib-metadata ; python_version < "3.8"
|
||||
Provides-Extra: aiomysql
|
||||
Requires-Dist: greenlet !=0.4.17 ; extra == 'aiomysql'
|
||||
Requires-Dist: aiomysql >=0.2.0 ; extra == 'aiomysql'
|
||||
Provides-Extra: aioodbc
|
||||
Requires-Dist: greenlet !=0.4.17 ; extra == 'aioodbc'
|
||||
Requires-Dist: aioodbc ; extra == 'aioodbc'
|
||||
Provides-Extra: aiosqlite
|
||||
Requires-Dist: greenlet !=0.4.17 ; extra == 'aiosqlite'
|
||||
Requires-Dist: aiosqlite ; extra == 'aiosqlite'
|
||||
Requires-Dist: typing-extensions !=3.10.0.1 ; extra == 'aiosqlite'
|
||||
Provides-Extra: asyncio
|
||||
Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncio'
|
||||
Provides-Extra: asyncmy
|
||||
Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncmy'
|
||||
Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy'
|
||||
Provides-Extra: mariadb_connector
|
||||
Requires-Dist: mariadb !=1.1.10,!=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector'
|
||||
Provides-Extra: mssql
|
||||
Requires-Dist: pyodbc ; extra == 'mssql'
|
||||
Provides-Extra: mssql_pymssql
|
||||
Requires-Dist: pymssql ; extra == 'mssql_pymssql'
|
||||
Provides-Extra: mssql_pyodbc
|
||||
Requires-Dist: pyodbc ; extra == 'mssql_pyodbc'
|
||||
Provides-Extra: mypy
|
||||
Requires-Dist: mypy >=0.910 ; extra == 'mypy'
|
||||
Provides-Extra: mysql
|
||||
Requires-Dist: mysqlclient >=1.4.0 ; extra == 'mysql'
|
||||
Provides-Extra: mysql_connector
|
||||
Requires-Dist: mysql-connector-python ; extra == 'mysql_connector'
|
||||
Provides-Extra: oracle
|
||||
Requires-Dist: cx-oracle >=8 ; extra == 'oracle'
|
||||
Provides-Extra: oracle_oracledb
|
||||
Requires-Dist: oracledb >=1.0.1 ; extra == 'oracle_oracledb'
|
||||
Provides-Extra: postgresql
|
||||
Requires-Dist: psycopg2 >=2.7 ; extra == 'postgresql'
|
||||
Provides-Extra: postgresql_asyncpg
|
||||
Requires-Dist: greenlet !=0.4.17 ; extra == 'postgresql_asyncpg'
|
||||
Requires-Dist: asyncpg ; extra == 'postgresql_asyncpg'
|
||||
Provides-Extra: postgresql_pg8000
|
||||
Requires-Dist: pg8000 >=1.29.1 ; extra == 'postgresql_pg8000'
|
||||
Provides-Extra: postgresql_psycopg
|
||||
Requires-Dist: psycopg >=3.0.7 ; extra == 'postgresql_psycopg'
|
||||
Provides-Extra: postgresql_psycopg2binary
|
||||
Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary'
|
||||
Provides-Extra: postgresql_psycopg2cffi
|
||||
Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi'
|
||||
Provides-Extra: postgresql_psycopgbinary
|
||||
Requires-Dist: psycopg[binary] >=3.0.7 ; extra == 'postgresql_psycopgbinary'
|
||||
Provides-Extra: pymysql
|
||||
Requires-Dist: pymysql ; extra == 'pymysql'
|
||||
Provides-Extra: sqlcipher
|
||||
Requires-Dist: sqlcipher3-binary ; extra == 'sqlcipher'
|
||||
|
||||
SQLAlchemy
|
||||
==========
|
||||
|
||||
|PyPI| |Python| |Downloads|
|
||||
|
||||
.. |PyPI| image:: https://img.shields.io/pypi/v/sqlalchemy
|
||||
:target: https://pypi.org/project/sqlalchemy
|
||||
:alt: PyPI
|
||||
|
||||
.. |Python| image:: https://img.shields.io/pypi/pyversions/sqlalchemy
|
||||
:target: https://pypi.org/project/sqlalchemy
|
||||
:alt: PyPI - Python Version
|
||||
|
||||
.. |Downloads| image:: https://static.pepy.tech/badge/sqlalchemy/month
|
||||
:target: https://pepy.tech/project/sqlalchemy
|
||||
:alt: PyPI - Downloads
|
||||
|
||||
|
||||
The Python SQL Toolkit and Object Relational Mapper
|
||||
|
||||
Introduction
|
||||
-------------
|
||||
|
||||
SQLAlchemy is the Python SQL toolkit and Object Relational Mapper
|
||||
that gives application developers the full power and
|
||||
flexibility of SQL. SQLAlchemy provides a full suite
|
||||
of well known enterprise-level persistence patterns,
|
||||
designed for efficient and high-performing database
|
||||
access, adapted into a simple and Pythonic domain
|
||||
language.
|
||||
|
||||
Major SQLAlchemy features include:
|
||||
|
||||
* An industrial strength ORM, built
|
||||
from the core on the identity map, unit of work,
|
||||
and data mapper patterns. These patterns
|
||||
allow transparent persistence of objects
|
||||
using a declarative configuration system.
|
||||
Domain models
|
||||
can be constructed and manipulated naturally,
|
||||
and changes are synchronized with the
|
||||
current transaction automatically.
|
||||
* A relationally-oriented query system, exposing
|
||||
the full range of SQL's capabilities
|
||||
explicitly, including joins, subqueries,
|
||||
correlation, and most everything else,
|
||||
in terms of the object model.
|
||||
Writing queries with the ORM uses the same
|
||||
techniques of relational composition you use
|
||||
when writing SQL. While you can drop into
|
||||
literal SQL at any time, it's virtually never
|
||||
needed.
|
||||
* A comprehensive and flexible system
|
||||
of eager loading for related collections and objects.
|
||||
Collections are cached within a session,
|
||||
and can be loaded on individual access, all
|
||||
at once using joins, or by query per collection
|
||||
across the full result set.
|
||||
* A Core SQL construction system and DBAPI
|
||||
interaction layer. The SQLAlchemy Core is
|
||||
separate from the ORM and is a full database
|
||||
abstraction layer in its own right, and includes
|
||||
an extensible Python-based SQL expression
|
||||
language, schema metadata, connection pooling,
|
||||
type coercion, and custom types.
|
||||
* All primary and foreign key constraints are
|
||||
assumed to be composite and natural. Surrogate
|
||||
integer primary keys are of course still the
|
||||
norm, but SQLAlchemy never assumes or hardcodes
|
||||
to this model.
|
||||
* Database introspection and generation. Database
|
||||
schemas can be "reflected" in one step into
|
||||
Python structures representing database metadata;
|
||||
those same structures can then generate
|
||||
CREATE statements right back out - all within
|
||||
the Core, independent of the ORM.
|
||||
|
||||
SQLAlchemy's philosophy:
|
||||
|
||||
* SQL databases behave less and less like object
|
||||
collections the more size and performance start to
|
||||
matter; object collections behave less and less like
|
||||
tables and rows the more abstraction starts to matter.
|
||||
SQLAlchemy aims to accommodate both of these
|
||||
principles.
|
||||
* An ORM doesn't need to hide the "R". A relational
|
||||
database provides rich, set-based functionality
|
||||
that should be fully exposed. SQLAlchemy's
|
||||
ORM provides an open-ended set of patterns
|
||||
that allow a developer to construct a custom
|
||||
mediation layer between a domain model and
|
||||
a relational schema, turning the so-called
|
||||
"object relational impedance" issue into
|
||||
a distant memory.
|
||||
* The developer, in all cases, makes all decisions
|
||||
regarding the design, structure, and naming conventions
|
||||
of both the object model as well as the relational
|
||||
schema. SQLAlchemy only provides the means
|
||||
to automate the execution of these decisions.
|
||||
* With SQLAlchemy, there's no such thing as
|
||||
"the ORM generated a bad query" - you
|
||||
retain full control over the structure of
|
||||
queries, including how joins are organized,
|
||||
how subqueries and correlation is used, what
|
||||
columns are requested. Everything SQLAlchemy
|
||||
does is ultimately the result of a developer-initiated
|
||||
decision.
|
||||
* Don't use an ORM if the problem doesn't need one.
|
||||
SQLAlchemy consists of a Core and separate ORM
|
||||
component. The Core offers a full SQL expression
|
||||
language that allows Pythonic construction
|
||||
of SQL constructs that render directly to SQL
|
||||
strings for a target database, returning
|
||||
result sets that are essentially enhanced DBAPI
|
||||
cursors.
|
||||
* Transactions should be the norm. With SQLAlchemy's
|
||||
ORM, nothing goes to permanent storage until
|
||||
commit() is called. SQLAlchemy encourages applications
|
||||
to create a consistent means of delineating
|
||||
the start and end of a series of operations.
|
||||
* Never render a literal value in a SQL statement.
|
||||
Bound parameters are used to the greatest degree
|
||||
possible, allowing query optimizers to cache
|
||||
query plans effectively and making SQL injection
|
||||
attacks a non-issue.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
Latest documentation is at:
|
||||
|
||||
https://www.sqlalchemy.org/docs/
|
||||
|
||||
Installation / Requirements
|
||||
---------------------------
|
||||
|
||||
Full documentation for installation is at
|
||||
`Installation <https://www.sqlalchemy.org/docs/intro.html#installation>`_.
|
||||
|
||||
Getting Help / Development / Bug reporting
|
||||
------------------------------------------
|
||||
|
||||
Please refer to the `SQLAlchemy Community Guide <https://www.sqlalchemy.org/support.html>`_.
|
||||
|
||||
Code of Conduct
|
||||
---------------
|
||||
|
||||
Above all, SQLAlchemy places great emphasis on polite, thoughtful, and
|
||||
constructive communication between users and developers.
|
||||
Please see our current Code of Conduct at
|
||||
`Code of Conduct <https://www.sqlalchemy.org/codeofconduct.html>`_.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
SQLAlchemy is distributed under the `MIT license
|
||||
<https://www.opensource.org/licenses/mit-license.php>`_.
|
||||
|
||||
@@ -0,0 +1,530 @@
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/connectors/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/connectors/aioodbc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/connectors/asyncio.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/connectors/pyodbc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/cyextension/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/_typing.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/aioodbc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/information_schema.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/json.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/provision.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/pymssql.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/pyodbc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/aiomysql.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/asyncmy.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/cymysql.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/dml.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/enumerated.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/expression.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/json.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mariadb.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mysqlconnector.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mysqldb.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/provision.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/pymysql.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/pyodbc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/reflection.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/reserved_words.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/cx_oracle.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/dictionary.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/oracledb.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/provision.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/oracle/types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/_psycopg_common.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/array.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/asyncpg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/dml.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/ext.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/hstore.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/json.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/named_types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/operators.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/pg8000.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/pg_catalog.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/provision.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/psycopg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/psycopg2.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/psycopg2cffi.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/ranges.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/dml.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/json.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/provision.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/pysqlcipher.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/pysqlite.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/_py_processors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/_py_row.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/_py_util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/characteristics.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/create.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/cursor.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/default.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/events.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/interfaces.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/mock.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/processors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/reflection.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/result.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/row.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/strategies.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/url.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/engine/util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/event/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/event/api.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/event/attr.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/event/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/event/legacy.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/event/registry.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/events.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/exc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/associationproxy.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/engine.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/exc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/result.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/scoping.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/asyncio/session.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/automap.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/baked.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/compiler.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/declarative/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/declarative/extensions.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/horizontal_shard.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/hybrid.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/indexable.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/instrumentation.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mutable.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/apply.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/decl_class.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/infer.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/names.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/plugin.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/orderinglist.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/ext/serializer.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/future/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/future/engine.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/inspection.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/log.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/_orm_constructors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/_typing.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/attributes.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/bulk_persistence.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/clsregistry.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/collections.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/context.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/decl_api.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/decl_base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/dependency.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/descriptor_props.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/dynamic.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/evaluator.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/events.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/exc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/identity.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/instrumentation.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/interfaces.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/loading.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/mapped_collection.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/mapper.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/path_registry.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/persistence.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/properties.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/query.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/relationships.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/scoping.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/state.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/state_changes.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/strategies.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/strategy_options.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/sync.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/orm/writeonly.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/pool/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/pool/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/pool/events.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/pool/impl.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/schema.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/_dml_constructors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/_elements_constructors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/_orm_types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/_py_util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/_selectable_constructors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/_typing.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/annotation.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/cache_key.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/coercions.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/compiler.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/crud.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/ddl.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/default_comparator.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/dml.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/elements.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/events.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/expression.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/functions.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/lambdas.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/naming.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/operators.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/roles.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/schema.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/selectable.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/sqltypes.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/traversals.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/type_api.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/sql/visitors.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/assertions.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/assertsql.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/asyncio.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/config.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/engines.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/entities.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/exclusions.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/fixtures/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/fixtures/base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/fixtures/mypy.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/fixtures/orm.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/fixtures/sql.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/pickleable.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/plugin/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/plugin/bootstrap.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/plugin/plugin_base.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/plugin/pytestplugin.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/profiling.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/provision.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/requirements.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/schema.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_cte.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_ddl.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_deprecations.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_dialect.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_insert.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_reflection.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_results.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_rowcount.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_select.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_sequence.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_unicode_ddl.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/suite/test_update_delete.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/util.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/testing/warnings.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/types.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/_collections.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/_concurrency_py3k.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/_has_cy.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/_py_collections.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/compat.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/concurrency.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/deprecations.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/preloaded.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/queue.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/tool_support.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/topological.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/sqlalchemy/util/typing.cpython-39.pyc,,
|
||||
SQLAlchemy-2.0.36.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
SQLAlchemy-2.0.36.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
|
||||
SQLAlchemy-2.0.36.dist-info/METADATA,sha256=EZH514FydYtyOhgoZk_OF1ZQEtI4eTAEddlnUlRjzac,9692
|
||||
SQLAlchemy-2.0.36.dist-info/RECORD,,
|
||||
SQLAlchemy-2.0.36.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
SQLAlchemy-2.0.36.dist-info/WHEEL,sha256=Oowyzh4gLJI0nJ4SOyThybgiPwAg4AzJ0OGG544_tlQ,108
|
||||
SQLAlchemy-2.0.36.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
|
||||
sqlalchemy/__init__.py,sha256=J2PsdiJiNW93Etxk6YN8o_C3TcpR1_DckU71r4LBcGE,13033
|
||||
sqlalchemy/connectors/__init__.py,sha256=PzXPqZqi3BzEnrs1eW0DcsR4lyknAzhhN9rWcQ97hb4,476
|
||||
sqlalchemy/connectors/aioodbc.py,sha256=GSTiNMO9h0qjPxgqaxDwWZ8HvhWMFNVR6MJQnN1oc40,5288
|
||||
sqlalchemy/connectors/asyncio.py,sha256=Hq2bkXmG6-KO_RfCrwMqx4oGH-uH1Z1WWKqPWNjz8p4,6138
|
||||
sqlalchemy/connectors/pyodbc.py,sha256=t7AjyxIOnaWg3CrlUEpBs4Y5l0HFdNt3P_cSSKhbi0Y,8501
|
||||
sqlalchemy/cyextension/__init__.py,sha256=GzhhN8cjMnDTE0qerlUlpbrNmFPHQWCZ4Gk74OAxl04,244
|
||||
sqlalchemy/cyextension/collections.cpython-39-darwin.so,sha256=XbMYw6iErLnYJx2FzElMiW0AZThhllaLtE-rd44qsbw,241424
|
||||
sqlalchemy/cyextension/collections.pyx,sha256=L7DZ3DGKpgw2MT2ZZRRxCnrcyE5pU1NAFowWgAzQPEc,12571
|
||||
sqlalchemy/cyextension/immutabledict.cpython-39-darwin.so,sha256=SMPz0PFSFgmzQPxn4IqUgAAXfNaD32RyDYUQHHlUkvs,110680
|
||||
sqlalchemy/cyextension/immutabledict.pxd,sha256=3x3-rXG5eRQ7bBnktZ-OJ9-6ft8zToPmTDOd92iXpB0,291
|
||||
sqlalchemy/cyextension/immutabledict.pyx,sha256=KfDTYbTfebstE8xuqAtuXsHNAK0_b5q_ymUiinUe_xs,3535
|
||||
sqlalchemy/cyextension/processors.cpython-39-darwin.so,sha256=HpzMNa0FnqBURSoEKScnFsEQmBtCTUNc6AvoaG1D9k4,87960
|
||||
sqlalchemy/cyextension/processors.pyx,sha256=R1rHsGLEaGeBq5VeCydjClzYlivERIJ9B-XLOJlf2MQ,1792
|
||||
sqlalchemy/cyextension/resultproxy.cpython-39-darwin.so,sha256=nXMewPiyarm0fTvYcR8ndIl2T9SsYks2QriAGfu3zyU,90056
|
||||
sqlalchemy/cyextension/resultproxy.pyx,sha256=eWLdyBXiBy_CLQrF5ScfWJm7X0NeelscSXedtj1zv9Q,2725
|
||||
sqlalchemy/cyextension/util.cpython-39-darwin.so,sha256=Pbx4oeFrv88-c839LqS2PUTtXtKzRoKNUMqBia527g8,109080
|
||||
sqlalchemy/cyextension/util.pyx,sha256=B85orxa9LddLuQEaDoVSq1XmAXIbLKxrxpvuB8ogV_o,2530
|
||||
sqlalchemy/dialects/__init__.py,sha256=Kos9Gf5JZg1Vg6GWaCqEbD6e0r1jCwCmcnJIfcxDdcY,1770
|
||||
sqlalchemy/dialects/_typing.py,sha256=hyv0nKucX2gI8ispB1IsvaUgrEPn9zEcq9hS7kfstEw,888
|
||||
sqlalchemy/dialects/mssql/__init__.py,sha256=r5t8wFRNtBQoiUWh0WfIEWzXZW6f3D0uDt6NZTW_7Cc,1880
|
||||
sqlalchemy/dialects/mssql/aioodbc.py,sha256=UQd9ecSMIML713TDnLAviuBVJle7P7i1FtqGZZePk2Y,2022
|
||||
sqlalchemy/dialects/mssql/base.py,sha256=msl_N_a_z8ali7Nthx55AGoV7b5wakCWvWu560BvH9o,132423
|
||||
sqlalchemy/dialects/mssql/information_schema.py,sha256=HswjDc6y0mPXCf_x6VyylHlBdBa4PSY6Evxmmlch700,8084
|
||||
sqlalchemy/dialects/mssql/json.py,sha256=evUACW2O62TAPq8B7QIPagz7jfc664ql9ms68JqiYzg,4816
|
||||
sqlalchemy/dialects/mssql/provision.py,sha256=ZAtt6Div9NLIngMs8kyloxfphw0KDNMsnRCAVd7-esE,5593
|
||||
sqlalchemy/dialects/mssql/pymssql.py,sha256=LAv43q4vBCB85OsAwHQItaQUYTYIO0QJ-jvzaBrswmY,4097
|
||||
sqlalchemy/dialects/mssql/pyodbc.py,sha256=vwM-vBlmRwrqxOc73P0sFOrBSwn24wzc5IkEOpalbXQ,27056
|
||||
sqlalchemy/dialects/mysql/__init__.py,sha256=bxbi4hkysUK2OOVvr1F49akUj1cky27kKb07tgFzI9U,2153
|
||||
sqlalchemy/dialects/mysql/aiomysql.py,sha256=-oMZnCqNsSki8mlQRTWIwiQPT1OVdZIuANkb90q8LAs,9999
|
||||
sqlalchemy/dialects/mysql/asyncmy.py,sha256=YpuuOh8VknEeqHqUXQGfQ3jhfO3Xb-vZv78Jq5cscJ0,10067
|
||||
sqlalchemy/dialects/mysql/base.py,sha256=giGlZNGrKsNMoSkbzY0PGgfamKjA9rOkSq1o5vKvno4,122755
|
||||
sqlalchemy/dialects/mysql/cymysql.py,sha256=eXT1ry0w_qRxjiO24M980c-8PZ9qSsbhqBHntjEiKB0,2300
|
||||
sqlalchemy/dialects/mysql/dml.py,sha256=HXJMAvimJsqvhj3UZO4vW_6LkF5RqaKbHvklAjor7yU,7645
|
||||
sqlalchemy/dialects/mysql/enumerated.py,sha256=ipEPPQqoXfFwcywNdcLlZCEzHBtnitHRah1Gn6nItcg,8448
|
||||
sqlalchemy/dialects/mysql/expression.py,sha256=lsmQCHKwfPezUnt27d2kR6ohk4IRFCA64KBS16kx5dc,4097
|
||||
sqlalchemy/dialects/mysql/json.py,sha256=l6MEZ0qp8FgiRrIQvOMhyEJq0q6OqiEnvDTx5Cbt9uQ,2269
|
||||
sqlalchemy/dialects/mysql/mariadb.py,sha256=kTfBLioLKk4JFFst4TY_iWqPtnvvQXFHknLfm89H2N8,853
|
||||
sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=_S1aV93kyP52Nvj7HR9weThML4oUvSLsLqiVFdoLR2o,8623
|
||||
sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=oq3mtsNOMldUjs32JbJG2u3Hy3DObyVzUUMYfOkwkHg,5729
|
||||
sqlalchemy/dialects/mysql/mysqldb.py,sha256=qUBbA6STeYGozutyTxHCo5p1W3p59QFFS2FwCgPrjBA,9503
|
||||
sqlalchemy/dialects/mysql/provision.py,sha256=Jnk8UO9_Apd2odR2IQFLrscCfAmYxuBKcB8giS3bBog,3575
|
||||
sqlalchemy/dialects/mysql/pymysql.py,sha256=GUnSHd2M2uKjmN46Hheymtm26g7phEgwYOXrX0zLY8M,4083
|
||||
sqlalchemy/dialects/mysql/pyodbc.py,sha256=072crI4qVyPhajYvHnsfFeSrNjLFVPIjBQKo5uyz5yk,4297
|
||||
sqlalchemy/dialects/mysql/reflection.py,sha256=3u34YwT1JJh3uThGZJZ3FKdnUcT7v08QB-tAl1r7VRk,22834
|
||||
sqlalchemy/dialects/mysql/reserved_words.py,sha256=ucKX2p2c3UnMq2ayZuOHuf73eXhu7SKsOsTlIN1Q83I,9258
|
||||
sqlalchemy/dialects/mysql/types.py,sha256=L5cTCsMT1pTedszNEM3jSxFNZEMcHQLprYCZ0vmfsnA,24343
|
||||
sqlalchemy/dialects/oracle/__init__.py,sha256=p4-2gw7TT0bX_MoJXTGD4i8WHctYsK9kCRbkpzykBrc,1493
|
||||
sqlalchemy/dialects/oracle/base.py,sha256=zLMZedrr6j1LvJz4qYnoSjikI5RZY92YFeQHiZ_YvW0,119676
|
||||
sqlalchemy/dialects/oracle/cx_oracle.py,sha256=q8Nyj15UZCE2TWOmxuWp5ZsxiCiGMzqfd_9UkmjIja0,55235
|
||||
sqlalchemy/dialects/oracle/dictionary.py,sha256=7WMrbPkqo8ZdGjaEZyQr-5f2pajSOF1OTGb8P97z8-g,19519
|
||||
sqlalchemy/dialects/oracle/oracledb.py,sha256=fZRKGqNIwW9LG4i8yDOXABrucbfzn_yC86Od-BJ3PcM,13619
|
||||
sqlalchemy/dialects/oracle/provision.py,sha256=O9ZpF4OG6Cx4mMzLRfZwhs8dZjrJETWR402n9c7726A,8304
|
||||
sqlalchemy/dialects/oracle/types.py,sha256=QK3hJvWzKnnCe3oD3rItwEEIwcoBze8qGg7VFOvVlIk,8231
|
||||
sqlalchemy/dialects/postgresql/__init__.py,sha256=wwnNAq4wDQzrlPRzDNB06ayuq3L2HNO99nzeEvq-YcU,3892
|
||||
sqlalchemy/dialects/postgresql/_psycopg_common.py,sha256=7TudtgsPiSB8O5kX8W8KxcNYR8t5h_UHb86b_ChL0P8,5696
|
||||
sqlalchemy/dialects/postgresql/array.py,sha256=bWcame7ntmI_Kx6gmBX0-chwADFdLHeCvaDQ4iX8id8,13734
|
||||
sqlalchemy/dialects/postgresql/asyncpg.py,sha256=9P0Itn9eeSBu67kGSsHuzx8xd4YYwRKdiZ5m7bF5onU,41074
|
||||
sqlalchemy/dialects/postgresql/base.py,sha256=dGPsaV3Esw6-AwE3QcgHF0Fray3Yw5-gLLgCvgdxvS0,179083
|
||||
sqlalchemy/dialects/postgresql/dml.py,sha256=Pc69Le6qzmUHHb1FT5zeUSD31dWm6SBgdCAGW89cs3s,11212
|
||||
sqlalchemy/dialects/postgresql/ext.py,sha256=1bZ--iNh2O9ym7l2gXZX48yP3yMO4dqb9RpYro2Mj2Q,16262
|
||||
sqlalchemy/dialects/postgresql/hstore.py,sha256=otAx-RTDfpi_tcXkMuQV0JOIXtYgevgnsikLKKOkI6U,11541
|
||||
sqlalchemy/dialects/postgresql/json.py,sha256=53rQWon9cUXd1yCjIvUpJjWwNyRSy3U7Kz0HV70ftrc,11618
|
||||
sqlalchemy/dialects/postgresql/named_types.py,sha256=3IV1ufo7zJjKmX4VtGDEnoXE6xEqLJAtGG82IiqHXwY,17594
|
||||
sqlalchemy/dialects/postgresql/operators.py,sha256=NsAaWun_tL3d_be0fs9YL6T4LPKK6crnmFxxIJHgyeY,2808
|
||||
sqlalchemy/dialects/postgresql/pg8000.py,sha256=3yoekiWSF-xnaWMqG76XrYPMqerg-42TdmfsW_ivK9E,18640
|
||||
sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=hY3NXEUHxTWD4umhd2aowNu3laC-61Q_qQ_pReyXTUM,9254
|
||||
sqlalchemy/dialects/postgresql/provision.py,sha256=t6TZj0XaWG9zrpCjNr0oJRjAC_WQzaNdp3kaKJIbS8I,5770
|
||||
sqlalchemy/dialects/postgresql/psycopg.py,sha256=Uwf45f9fInOtaExiEdwiP9xzRo7hw0XyZTkRtgdom44,23168
|
||||
sqlalchemy/dialects/postgresql/psycopg2.py,sha256=kwEnflz5bAqJcuO_20eYiCtha_a4m_tg5_lppdDnaeU,31998
|
||||
sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=M7wAYSL6Pvt-4nbfacAHGyyw4XMKJ_bQZ1tc1pBtIdg,1756
|
||||
sqlalchemy/dialects/postgresql/ranges.py,sha256=6CgV7qkxEMJ9AQsiibo_XBLJYzGh-2ZxpG83sRaesVY,32949
|
||||
sqlalchemy/dialects/postgresql/types.py,sha256=Jfxqw9JaKNOq29JRWBublywgb3lLMyzx8YZI7CXpS2s,7300
|
||||
sqlalchemy/dialects/sqlite/__init__.py,sha256=lp9DIggNn349M-7IYhUA8et8--e8FRExWD2V_r1LJk4,1182
|
||||
sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=g3qGV6jmiXabWyb3282g_Nmxtj1jThxGSe9C9yalb-U,12345
|
||||
sqlalchemy/dialects/sqlite/base.py,sha256=LcnW6hzxqTtPlDBOInHumvuDt8a31THA5Jnm4vFvdFI,97811
|
||||
sqlalchemy/dialects/sqlite/dml.py,sha256=9GE55WvwoktKy2fHeT-Wbc9xPHgsbh5oBfd_fckMH5Q,8443
|
||||
sqlalchemy/dialects/sqlite/json.py,sha256=Eoplbb_4dYlfrtmQaI8Xddd2suAIHA-IdbDQYM-LIhs,2777
|
||||
sqlalchemy/dialects/sqlite/provision.py,sha256=UCpmwxf4IWlrpb2eLHGbPTpCFVbdI_KAh2mKtjiLYao,5632
|
||||
sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=OL2S_05DK9kllZj6DOz7QtEl7jI7syxjW6woS725ii4,5356
|
||||
sqlalchemy/dialects/sqlite/pysqlite.py,sha256=aDp47n0J509kl2hDchoaBKXEQVZtkux54DwfKytUAe4,28068
|
||||
sqlalchemy/dialects/type_migration_guidelines.txt,sha256=-uHNdmYFGB7bzUNT6i8M5nb4j6j9YUKAtW4lcBZqsMg,8239
|
||||
sqlalchemy/engine/__init__.py,sha256=Stb2oV6l8w65JvqEo6J4qtKoApcmOpXy3AAxQud4C1o,2818
|
||||
sqlalchemy/engine/_py_processors.py,sha256=j9i_lcYYQOYJMcsDerPxI0sVFBIlX5sqoYMdMJlgWPI,3744
|
||||
sqlalchemy/engine/_py_row.py,sha256=wSqoUFzLOJ1f89kgDb6sJm9LUrF5LMFpXPcK1vUsKcs,3787
|
||||
sqlalchemy/engine/_py_util.py,sha256=f2DI3AN1kv6EplelowesCVpwS8hSXNufRkZoQmJtSH8,2484
|
||||
sqlalchemy/engine/base.py,sha256=frWSMmt3dlentYH4QNN3cijdGzp8NbunColUZwWsWgI,122958
|
||||
sqlalchemy/engine/characteristics.py,sha256=N3kbvw_ApMh86wb5yAGnxtPYD4YRhYMWion1H_aVZBI,4765
|
||||
sqlalchemy/engine/create.py,sha256=mYJtOG2ZKM8sgyfjpGpamW15RDU7JXi5s6iibbJHMIs,33206
|
||||
sqlalchemy/engine/cursor.py,sha256=cFq61yrw76k-QR_xNUBWuL-Zeyb14ltG-6jo2Q2iuuw,76392
|
||||
sqlalchemy/engine/default.py,sha256=2wwKKdsagb3QTajRSEw8Hl-EnQ-LmRxy822xOGyenHc,84648
|
||||
sqlalchemy/engine/events.py,sha256=c0unNFFiHzTAvkUtXoJaxzMFMDwurBkHiiUhuN8qluc,37381
|
||||
sqlalchemy/engine/interfaces.py,sha256=fcVHOmnMo7JZLHzgSKoK3QsdVHH7kJ_AmrDvwW9Ka3k,112936
|
||||
sqlalchemy/engine/mock.py,sha256=yvpxgFmRw5G4QsHeF-ZwQGHKES-HqQOucTxFtN1uzdk,4179
|
||||
sqlalchemy/engine/processors.py,sha256=XyfINKbo-2fjN-mW55YybvFyQMOil50_kVqsunahkNs,2379
|
||||
sqlalchemy/engine/reflection.py,sha256=gwGs8y7x6py5z-ZWx3hQqQrwpHepMCTJyQcFwWJjPlw,75364
|
||||
sqlalchemy/engine/result.py,sha256=NZEskTMAcDzK-vjE96Fw8VvBL58s5Y6rt9vXcmZdM4w,77651
|
||||
sqlalchemy/engine/row.py,sha256=9AAQo9zYDL88GcZ3bjcQTwMT-YIcuGTSMAyTfmBJ_yM,12032
|
||||
sqlalchemy/engine/strategies.py,sha256=DqFSWaXJPL-29Omot9O0aOcuGL8KmCGyOvnPGDkAJoE,442
|
||||
sqlalchemy/engine/url.py,sha256=8eWkUaIUyDExOcJ2D4xJXRcn4OY1GQJ3Q2duSX6UGAg,30784
|
||||
sqlalchemy/engine/util.py,sha256=bNirO8k1S8yOW61uNH-a9QrWtAJ9VGFgbiR0lk1lUQU,5682
|
||||
sqlalchemy/event/__init__.py,sha256=KBrp622xojnC3FFquxa2JsMamwAbfkvzfv6Op0NKiYc,997
|
||||
sqlalchemy/event/api.py,sha256=DtDVgjKSorOfp9MGJ7fgMWrj4seC_hkwF4D8CW1RFZU,8226
|
||||
sqlalchemy/event/attr.py,sha256=X8QeHGK4ioSYht1vkhc11f606_mq_t91jMNIT314ubs,20751
|
||||
sqlalchemy/event/base.py,sha256=270OShTD17-bSFUFnPtKdVnB0NFJZ2AouYPo1wT0aJw,15127
|
||||
sqlalchemy/event/legacy.py,sha256=teMPs00fO-4g8a_z2omcVKkYce5wj_1uvJO2n2MIeuo,8227
|
||||
sqlalchemy/event/registry.py,sha256=nfTSSyhjZZXc5wseWB4sXn-YibSc0LKX8mg17XlWmAo,10835
|
||||
sqlalchemy/events.py,sha256=k-ZD38aSPD29LYhED7CBqttp5MDVVx_YSaWC2-cu9ec,525
|
||||
sqlalchemy/exc.py,sha256=M_8-O1hd8i6gbyx-TapV400p_Lxq2QqTGMXUAO-YgCc,23976
|
||||
sqlalchemy/ext/__init__.py,sha256=S1fGKAbycnQDV01gs-JWGaFQ9GCD4QHwKcU2wnugg_o,322
|
||||
sqlalchemy/ext/associationproxy.py,sha256=ZGc_ssGf7FC6eKrja1iTvnWEKLkFZQA8CiVAjR8iVRw,66062
|
||||
sqlalchemy/ext/asyncio/__init__.py,sha256=1OqSxEyIUn7RWLGyO12F-jAUIvk1I6DXlVy80-Gvkds,1317
|
||||
sqlalchemy/ext/asyncio/base.py,sha256=fl7wxZD9KjgFiCtG3WXrYjHEvanamcsodCqq9pH9lOk,8905
|
||||
sqlalchemy/ext/asyncio/engine.py,sha256=S_IRWX4QAjj2veLSu4Y3gKBIXkKQt7_2StJAK2_KUDY,48190
|
||||
sqlalchemy/ext/asyncio/exc.py,sha256=8sII7VMXzs2TrhizhFQMzSfcroRtiesq8o3UwLfXSgQ,639
|
||||
sqlalchemy/ext/asyncio/result.py,sha256=3rbVIY_wySi50JwaK3Kf2qa3c5Fc8W84FtUpt-9i9Vk,30477
|
||||
sqlalchemy/ext/asyncio/scoping.py,sha256=UxHAFxtWKqA7TEozyN2h7MJyzSspTCrS-1SlgQLTExo,52608
|
||||
sqlalchemy/ext/asyncio/session.py,sha256=QpXnqspwYnT28znD1EdpUIaVjQOO1BirtS0BJeBxeZk,63087
|
||||
sqlalchemy/ext/automap.py,sha256=r0mUSyogNyqdBL4m9AA1NXbLiTLQmtvyQymsssNEipo,61581
|
||||
sqlalchemy/ext/baked.py,sha256=H6T1il7GY84BhzPFj49UECSpZh_eBuiHomA-QIsYOYQ,17807
|
||||
sqlalchemy/ext/compiler.py,sha256=6X6sZCAo9v-PQfLbwBSYQUK0-XH2xTE5Jm0Zg6Ka6eM,20877
|
||||
sqlalchemy/ext/declarative/__init__.py,sha256=20psLdFQbbOWfpdXHZ0CTY6I1k4UqXvKemNVu1LvPOI,1818
|
||||
sqlalchemy/ext/declarative/extensions.py,sha256=uCjN1GisQt54AjqYnKYzJdUjnGd2pZBW47WWdPlS7FE,19547
|
||||
sqlalchemy/ext/horizontal_shard.py,sha256=wuwAPnHymln0unSBnyx-cpX0AfESKSsypaSQTYCvzDk,16750
|
||||
sqlalchemy/ext/hybrid.py,sha256=IYkCaPZ29gm2cPKPg0cWMkLCEqMykD8-JJTvgacGbmc,52458
|
||||
sqlalchemy/ext/indexable.py,sha256=UkTelbydKCdKelzbv3HWFFavoET9WocKaGRPGEOVfN8,11032
|
||||
sqlalchemy/ext/instrumentation.py,sha256=sg8ghDjdHSODFXh_jAmpgemnNX1rxCeeXEG3-PMdrNk,15707
|
||||
sqlalchemy/ext/mutable.py,sha256=L5ZkHBGYhMaqO75Xtyrk2DBR44RDk0g6Rz2HzHH0F8Q,37355
|
||||
sqlalchemy/ext/mypy/__init__.py,sha256=0WebDIZmqBD0OTq5JLtd_PmfF9JGxe4d4Qv3Ml3PKUg,241
|
||||
sqlalchemy/ext/mypy/apply.py,sha256=Aek_-XA1eXihT4attxhfE43yBKtCgsxBSb--qgZKUqc,10550
|
||||
sqlalchemy/ext/mypy/decl_class.py,sha256=1vVJRII2apnLTUbc5HkJS6Z2GueaUv_eKvhbqh7Wik4,17384
|
||||
sqlalchemy/ext/mypy/infer.py,sha256=KVnmLFEVS33Al8pUKI7MJbJQu3KeveBUMl78EluBORw,19369
|
||||
sqlalchemy/ext/mypy/names.py,sha256=Q3ef8XQBgVm9WUwlItqlYCXDNi_kbV5DdLEgbtEMEI8,10479
|
||||
sqlalchemy/ext/mypy/plugin.py,sha256=74ML8LI9xar0V86oCxnPFv5FQGEEfUzK64vOay4BKFs,9750
|
||||
sqlalchemy/ext/mypy/util.py,sha256=DKRaurkXHI2lAMAAcEO5GLXbX_m2Xqy7l_juh8Byf5U,9960
|
||||
sqlalchemy/ext/orderinglist.py,sha256=TGYbsGH72wEZcFNQDYDsZg9OSPuzf__P8YX8_2HtYUo,14384
|
||||
sqlalchemy/ext/serializer.py,sha256=D0g4jMZkRk0Gjr0L-FZe81SR63h0Zs-9JzuWtT_SD7k,6140
|
||||
sqlalchemy/future/__init__.py,sha256=q2mw-gxk_xoxJLEvRoyMha3vO1xSRHrslcExOHZwmPA,512
|
||||
sqlalchemy/future/engine.py,sha256=AgIw6vMsef8W6tynOTkxsjd6o_OQDwGjLdbpoMD8ue8,495
|
||||
sqlalchemy/inspection.py,sha256=MF-LE358wZDUEl1IH8-Uwt2HI65EsQpQW5o5udHkZwA,5063
|
||||
sqlalchemy/log.py,sha256=8x9UR3nj0uFm6or6bQF-JWb4fYv2zOeQjG_w-0wOJFA,8607
|
||||
sqlalchemy/orm/__init__.py,sha256=ZYys5nL3RFUDCMOLFDBrRI52F6er3S1U1OY9TeORuKs,8463
|
||||
sqlalchemy/orm/_orm_constructors.py,sha256=8EQfYsDL2k_ev0eK-wxMl3algouczN38Gu43CrRlAlo,103434
|
||||
sqlalchemy/orm/_typing.py,sha256=DVBfpHmDVK4x1zxaGJPY2GoTrAsyR6uexv20Lzf1afc,4973
|
||||
sqlalchemy/orm/attributes.py,sha256=lorOHBJvJJYndOuafWJhHBbQ1pR6FAyimhqz-mErBRQ,92534
|
||||
sqlalchemy/orm/base.py,sha256=FXkYTSCDUJFQSB5pcyPt2wG-dRctf5P6ySjyjVxQsX0,27502
|
||||
sqlalchemy/orm/bulk_persistence.py,sha256=1FC23bRJKjpfbp2D5hYuV1qOVIKGSswu9XPXbbSJ5Mo,72663
|
||||
sqlalchemy/orm/clsregistry.py,sha256=IjoDZwWpjG42ji59L4M1EZvjBEoXPZykzENDtKWxU8A,17974
|
||||
sqlalchemy/orm/collections.py,sha256=WEKuUCRgLhDhJEIBhZ21UrE0pBOyRm2zxD20GvbgA9g,52243
|
||||
sqlalchemy/orm/context.py,sha256=FMPyw07OA9OXWQ32RQx52AEa2xTLSkqdYgx9R_yN1x0,112955
|
||||
sqlalchemy/orm/decl_api.py,sha256=_WPKQ_vSE5k2TLtNmkaxxYmvbhZvkRMrrvCeDxdqDQE,63998
|
||||
sqlalchemy/orm/decl_base.py,sha256=8R7go5sULTYNRlhYiEjXIJkQ34oPp7DY_fC2nS5D5is,83343
|
||||
sqlalchemy/orm/dependency.py,sha256=hgjksUWhgbmgHK5GdJdiDCBgDAIGQXIrY-Tj79tbL2k,47631
|
||||
sqlalchemy/orm/descriptor_props.py,sha256=dR_h4Gvdtpcdp4sj_ZOR4P5Nng2J2vhsvFHouRLlntc,37244
|
||||
sqlalchemy/orm/dynamic.py,sha256=rWAZ-nfAkREuNjt8e_FRdqYrvHDdbODn1CcfyP8Y18k,9816
|
||||
sqlalchemy/orm/evaluator.py,sha256=tRETz4dNZ71VsEA8nG0hpefByB-W0zBt02IxcSR5H2g,12353
|
||||
sqlalchemy/orm/events.py,sha256=1PiGT7JMUWTDAb3X1T79P02BMVDmcWEpatz1FwpLqoA,127777
|
||||
sqlalchemy/orm/exc.py,sha256=IP40P-wOeXhkYk0YizuTC3wqm6W9cPTaQU08f5MMaQ0,7413
|
||||
sqlalchemy/orm/identity.py,sha256=jHdCxCpCyda_8mFOfGmN_Pr0XZdKiU-2hFZshlNxbHs,9249
|
||||
sqlalchemy/orm/instrumentation.py,sha256=M-kZmkUvHUxtf-0mCA8RIM5QmMH1hWlYR_pKMwaidjA,24321
|
||||
sqlalchemy/orm/interfaces.py,sha256=7Lni4Cue41b1CsmN4VbeUyWwzuNMcKtkrpihc9U-WIw,48690
|
||||
sqlalchemy/orm/loading.py,sha256=9RacpzFOWbuKgPRWHFmyIvD4fYCLAnkpwBFASyQ2CoI,58277
|
||||
sqlalchemy/orm/mapped_collection.py,sha256=zK3d3iozORzDruBUrAmkVC0RR3Orj5szk-TSQ24xzIU,19682
|
||||
sqlalchemy/orm/mapper.py,sha256=W-srpoEc3UIYv_6qTXTd_dG_TVeQcToG77VGrXt85PM,171738
|
||||
sqlalchemy/orm/path_registry.py,sha256=sJZMv_WPqUpHfQtKWaX3WYFeKBcNJ8C3wOM2mkBGkTE,25920
|
||||
sqlalchemy/orm/persistence.py,sha256=dzyB2JOXNwQgaCbN8kh0sEz00WFePr48qf8NWVCUZH8,61701
|
||||
sqlalchemy/orm/properties.py,sha256=eDPFzxYUgdM3uWjHywnb1XW-i0tVKKyx7A2MCD31GQU,29306
|
||||
sqlalchemy/orm/query.py,sha256=Cf0e94-u1XyoXJoOAmr4iFvtCwNY98kxUYyMPenaWTE,117708
|
||||
sqlalchemy/orm/relationships.py,sha256=dS5SY0v1MiD7iCNnAQlHaI6prUQhL5EkXT7ijc8FR8E,128644
|
||||
sqlalchemy/orm/scoping.py,sha256=rJVc7_Lic4V00HZ-UvYFWkVpXqdrMayRmIs4fIwH1UA,78688
|
||||
sqlalchemy/orm/session.py,sha256=CZJTQ-wPwIy0c3AMFxgJnBgaft6eEf4JzcCLcaaCSjg,195979
|
||||
sqlalchemy/orm/state.py,sha256=327-F4TG29s6mLC8oWRiO2PuvYIUZzY1MqUPjtUy7M4,37670
|
||||
sqlalchemy/orm/state_changes.py,sha256=qKYg7NxwrDkuUY3EPygAztym6oAVUFcP2wXn7QD3Mz4,6815
|
||||
sqlalchemy/orm/strategies.py,sha256=-tsBRsmEqkaxAAIn4t2F-U5SrRIPoPCyzpqFYGTAwNs,119866
|
||||
sqlalchemy/orm/strategy_options.py,sha256=oeDl_rMDNAC_90N7ytsni-psXWAeQMhABQFyKBSmai0,85353
|
||||
sqlalchemy/orm/sync.py,sha256=g7iZfSge1HgxMk9SKRgUgtHEbpbZ1kP_CBqOIdTOXqc,5779
|
||||
sqlalchemy/orm/unitofwork.py,sha256=fiVaqcymbDDHRa1NjS90N9Z466nd5pkJOEi1dHO6QLY,27033
|
||||
sqlalchemy/orm/util.py,sha256=5SC4MOVU0cPObexDjpMvXvetueiU5pze42raL94gj24,81021
|
||||
sqlalchemy/orm/writeonly.py,sha256=SYu2sAaHZONk2pW4PmtE871LG-O0P_bjidvKzY1H_zI,22305
|
||||
sqlalchemy/pool/__init__.py,sha256=qiDdq4r4FFAoDrK6ncugF_i6usi_X1LeJt-CuBHey0s,1804
|
||||
sqlalchemy/pool/base.py,sha256=WF4az4ZKuzQGuKeSJeyexaYjmWZUvYdC6KIi8zTGodw,52236
|
||||
sqlalchemy/pool/events.py,sha256=xGjkIUZl490ZDtCHqnQF9ZCwe2Jv93eGXmnQxftB11E,13147
|
||||
sqlalchemy/pool/impl.py,sha256=JwpALSkH-pCoO_6oENbkHYY00Jx9nlttyoI61LivRNc,18944
|
||||
sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
sqlalchemy/schema.py,sha256=dKiWmgHYjcKQ4TiiD6vD0UMmIsD8u0Fsor1M9AAeGUs,3194
|
||||
sqlalchemy/sql/__init__.py,sha256=UNa9EUiYWoPayf-FzNcwVgQvpsBdInPZfpJesAStN9o,5820
|
||||
sqlalchemy/sql/_dml_constructors.py,sha256=YdBJex0MCVACv4q2nl_ii3uhxzwU6aDB8zAsratX5UQ,3867
|
||||
sqlalchemy/sql/_elements_constructors.py,sha256=833Flez92odZkE2Vy6SXK8LcoO1AwkfVzOnATJLWFsA,63168
|
||||
sqlalchemy/sql/_orm_types.py,sha256=T-vjcry4C1y0GToFKVxQCnmly_-Zsq4IO4SHN6bvUF4,625
|
||||
sqlalchemy/sql/_py_util.py,sha256=hiM9ePbRSGs60bAMxPFuJCIC_p9SQ1VzqXGiPchiYwE,2173
|
||||
sqlalchemy/sql/_selectable_constructors.py,sha256=wjE6HrLm9cR7bxvZXT8sFLUqT6t_J9G1XyQCnYmBDl0,18780
|
||||
sqlalchemy/sql/_typing.py,sha256=oqwrYHVMtK-AuKGH9c4SgfiOEJUt5vjkzSEzzscMHkM,12771
|
||||
sqlalchemy/sql/annotation.py,sha256=aqbbVz9kfbCT3_66CZ9GEirVN197Cukoqt8rq48FgkQ,18245
|
||||
sqlalchemy/sql/base.py,sha256=M1b-Tg49ikUW2mnZv0aI38oASG6dgeo4jBNWDgJgAg8,73925
|
||||
sqlalchemy/sql/cache_key.py,sha256=0Db8mR8IrpBgdzXs4TGTt98LOpL3c7KABd72MAPKUQQ,33668
|
||||
sqlalchemy/sql/coercions.py,sha256=hAEou9Ycyswzu8yz_Q7QkwL2_c3nctzBJQS2oDEr4iE,40664
|
||||
sqlalchemy/sql/compiler.py,sha256=hrTptbOKIgVIHapywj4Lk5OMwpXvHS-KGg3odFwlo-I,274687
|
||||
sqlalchemy/sql/crud.py,sha256=HBX4QPtW_PYYJmIKfNr-wE8IdEr963N24WXzFBUZOo0,56514
|
||||
sqlalchemy/sql/ddl.py,sha256=lKqvOigbcYrDG0euxd5F4tu9HbBi1kmp3eFPc45HH-8,45636
|
||||
sqlalchemy/sql/default_comparator.py,sha256=utXWsZVGEjflhFfCT4ywa6RnhORc1Rryo87Hga71Rps,16707
|
||||
sqlalchemy/sql/dml.py,sha256=pn0Lm1ofC5qVZzwGWFW73lPCiNba8OsTeemurJgwRyg,65614
|
||||
sqlalchemy/sql/elements.py,sha256=YfccXzQc9DlgF8q15kDf-zKBUY_vpIe0FGaVDBPoic4,176544
|
||||
sqlalchemy/sql/events.py,sha256=iC_Q1Htm1Aobt5tOYxWfHHqNpoytrULORmUKcusH_-E,18290
|
||||
sqlalchemy/sql/expression.py,sha256=VMX-dLpsZYnVRJpYNDozDUgaj7iQ0HuewUKVefD57PE,7586
|
||||
sqlalchemy/sql/functions.py,sha256=kMMYplvuIHFAPwxBI03SizwaLcYEHzysecWk-R1V-JM,63762
|
||||
sqlalchemy/sql/lambdas.py,sha256=DP0Qz7Ypo8QhzMwygGHYgRhwJMx-rNezO1euouH3iYU,49292
|
||||
sqlalchemy/sql/naming.py,sha256=ZHs1qSV3ou8TYmZ92uvU3sfdklUQlIz4uhe330n05SU,6858
|
||||
sqlalchemy/sql/operators.py,sha256=himArRqBzrljob3Zfhi_ZS-Jleg1u6YFp0g3d7Co6IM,76106
|
||||
sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662
|
||||
sqlalchemy/sql/schema.py,sha256=iFleWHkxi-3mKGiK_N1TzUqxnNwOpypB4bWDuAVQe8c,229717
|
||||
sqlalchemy/sql/selectable.py,sha256=cgyV0AsPy4CXAFdhMiTCkbgaHiFilW9sclzxlHJKH3o,236460
|
||||
sqlalchemy/sql/sqltypes.py,sha256=5_N9MhprQFWYc3yjcXgFC_DmvkQU-Jz-Ok9nIMYp2Q4,127469
|
||||
sqlalchemy/sql/traversals.py,sha256=3ScTC1fh1-y8Y478h_2Azmd2xdQdWPWkDve4YgrwMf8,33664
|
||||
sqlalchemy/sql/type_api.py,sha256=SN16_oNZG6G65cvG6ABPcptz_YV5vfB2fknwJZxrkOs,84464
|
||||
sqlalchemy/sql/util.py,sha256=qGHQF-tPCj-m1FBerzT7weCanGcXU7dK5m-W7NHio-4,48077
|
||||
sqlalchemy/sql/visitors.py,sha256=71wdVvhhZL4nJvVwFAs6ssaW-qZgNRSmKjpAcOzF_TA,36317
|
||||
sqlalchemy/testing/__init__.py,sha256=zgitAYzsCWT_U48ZiifXHHLJFo8nZBYmI-5TueA4_lE,3160
|
||||
sqlalchemy/testing/assertions.py,sha256=gL0rA7CCZJbcVgvWOPV91tTZTRwQc1_Ta0-ykBn83Ew,31439
|
||||
sqlalchemy/testing/assertsql.py,sha256=IgQG7l94WaiRP8nTbilJh1ZHZl125g7GPq-S5kmQZN0,16817
|
||||
sqlalchemy/testing/asyncio.py,sha256=kM8uuOqDBagZF0r9xvGmsiirUVLUQ_KBzjUFU67W-b8,3830
|
||||
sqlalchemy/testing/config.py,sha256=AqyH1qub_gDqX0BvlL-JBQe7N-t2wo8655FtwblUNOY,12090
|
||||
sqlalchemy/testing/engines.py,sha256=HFJceEBD3Q_TTFQMTtIV5wGWO_a7oUgoKtUF_z636SM,13481
|
||||
sqlalchemy/testing/entities.py,sha256=IphFegPKbff3Un47jY6bi7_MQXy6qkx_50jX2tHZJR4,3354
|
||||
sqlalchemy/testing/exclusions.py,sha256=T8B01hmm8WVs-EKcUOQRzabahPqblWJfOidi6bHJ6GA,12460
|
||||
sqlalchemy/testing/fixtures/__init__.py,sha256=dMClrIoxqlYIFpk2ia4RZpkbfxsS_3EBigr9QsPJ66g,1198
|
||||
sqlalchemy/testing/fixtures/base.py,sha256=9r_J2ksiTzClpUxW0TczICHrWR7Ny8PV8IsBz6TsGFI,12256
|
||||
sqlalchemy/testing/fixtures/mypy.py,sha256=gdxiwNFIzDlNGSOdvM3gbwDceVCC9t8oM5kKbwyhGBk,11973
|
||||
sqlalchemy/testing/fixtures/orm.py,sha256=8EFbnaBbXX_Bf4FcCzBUaAHgyVpsLGBHX16SGLqE3Fg,6095
|
||||
sqlalchemy/testing/fixtures/sql.py,sha256=KZMjco9_3dsuspmkew5Ejp88Wlr9PsSBB1qeJGFxQAk,15900
|
||||
sqlalchemy/testing/pickleable.py,sha256=U9mIqk-zaxq9Xfy7HErP7UrKgTov-A3QFnhZh-NiOjI,2833
|
||||
sqlalchemy/testing/plugin/__init__.py,sha256=79F--BIY_NTBzVRIlJGgAY5LNJJ3cD19XvrAo4X0W9A,247
|
||||
sqlalchemy/testing/plugin/bootstrap.py,sha256=oYScMbEW4pCnWlPEAq1insFruCXFQeEVBwo__i4McpU,1685
|
||||
sqlalchemy/testing/plugin/plugin_base.py,sha256=BgNzWNEmgpK4CwhyblQQKnH-7FDKVi_Uul5vw8fFjBU,21578
|
||||
sqlalchemy/testing/plugin/pytestplugin.py,sha256=6jkQHH2VQMD75k2As9CuWXmEy9jrscoFRhCNg6-PaTw,27656
|
||||
sqlalchemy/testing/profiling.py,sha256=PbuPhRFbauFilUONeY3tV_Y_5lBkD7iCa8VVyH2Sk9Y,10148
|
||||
sqlalchemy/testing/provision.py,sha256=3qFor_sN1FFlS7odUGkKqLUxGmQZC9XM67I9vQ_zeXo,14626
|
||||
sqlalchemy/testing/requirements.py,sha256=Z__o-1Rj9B7dI8E_l3qsKTvsg0rK198vB0A1p7A5dcM,52832
|
||||
sqlalchemy/testing/schema.py,sha256=lr4GkGrGwagaHMuSGzWdzkMaj3HnS7dgfLLWfxt__-U,6513
|
||||
sqlalchemy/testing/suite/__init__.py,sha256=Y5DRNG0Yl1u3ypt9zVF0Z9suPZeuO_UQGLl-wRgvTjU,722
|
||||
sqlalchemy/testing/suite/test_cte.py,sha256=6zBC3W2OwX1Xs-HedzchcKN2S7EaLNkgkvV_JSZ_Pq0,6451
|
||||
sqlalchemy/testing/suite/test_ddl.py,sha256=1Npkf0C_4UNxphthAGjG078n0vPEgnSIHpDu5MfokxQ,12031
|
||||
sqlalchemy/testing/suite/test_deprecations.py,sha256=BcJxZTcjYqeOAENVElCg3hVvU6fkGEW3KGBMfnW8bng,5337
|
||||
sqlalchemy/testing/suite/test_dialect.py,sha256=EH4ZQWbnGdtjmx5amZtTyhYmrkXJCvW1SQoLahoE7uk,22923
|
||||
sqlalchemy/testing/suite/test_insert.py,sha256=9azifj6-OCD7s8h_tAO1uPw100ibQv8YoKc_VA3hn3c,18824
|
||||
sqlalchemy/testing/suite/test_reflection.py,sha256=7sML8-owubSQeEM7Ve6LbnB8uIVlNV00WWepKwII2a8,109648
|
||||
sqlalchemy/testing/suite/test_results.py,sha256=X720GafdA4p75SOGS93j-dXkt6QDEnnJbU2bh18VCcg,16914
|
||||
sqlalchemy/testing/suite/test_rowcount.py,sha256=3KDTlRgjpQ1OVfp__1cv8Hvq4CsDKzmrhJQ_WIJWoJg,7900
|
||||
sqlalchemy/testing/suite/test_select.py,sha256=ulRZQJlzkwwcewEyisuBEXVWFR0Wshz9MEDxYYiYLwQ,61732
|
||||
sqlalchemy/testing/suite/test_sequence.py,sha256=66bCoy4xo99GBSaX6Hxb88foANAykLGRz1YEKbvpfuA,9923
|
||||
sqlalchemy/testing/suite/test_types.py,sha256=K4MGHvnTtgqeksoQOBCZRVQYC7HoYO6Z6rVt5vj2t9o,67805
|
||||
sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=c3_eIxLyORuSOhNDP0jWKxPyUf3SwMFpdalxtquwqlM,6141
|
||||
sqlalchemy/testing/suite/test_update_delete.py,sha256=yTiM2unnfOK9rK8ZkqeTTU_MkT-RsKFLmdYliniZfAY,3994
|
||||
sqlalchemy/testing/util.py,sha256=qldXKw8gRJ4I2x3uXsBssYMqwatmcMFMTOveRQCmfDU,14469
|
||||
sqlalchemy/testing/warnings.py,sha256=fJ-QJUY2zY2PPxZJKv9medW-BKKbCNbA4Ns_V3YwFXM,1546
|
||||
sqlalchemy/types.py,sha256=cQFM-hFRmaf1GErun1qqgEs6QxufvzMuwKqj9tuMPpE,3168
|
||||
sqlalchemy/util/__init__.py,sha256=5D5Mquvx3SOmud0QErKzzGvBTkqMdhrrd_sXijOILeo,8312
|
||||
sqlalchemy/util/_collections.py,sha256=aZoSAVOXnHBoYEsxDOi0O9odg9wqLbGb7PGjaWQKiyY,20078
|
||||
sqlalchemy/util/_concurrency_py3k.py,sha256=zb0Bow2Y_QjTdaACEviBEEaFvqDuVvpJfmwCjaw8xNE,9170
|
||||
sqlalchemy/util/_has_cy.py,sha256=wCQmeSjT3jaH_oxfCEtGk-1g0gbSpt5MCK5UcWdMWqk,1247
|
||||
sqlalchemy/util/_py_collections.py,sha256=U6L5AoyLdgSv7cdqB4xxQbw1rpeJjyOZVXffgxgga8I,16714
|
||||
sqlalchemy/util/compat.py,sha256=cnucBQOKspo58vjRpQXUBrHGguHOSFvftpD-I8vfUy0,8760
|
||||
sqlalchemy/util/concurrency.py,sha256=9lT_cMoO1fZNdY8QTUZ22oeSf-L5I-79Ke7chcBNPA0,3304
|
||||
sqlalchemy/util/deprecations.py,sha256=YBwvvYhSB8LhasIZRKvg_-WNoVhPUcaYI1ZrnjDn868,11971
|
||||
sqlalchemy/util/langhelpers.py,sha256=uIK3szZuq9aMnO-vEpSlNekNWv4I-E391e56bkTnUm0,65090
|
||||
sqlalchemy/util/preloaded.py,sha256=az7NmLJLsqs0mtM9uBkIu10-841RYDq8wOyqJ7xXvqE,5904
|
||||
sqlalchemy/util/queue.py,sha256=CaeSEaYZ57YwtmLdNdOIjT5PK_LCuwMFiO0mpp39ybM,10185
|
||||
sqlalchemy/util/tool_support.py,sha256=9braZyidaiNrZVsWtGmkSmus50-byhuYrlAqvhjcmnA,6135
|
||||
sqlalchemy/util/topological.py,sha256=N3M3Le7KzGHCmqPGg0ZBqixTDGwmFLhOZvBtc4rHL_g,3458
|
||||
sqlalchemy/util/typing.py,sha256=lFcGo1dJbZIZ9drAnvef-PzP0cX4LMxMSwgk3lJBb0g,18182
|
||||
@@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: setuptools (75.1.0)
|
||||
Root-Is-Purelib: false
|
||||
Tag: cp39-cp39-macosx_10_9_x86_64
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
sqlalchemy
|
||||
BIN
Binary file not shown.
@@ -0,0 +1,128 @@
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import importlib
|
||||
import warnings
|
||||
|
||||
|
||||
is_pypy = '__pypy__' in sys.builtin_module_names
|
||||
|
||||
|
||||
warnings.filterwarnings('ignore',
|
||||
r'.+ distutils\b.+ deprecated',
|
||||
DeprecationWarning)
|
||||
|
||||
|
||||
def warn_distutils_present():
|
||||
if 'distutils' not in sys.modules:
|
||||
return
|
||||
if is_pypy and sys.version_info < (3, 7):
|
||||
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning
|
||||
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
|
||||
return
|
||||
warnings.warn(
|
||||
"Distutils was imported before Setuptools, but importing Setuptools "
|
||||
"also replaces the `distutils` module in `sys.modules`. This may lead "
|
||||
"to undesirable behaviors or errors. To avoid these issues, avoid "
|
||||
"using distutils directly, ensure that setuptools is installed in the "
|
||||
"traditional way (e.g. not an editable install), and/or make sure "
|
||||
"that setuptools is always imported before distutils.")
|
||||
|
||||
|
||||
def clear_distutils():
|
||||
if 'distutils' not in sys.modules:
|
||||
return
|
||||
warnings.warn("Setuptools is replacing distutils.")
|
||||
mods = [name for name in sys.modules if re.match(r'distutils\b', name)]
|
||||
for name in mods:
|
||||
del sys.modules[name]
|
||||
|
||||
|
||||
def enabled():
|
||||
"""
|
||||
Allow selection of distutils by environment variable.
|
||||
"""
|
||||
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'stdlib')
|
||||
return which == 'local'
|
||||
|
||||
|
||||
def ensure_local_distutils():
|
||||
clear_distutils()
|
||||
distutils = importlib.import_module('setuptools._distutils')
|
||||
distutils.__name__ = 'distutils'
|
||||
sys.modules['distutils'] = distutils
|
||||
|
||||
# sanity check that submodules load as expected
|
||||
core = importlib.import_module('distutils.core')
|
||||
assert '_distutils' in core.__file__, core.__file__
|
||||
|
||||
|
||||
def do_override():
|
||||
"""
|
||||
Ensure that the local copy of distutils is preferred over stdlib.
|
||||
|
||||
See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
|
||||
for more motivation.
|
||||
"""
|
||||
if enabled():
|
||||
warn_distutils_present()
|
||||
ensure_local_distutils()
|
||||
|
||||
|
||||
class DistutilsMetaFinder:
|
||||
def find_spec(self, fullname, path, target=None):
|
||||
if path is not None:
|
||||
return
|
||||
|
||||
method_name = 'spec_for_{fullname}'.format(**locals())
|
||||
method = getattr(self, method_name, lambda: None)
|
||||
return method()
|
||||
|
||||
def spec_for_distutils(self):
|
||||
import importlib.abc
|
||||
import importlib.util
|
||||
|
||||
class DistutilsLoader(importlib.abc.Loader):
|
||||
|
||||
def create_module(self, spec):
|
||||
return importlib.import_module('setuptools._distutils')
|
||||
|
||||
def exec_module(self, module):
|
||||
pass
|
||||
|
||||
return importlib.util.spec_from_loader('distutils', DistutilsLoader())
|
||||
|
||||
def spec_for_pip(self):
|
||||
"""
|
||||
Ensure stdlib distutils when running under pip.
|
||||
See pypa/pip#8761 for rationale.
|
||||
"""
|
||||
if self.pip_imported_during_build():
|
||||
return
|
||||
clear_distutils()
|
||||
self.spec_for_distutils = lambda: None
|
||||
|
||||
@staticmethod
|
||||
def pip_imported_during_build():
|
||||
"""
|
||||
Detect if pip is being imported in a build script. Ref #2355.
|
||||
"""
|
||||
import traceback
|
||||
return any(
|
||||
frame.f_globals['__file__'].endswith('setup.py')
|
||||
for frame, line in traceback.walk_stack(None)
|
||||
)
|
||||
|
||||
|
||||
DISTUTILS_FINDER = DistutilsMetaFinder()
|
||||
|
||||
|
||||
def add_shim():
|
||||
sys.meta_path.insert(0, DISTUTILS_FINDER)
|
||||
|
||||
|
||||
def remove_shim():
|
||||
try:
|
||||
sys.meta_path.remove(DISTUTILS_FINDER)
|
||||
except ValueError:
|
||||
pass
|
||||
@@ -0,0 +1 @@
|
||||
__import__('_distutils_hack').do_override()
|
||||
@@ -0,0 +1,33 @@
|
||||
# This is a stub package designed to roughly emulate the _yaml
|
||||
# extension module, which previously existed as a standalone module
|
||||
# and has been moved into the `yaml` package namespace.
|
||||
# It does not perfectly mimic its old counterpart, but should get
|
||||
# close enough for anyone who's relying on it even when they shouldn't.
|
||||
import yaml
|
||||
|
||||
# in some circumstances, the yaml module we imoprted may be from a different version, so we need
|
||||
# to tread carefully when poking at it here (it may not have the attributes we expect)
|
||||
if not getattr(yaml, '__with_libyaml__', False):
|
||||
from sys import version_info
|
||||
|
||||
exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError
|
||||
raise exc("No module named '_yaml'")
|
||||
else:
|
||||
from yaml._yaml import *
|
||||
import warnings
|
||||
warnings.warn(
|
||||
'The _yaml extension module is now located at yaml._yaml'
|
||||
' and its location is subject to change. To use the'
|
||||
' LibYAML-based parser and emitter, import from `yaml`:'
|
||||
' `from yaml import CLoader as Loader, CDumper as Dumper`.',
|
||||
DeprecationWarning
|
||||
)
|
||||
del warnings
|
||||
# Don't `del yaml` here because yaml is actually an existing
|
||||
# namespace member of _yaml.
|
||||
|
||||
__name__ = '_yaml'
|
||||
# If the module is top-level (i.e. not a part of any specific package)
|
||||
# then the attribute should be set to ''.
|
||||
# https://docs.python.org/3.8/library/types.html
|
||||
__package__ = ''
|
||||
@@ -0,0 +1 @@
|
||||
pip
|
||||
@@ -0,0 +1,314 @@
|
||||
Metadata-Version: 2.4
|
||||
Name: akshare
|
||||
Version: 1.18.64
|
||||
Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
|
||||
Author-email: AKFamily <albertandking@gmail.com>
|
||||
License: MIT
|
||||
Project-URL: Homepage, https://github.com/akfamily/akshare
|
||||
Keywords: stock,option,futures,fund,bond,index,air,finance,spider,quant,quantitative,investment,trading,algotrading,data
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Programming Language :: Python :: 3.12
|
||||
Classifier: Programming Language :: Python :: 3.13
|
||||
Classifier: Programming Language :: Python :: 3.14
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Requires-Python: >=3.9
|
||||
Description-Content-Type: text/markdown
|
||||
License-File: LICENSE
|
||||
Requires-Dist: beautifulsoup4>=4.9.1
|
||||
Requires-Dist: lxml>=4.2.1
|
||||
Requires-Dist: pandas>=2.0.0
|
||||
Requires-Dist: requests>=2.22.0
|
||||
Requires-Dist: curl_cffi>=0.13.0
|
||||
Requires-Dist: html5lib>=1.0.1
|
||||
Requires-Dist: xlrd>=1.2.0
|
||||
Requires-Dist: urllib3>=1.25.8
|
||||
Requires-Dist: tqdm>=4.43.0
|
||||
Requires-Dist: openpyxl>=3.0.3
|
||||
Requires-Dist: jsonpath>=0.82
|
||||
Requires-Dist: tabulate>=0.8.6
|
||||
Requires-Dist: decorator>=4.4.2
|
||||
Requires-Dist: mini-racer>=0.12.4; platform_system != "Linux"
|
||||
Requires-Dist: py-mini-racer>=0.6.0; platform_system == "Linux"
|
||||
Requires-Dist: akracer>=0.0.13; platform_system == "Linux"
|
||||
Provides-Extra: full
|
||||
Requires-Dist: akqmt; extra == "full"
|
||||
Provides-Extra: qmt
|
||||
Requires-Dist: akqmt; extra == "qmt"
|
||||
Provides-Extra: dev
|
||||
Requires-Dist: akqmt>=0.1.0; extra == "dev"
|
||||
Requires-Dist: commitizen>=4.12.1; python_version >= "3.10" and extra == "dev"
|
||||
Requires-Dist: pre-commit>=3.6.2; python_version >= "3.9" and extra == "dev"
|
||||
Requires-Dist: sphinx>=7.4.3; extra == "dev"
|
||||
Requires-Dist: recommonmark>=0.7.1; extra == "dev"
|
||||
Requires-Dist: sphinx_markdown_tables>=0.0.17; extra == "dev"
|
||||
Requires-Dist: sphinx_rtd_theme>=1.0.0; extra == "dev"
|
||||
Requires-Dist: mplfinance>=0.12.10b0; extra == "dev"
|
||||
Requires-Dist: ruff>=0.14.14; python_version >= "3.10" and extra == "dev"
|
||||
Requires-Dist: ruff-lsp>=0.0.53; python_version >= "3.10" and extra == "dev"
|
||||
Dynamic: license-file
|
||||
|
||||
**资源分享**:对于想了解更多财经数据与量化投研的小伙伴,推荐一个专注于财经数据和量化研究的知识社区。
|
||||
该社区提供相关文档和视频学习资源,汇集了各类财经数据源和量化投研工具的使用经验。
|
||||
有兴趣深入学习的朋友可点此[了解更多](https://t.zsxq.com/ZCxUG),也推荐大家关注微信公众号【数据科学实战】。
|
||||
|
||||
**重磅推荐**:AKQuant 是一款专为 **量化投研 (Quantitative Research)** 打造的高性能量化回测框架。它以 Rust 铸造极速撮合内核,
|
||||
以 Python 链接数据与 AI 生态,旨在为量化投资者提供可靠高效的量化投研解决方案。参见[AKQuant](https://github.com/akfamily/akquant)
|
||||
|
||||
**工具推荐**:期魔方是一款本地化期货量化分析工具,适合数据分析爱好者使用。无需复杂部署,支持数据分析和机器学习功能,研究功能免费开放。
|
||||
如需了解更多信息可访问[期魔方](https://qmfquant.com)。
|
||||
|
||||

|
||||
|
||||
[](https://pypi.org/project/akshare/)
|
||||
[](https://pypi.org/project/akshare/)
|
||||
[](https://pepy.tech/projects/akshare)
|
||||
[](https://akshare.readthedocs.io/?badge=latest)
|
||||
[](https://github.com/astral-sh/ruff)
|
||||
[](https://github.com/akfamily/akshare)
|
||||
[](https://github.com/akfamily/akshare/actions)
|
||||
[](https://github.com/akfamily/akshare/blob/main/LICENSE)
|
||||
[](https://github.com/akfamily/akshare)
|
||||
[](https://github.com/akfamily/akshare)
|
||||
[](https://github.com/akfamily/akshare)
|
||||
[](https://github.com/prettier/prettier)
|
||||
|
||||
## Overview
|
||||
|
||||
[AKShare](https://github.com/akfamily/akshare) requires Python(64 bit) 3.9 or higher and
|
||||
aims to simplify the process of fetching financial data.
|
||||
|
||||
**Write less, get more!**
|
||||
|
||||
- Documentation: [中文文档](https://akshare.akfamily.xyz/)
|
||||
|
||||
## Installation
|
||||
|
||||
### General
|
||||
|
||||
```shell
|
||||
pip install akshare --upgrade
|
||||
```
|
||||
|
||||
### China
|
||||
|
||||
```shell
|
||||
pip install akshare -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com --upgrade
|
||||
```
|
||||
|
||||
### PR
|
||||
|
||||
Please check out [Documentation](https://akshare.akfamily.xyz/contributing.html) if you
|
||||
want to contribute to AKShare
|
||||
|
||||
### Docker
|
||||
|
||||
#### Pull images
|
||||
|
||||
```shell
|
||||
docker pull registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter
|
||||
```
|
||||
|
||||
#### Run Container
|
||||
|
||||
```shell
|
||||
docker run -it registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter python
|
||||
```
|
||||
|
||||
#### Test
|
||||
|
||||
```python
|
||||
import akshare as ak
|
||||
|
||||
print(ak.__version__)
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Data
|
||||
|
||||
Code:
|
||||
|
||||
```python
|
||||
import akshare as ak
|
||||
|
||||
stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20170301", end_date='20231022', adjust="")
|
||||
print(stock_zh_a_hist_df)
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
日期 开盘 收盘 最高 ... 振幅 涨跌幅 涨跌额 换手率
|
||||
0 2017-03-01 9.49 9.49 9.55 ... 0.84 0.11 0.01 0.21
|
||||
1 2017-03-02 9.51 9.43 9.54 ... 1.26 -0.63 -0.06 0.24
|
||||
2 2017-03-03 9.41 9.40 9.43 ... 0.74 -0.32 -0.03 0.20
|
||||
3 2017-03-06 9.40 9.45 9.46 ... 0.74 0.53 0.05 0.24
|
||||
4 2017-03-07 9.44 9.45 9.46 ... 0.63 0.00 0.00 0.17
|
||||
... ... ... ... ... ... ... ... ...
|
||||
1610 2023-10-16 11.00 11.01 11.03 ... 0.73 0.09 0.01 0.26
|
||||
1611 2023-10-17 11.01 11.02 11.05 ... 0.82 0.09 0.01 0.25
|
||||
1612 2023-10-18 10.99 10.95 11.02 ... 1.00 -0.64 -0.07 0.34
|
||||
1613 2023-10-19 10.91 10.60 10.92 ... 3.01 -3.20 -0.35 0.61
|
||||
1614 2023-10-20 10.55 10.60 10.67 ... 1.51 0.00 0.00 0.27
|
||||
[1615 rows x 11 columns]
|
||||
```
|
||||
|
||||
### Plot
|
||||
|
||||
Code:
|
||||
|
||||
```python
|
||||
import akshare as ak
|
||||
import mplfinance as mpf # Please install mplfinance as follows: pip install mplfinance
|
||||
|
||||
stock_us_daily_df = ak.stock_us_daily(symbol="AAPL", adjust="qfq")
|
||||
stock_us_daily_df = stock_us_daily_df.set_index(["date"])
|
||||
stock_us_daily_df = stock_us_daily_df["2020-04-01": "2020-04-29"]
|
||||
mpf.plot(stock_us_daily_df, type="candle", mav=(3, 6, 9), volume=True, show_nontrading=False)
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
- **Easy of use**: Just one line code to fetch the data;
|
||||
- **Extensible**: Easy to customize your own code with other application;
|
||||
- **Powerful**: Python ecosystem.
|
||||
|
||||
## Tutorials
|
||||
|
||||
1. [Overview](https://akshare.akfamily.xyz/introduction.html)
|
||||
2. [Installation](https://akshare.akfamily.xyz/installation.html)
|
||||
3. [Tutorial](https://akshare.akfamily.xyz/tutorial.html)
|
||||
4. [Data Dict](https://akshare.akfamily.xyz/data/index.html)
|
||||
5. [Subjects](https://akshare.akfamily.xyz/topic/index.html)
|
||||
|
||||
## Contribution
|
||||
|
||||
[AKShare](https://github.com/akfamily/akshare) is still under developing, feel free to open issues and pull requests:
|
||||
|
||||
- Report or fix bugs
|
||||
- Require or publish interface
|
||||
- Write or fix documentation
|
||||
- Add test cases
|
||||
|
||||
> Notice: We use [Ruff](https://github.com/astral-sh/ruff) to format the code
|
||||
|
||||
## Statement
|
||||
|
||||
1. All data provided by [AKShare](https://github.com/akfamily/akshare) is just for academic research purpose;
|
||||
2. The data provided by [AKShare](https://github.com/akfamily/akshare) is for reference only and does not constitute any investment proposal;
|
||||
3. Any investor based on [AKShare](https://github.com/akfamily/akshare) research should pay more attention to data risk;
|
||||
4. [AKShare](https://github.com/akfamily/akshare) will insist on providing open-source financial data;
|
||||
5. Based on some uncontrollable factors, some data interfaces in [AKShare](https://github.com/akfamily/akshare) may be removed;
|
||||
6. Please follow the relevant open-source protocol used by [AKShare](https://github.com/akfamily/akshare);
|
||||
7. Provide HTTP API for the person who uses other program language: [AKTools](https://aktools.readthedocs.io/).
|
||||
|
||||
## Show your style
|
||||
|
||||
Use the badge in your project's README.md:
|
||||
|
||||
```markdown
|
||||
[](https://github.com/akfamily/akshare)
|
||||
```
|
||||
|
||||
Using the badge in README.rst:
|
||||
|
||||
```
|
||||
.. image:: https://img.shields.io/badge/Data%20Science-AKShare-green
|
||||
:target: https://github.com/akfamily/akshare
|
||||
```
|
||||
|
||||
Looks like this:
|
||||
|
||||
[](https://github.com/akfamily/akshare)
|
||||
|
||||
## Citation
|
||||
|
||||
Please use this **bibtex** if you want to cite this repository in your publications:
|
||||
|
||||
```markdown
|
||||
@misc{akshare,
|
||||
author = {Albert King and Yaojie Zhang},
|
||||
title = {AKShare},
|
||||
year = {2022},
|
||||
publisher = {GitHub},
|
||||
journal = {GitHub repository},
|
||||
howpublished = {\url{https://github.com/akfamily/akshare}},
|
||||
}
|
||||
```
|
||||
|
||||
## Acknowledgement
|
||||
|
||||
Special thanks [FuShare](https://github.com/LowinLi/fushare) for the opportunity of learning from the project;
|
||||
|
||||
Special thanks [TuShare](https://github.com/waditu/tushare) for the opportunity of learning from the project;
|
||||
|
||||
Thanks for the data provided by [东方财富网站](http://data.eastmoney.com);
|
||||
|
||||
Thanks for the data provided by [新浪财经网站](https://finance.sina.com.cn);
|
||||
|
||||
Thanks for the data provided by [金十数据网站](https://www.jin10.com/);
|
||||
|
||||
Thanks for the data provided by [生意社网站](http://www.100ppi.com/);
|
||||
|
||||
Thanks for the data provided by [中国银行间市场交易商协会网站](http://www.nafmii.org.cn/);
|
||||
|
||||
Thanks for the data provided by [99期货网站](http://www.99qh.com/);
|
||||
|
||||
Thanks for the data provided by [中国外汇交易中心暨全国银行间同业拆借中心网站](http://www.chinamoney.com.cn/chinese/);
|
||||
|
||||
Thanks for the data provided by [和讯财经网站](http://www.hexun.com/);
|
||||
|
||||
Thanks for the data provided by [DACHENG-XIU 网站](https://dachxiu.chicagobooth.edu/);
|
||||
|
||||
Thanks for the data provided by [上海证券交易所网站](http://www.sse.com.cn/assortment/options/price/);
|
||||
|
||||
Thanks for the data provided by [深证证券交易所网站](http://www.szse.cn/);
|
||||
|
||||
Thanks for the data provided by [北京证券交易所网站](http://www.bse.cn/);
|
||||
|
||||
Thanks for the data provided by [中国金融期货交易所网站](http://www.cffex.com.cn/);
|
||||
|
||||
Thanks for the data provided by [上海期货交易所网站](http://www.shfe.com.cn/);
|
||||
|
||||
Thanks for the data provided by [大连商品交易所网站](http://www.dce.com.cn/);
|
||||
|
||||
Thanks for the data provided by [郑州商品交易所网站](http://www.czce.com.cn/);
|
||||
|
||||
Thanks for the data provided by [上海国际能源交易中心网站](http://www.ine.com.cn/);
|
||||
|
||||
Thanks for the data provided by [Timeanddate 网站](https://www.timeanddate.com/);
|
||||
|
||||
Thanks for the data provided by [河北省空气质量预报信息发布系统网站](http://110.249.223.67/publish/);
|
||||
|
||||
Thanks for the data provided by [Economic Policy Uncertainty 网站](http://www.nanhua.net/nhzc/varietytrend.html);
|
||||
|
||||
Thanks for the data provided by [申万指数网站](http://www.swsindex.com/idx0120.aspx?columnid=8832);
|
||||
|
||||
Thanks for the data provided by [真气网网站](https://www.zq12369.com/);
|
||||
|
||||
Thanks for the data provided by [财富网站](http://www.fortunechina.com/);
|
||||
|
||||
Thanks for the data provided by [中国证券投资基金业协会网站](http://gs.amac.org.cn/);
|
||||
|
||||
Thanks for the data provided by [Expatistan 网站](https://www.expatistan.com/cost-of-living);
|
||||
|
||||
Thanks for the data provided by [北京市碳排放权电子交易平台网站](https://www.bjets.com.cn/article/jyxx/);
|
||||
|
||||
Thanks for the data provided by [国家金融与发展实验室网站](http://www.nifd.cn/);
|
||||
|
||||
Thanks for the data provided by [义乌小商品指数网站](http://www.ywindex.com/Home/Product/index/);
|
||||
|
||||
Thanks for the data provided by [百度迁徙网站](https://qianxi.baidu.com/?from=shoubai#city=0);
|
||||
|
||||
Thanks for the data provided by [思知网站](https://www.ownthink.com/);
|
||||
|
||||
Thanks for the data provided by [Currencyscoop 网站](https://currencyscoop.com/);
|
||||
|
||||
Thanks for the data provided by [新加坡交易所网站](https://www.sgx.com/zh-hans/research-education/derivatives);
|
||||
@@ -0,0 +1,823 @@
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/_version.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/air/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/air/air_hebei.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/air/air_zhenqi.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/air/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/air/sunrise_tad.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/article/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/article/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/article/epu_index.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/article/ff_factor.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/article/fred_md.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/article/risk_rv.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bank/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bank/bank_cbirc_2020.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bank/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_buy_back_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_cb_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_cb_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_cbond.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_china.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_china_money.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_convert.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_gb_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_info_cm.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_issue_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_nafmii.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_summary.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_zh_cov.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/bond_zh_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/bond/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/cal/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/cal/rv.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/crypto/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/crypto/crypto_bitcoin_cme.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/crypto/crypto_hold.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/currency/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/currency/currency.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/currency/currency_china_bank_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/currency/currency_safe.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/data/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/datasets.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_australia.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_bank.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_canada.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_china.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_china_hk.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_china_nbs.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_constitute.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_euro.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_finance_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_germany.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_info_ws.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_japan.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_other.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_swiss.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_uk.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/macro_usa.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/economic/marco_cnbs.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/energy/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/energy/energy_carbon.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/energy/energy_oil_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/event/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/event/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/event/migration.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/exceptions.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/file_fold/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/forex/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/forex/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/forex/forex_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fortune/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fortune/fortune_500.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fortune/fortune_bloomberg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fortune/fortune_forbes_500.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fortune/fortune_hurun.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fortune/fortune_xincaifu_500.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_amac.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_announcement_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_aum_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_etf_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_etf_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_etf_sse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_etf_szse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_etf_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_fee_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_fhsp_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_info_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_init_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_init_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_lof_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_manager.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_overview_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_portfolio_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_position_lg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_rank_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_rating.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_report_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_scale_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_scale_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_scale_szse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fund/fund_xq.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/cot.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_basis.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_comex_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_comm_ctp.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_comm_js.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_comm_qihuo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_contract_detail.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_daily_bar.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_foreign.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_hf_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_hist_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_hq_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_index_ccidx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_inventory_99.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_inventory_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_news_shmet.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_roll_yield.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_rule.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_rule_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_settle.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_settlement_price_sgx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_spot_stock_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_stock_js.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_to_spot.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_warehouse_receipt.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/futures_zh_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/receipt.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/requests_fun.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures/symbol_var.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_contract_info_cffex.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_contract_info_czce.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_contract_info_dce.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_contract_info_gfex.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_contract_info_ine.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_contract_info_shfe.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_cot_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_hog.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_index_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/futures_derivative/futures_spot_sys.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fx/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fx/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fx/currency_investing.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fx/fx_c_swap_cm.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fx/fx_quote.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/fx/fx_quote_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/hf/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/hf/hf_sp500.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_cflp.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_cni.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_csindex.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_cx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_drewry.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_eri.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_global_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_global_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_hog.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_kq_fz.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_kq_ss.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_option_qvix.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_research_fund_sw.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_research_sw.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_spot.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_stock_hk.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_stock_us_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_stock_zh.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_stock_zh_csindex.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_sugar.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_sw.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_yw.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_zh_a_scope.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/index/index_zh_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/interest_rate/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/interest_rate/interbank_rate_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/movie/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/movie/artist_yien.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/movie/movie_yien.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/movie/video_yien.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/news/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/news/news_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/news/news_cctv.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/news/news_stock.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/nlp/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/nlp/nlp_interface.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_comm_qihuo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_commodity.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_commodity_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_contract_info_ctp.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_current_sse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_current_szse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_czce.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_daily_stats_sse_szse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_finance.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_finance_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_lhb_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_margin.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_premium_analysis_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_risk_analysis_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_risk_indicator_sse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/option/option_value_analysis_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/other/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/other/other_car_cpca.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/other/other_car_gasgoo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/other/other_taptap.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/pro/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/pro/client.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/pro/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/pro/data_pro.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qdii/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qdii/qdii_jsl.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qhkc/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qhkc/qhkc_api.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qhkc_web/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qhkc_web/qhkc_fund.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qhkc_web/qhkc_index.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/qhkc_web/qhkc_tool.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/rate/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/rate/repo_rate.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/reits/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/reits/reits_basic.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/request.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/spot/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/spot/spot_hog_soozhu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/spot/spot_price_qh.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/spot/spot_sge.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_allotment_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_ask_bid_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_board_concept_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_board_industry_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_cg_equity_mortgage.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_cg_guarantee.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_cg_lawsuit.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_dividend_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_dzjy_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_fund_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_fund_hold.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_gsrl_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hk_comparison_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hk_famous.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hk_fhpx_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hk_hot_rank_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hk_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hold_control_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hold_control_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hold_num_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hot_rank_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hot_search_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hot_up_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_hsgt_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_industry.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_industry_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_industry_pe_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_industry_sw.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_info.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_info_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_intraday_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_intraday_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_ipo_summary_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_new_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_news_cx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_profile_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_profile_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_rank_forecast.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_repurchase_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_share_changes_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_share_hold.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_stop.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_summary.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_us_famous.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_us_js.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_us_pink.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_us_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_weibo_nlp.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_xq.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_a_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_a_special.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_a_tick_tx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_a_tx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_ah_tx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_b_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_comparison_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_kcb_report.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock/stock_zh_kcb_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_a_below_net_asset_statistics.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_a_high_low.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_a_indicator.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_a_pe_and_pb.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_account_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_all_pb.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_analyst_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_board_concept_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_board_industry_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_buffett_index_lg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_classify_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_comment_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_concept_futu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_congestion_lg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_cyq_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_disclosure_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_dxsyl_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_ebs_lg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_esg_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_fhps_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_fhps_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_fund_flow.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_gddh_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_gdfx_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_gdhs.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_gdzjc_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_gpzy_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_gxl_lg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hist_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hist_tx.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hk_valuation_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hot_xq.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hsgt_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hsgt_exchange_rate.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_hsgt_min_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_info.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_inner_trade_xq.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_irm_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_jgdy_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_lh_yybpm.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_lhb_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_lhb_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_margin_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_margin_sse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_margin_szse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_market_legu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_pankou_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_qsjy_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_report_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_research_report_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_sns_sseinfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_sy_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_technology_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_tfp_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_three_report_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_ttm_lyr.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_us_valuation_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_value_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_yjbb_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_yjyg_cninfo.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_yjyg_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_yzxdr_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_zdhtmx_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_zf_pg.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_zh_valuation_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_zh_vote_baidu.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_feature/stock_ztb_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_basic_info_xq.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_finance_hk_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_finance_sina.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_finance_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_finance_us_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_gbjg_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_hold.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_ipo_declare.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_ipo_review.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_ipo_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_ipo_tutor.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_kcb_detail_sse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_kcb_sse.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_notice.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_profit_forecast_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_profit_forecast_hk_etnet.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_profit_forecast_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_recommend.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_register_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_restricted_em.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_zygc.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/stock_fundamental/stock_zyjs_ths.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/tool/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/tool/trade_date_hist.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/__init__.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/cons.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/context.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/demjson.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/func.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/multi_decrypt.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/request.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/token_process.cpython-39.pyc,,
|
||||
../../../../../../../../Library/Caches/com.apple.python/Users/cjun/Code/github/stock-tracker/backend/.venv/lib/python3.9/site-packages/akshare/utils/tqdm.cpython-39.pyc,,
|
||||
akshare-1.18.64.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
akshare-1.18.64.dist-info/METADATA,sha256=jP5OCB46wqmZJXkAxKmGY2Ll3gMvaPv29CSBjg0kzDg,13169
|
||||
akshare-1.18.64.dist-info/RECORD,,
|
||||
akshare-1.18.64.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare-1.18.64.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
||||
akshare-1.18.64.dist-info/licenses/LICENSE,sha256=0chPuszV_bx1zRKrmgX095HYnuJmVpvJdsiwvvr8LWU,1073
|
||||
akshare-1.18.64.dist-info/top_level.txt,sha256=IqbV2ffZP5qIrLBa8TqOSfh4lN2HGToow-uSjXGsm_A,8
|
||||
akshare/__init__.py,sha256=6qQ_NF3pxQoRwx-QlFgEpUhQHsUMJSMmijLGq6vTSCI,205304
|
||||
akshare/_version.py,sha256=qr5wIitlDNO9WazYSujjG_W4jYQenWo6KmiKprJP-vI,24
|
||||
akshare/air/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/air/air_hebei.py,sha256=jFhsi41EfSGYpRUo98bvJ1oer1FPiQgw1grSrb_q5Yg,5415
|
||||
akshare/air/air_zhenqi.py,sha256=LFu7tflruXDIiCUVJNNwzFh-txyZM8NGXXm16-wptjQ,9447
|
||||
akshare/air/cons.py,sha256=wGDO6_sXnnr1WzT-BbsKzb8QGBtRZnpY1bLMq2uYPyg,9772
|
||||
akshare/air/crypto.js,sha256=ZekRtmCpvWxxWt3qpXj034qx_4SmMIKBQCgrlaYlBso,8444
|
||||
akshare/air/outcrypto.js,sha256=Av3Ded3hxv9vnL_r8p2mmHfUsngs7wCavtFc8jbqlhg,142354
|
||||
akshare/air/sunrise_tad.py,sha256=TmZDVhHJENyK2YUcHuiByZBIpqEBhYPiFqaKyzzIvbk,4138
|
||||
akshare/article/__init__.py,sha256=98SxnOLCcIi59h2uZVgEx4spYd_QRDo_4bvctcwGNQw,82
|
||||
akshare/article/cons.py,sha256=mTJFPBijwYfTxPwqE2HgjLlo3PbrQzrKxdmu93nUTDM,277
|
||||
akshare/article/epu_index.py,sha256=uXGY3uAdyQpRYfs30cfQbu6bwIx8WY16XABpz2bX9bQ,1917
|
||||
akshare/article/ff_factor.py,sha256=SZUIzSWACciTaM9UaSO_IqkdxkXNrxM6BmwHc_uBPnY,4579
|
||||
akshare/article/fred_md.py,sha256=zYiten_ByzfG5UnC6IhY_Br6OZ30w09jCiwVDiO0UG0,2300
|
||||
akshare/article/risk_rv.py,sha256=yLEdnzzJkvKjEGKDNuzoXkstquMvnvXuIVLjkyC8FQw,12866
|
||||
akshare/bank/__init__.py,sha256=yWsPgiDnsP8CjWRLb_0zmK61iDjJ2fWJGeUyczi8x8Q,81
|
||||
akshare/bank/bank_cbirc_2020.py,sha256=wmJVa0kkAoNThuE3MxtHNyX7yuzAf91nq55yoOdVweA,7418
|
||||
akshare/bank/cons.py,sha256=j4LTlewazSEOmPOnPo7wiVSKAeBZr9JEj3y3uFtFZhI,1457
|
||||
akshare/bond/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/bond/bond_buy_back_em.py,sha256=vktXxcsNm_vu3NPUGViuIM4cPxHh2AvuIXaHeT7OxMw,7369
|
||||
akshare/bond/bond_cb_sina.py,sha256=-1htAsWdAngHMYQ__YA-361SxhOuQltlmKfPnOemr9k,1812
|
||||
akshare/bond/bond_cb_ths.py,sha256=sxpcGr5teUR0fSGolBKl1bDUkdA94gKdXdLvr5NSC0U,3079
|
||||
akshare/bond/bond_cbond.py,sha256=zQUA-8JFkpR5BvRIS35k3XlIZfZzFZEeFlq9SQh_4ao,12165
|
||||
akshare/bond/bond_china.py,sha256=Gjp2x2aNFRlGfHFpQYX_Prv19V9a4INiw5O946rLLtA,6535
|
||||
akshare/bond/bond_china_money.py,sha256=giMcXH5xqYszEB33mmmTI4GbAmsW8QzNJSdU7ejUe1E,13729
|
||||
akshare/bond/bond_convert.py,sha256=BAp5ZyTZhzDklfn2b714PKtM5EJW0H4yRfAZFzBfpH4,12691
|
||||
akshare/bond/bond_em.py,sha256=E519B6pwiL1M5aPEnDTAYW1OSwr71saN6WOW0vxnYcg,5431
|
||||
akshare/bond/bond_gb_sina.py,sha256=_N77D_NYslciUfWi5IQXu5K1NaLZ6UJsTGkPP5Nlekg,4139
|
||||
akshare/bond/bond_info_cm.py,sha256=iVgeOx1XwWd3NLKYaXdixQp3wjfXs_g0EpzmK12_DOI,8130
|
||||
akshare/bond/bond_issue_cninfo.py,sha256=tPoZhF-_sIX9ztCKB0K0-Z4Kd9b-389bP3_CdFK7Wb0,21672
|
||||
akshare/bond/bond_nafmii.py,sha256=cekcobyXKMG1zDuM8wHWOn__SuWELxYmUwfGVmLRP40,2155
|
||||
akshare/bond/bond_summary.py,sha256=_Z2OVjE3UpfxN2GhQ2FoE9eHCjQFENz0DStyJQcYkH4,3584
|
||||
akshare/bond/bond_zh_cov.py,sha256=NTZdlw5tycPv9qJT6aTz4qQ_-YE9wTxpt7j5XUUYcw0,23399
|
||||
akshare/bond/bond_zh_sina.py,sha256=Y3S5-JpF2HrOzE4BbtlQkconhPJLqMhTPWrzjv8hp2g,4780
|
||||
akshare/bond/cons.py,sha256=lY3_MpNX5f6FQ_EO56vjebxEecQXLfggkuhWf4xybvQ,28201
|
||||
akshare/cal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare/cal/rv.py,sha256=jo8SHvS2bXoQ8ECA77l4TOw_w6QPVWOhokdRJOoAKS8,6548
|
||||
akshare/crypto/__init__.py,sha256=rd-OC5RqLcnl7xVjGYogmOqJw9eGbkpW_TNas1s_rok,82
|
||||
akshare/crypto/crypto_bitcoin_cme.py,sha256=o9WYp9j5ukS-SfcUxt_kgX1pEsVNZQ2cADxOl_GAZbc,2476
|
||||
akshare/crypto/crypto_hold.py,sha256=kdn9KziWwTtPwYfhiX_6cBONyEIjG6KA3rQtNmy6mPo,2419
|
||||
akshare/currency/__init__.py,sha256=d8yOOiPqY7_A0AuIpCI71-qxxwyUyCaax5jhE54CeMo,80
|
||||
akshare/currency/currency.py,sha256=cUi2vnl9NbpsxufNyDj-EP4YZVQUjSiMxg7JEG7k6ow,6398
|
||||
akshare/currency/currency_china_bank_sina.py,sha256=wwYPj7WoB6HG17H2mSRnTw9f3gz-oqzG-BWiuOMhj-Q,4461
|
||||
akshare/currency/currency_safe.py,sha256=1JXYSJ-Ll2m5PPIFyyIO--zOFtnXi9sI22qZ4TgywFg,1941
|
||||
akshare/data/__init__.py,sha256=EJprxT_QYazNISwoVzA0CbNDG_46XaRpSbsvsg_UTLM,81
|
||||
akshare/data/cninfo.js,sha256=81NKFLoOtovaEQGtJY6Zyh52HDVAlYvPdmOHQBSW28M,208856
|
||||
akshare/data/crypto_info.zip,sha256=egMaxGtQiac_yDsbuHxNUkLQem_D7UWrJtJ4ofe1Rw4,122225
|
||||
akshare/data/ths.js,sha256=AWPkHf3L2Il1UUL0F5qDqNn1dfU0OlZBNUbMf8AmI3Y,39664
|
||||
akshare/datasets.py,sha256=rKuRNZrqi6IMsZ9nyvO3Rx02js0tH3zMLjz8HQNAoPQ,963
|
||||
akshare/economic/__init__.py,sha256=7dWJSrPs7KTj9_Ffs-ZS3aYDrf3v4nOnZYqwUZ3DJms,82
|
||||
akshare/economic/cons.py,sha256=gUUfujOCm80QdUKxCa41AmYXl4H-Glhwk_DQm-DuBIM,16619
|
||||
akshare/economic/macro_australia.py,sha256=YwfEAb6ewRaza1haewcHDitjnksBoqiZoBf9VBLUAbw,11438
|
||||
akshare/economic/macro_bank.py,sha256=wG_u5w5YjeFRn1wr-Re7ty_s2CbQ0Qphxs_bIF_20UQ,11495
|
||||
akshare/economic/macro_canada.py,sha256=IKXqGCh46YwqVc1u5sqik_Dn9uLlO64FXPHPoYTRJcU,15236
|
||||
akshare/economic/macro_china.py,sha256=HGhXeO-_xp5f1YSTV119L4qy3N6USOrc1eEGL_CM1Ug,149512
|
||||
akshare/economic/macro_china_hk.py,sha256=webG_vVlf7OP6TdHRR28GjfFzuyRe8nIHXEFfg0Qf-k,5944
|
||||
akshare/economic/macro_china_nbs.py,sha256=nP6dI-fawch8dz7GMcfGVJsTri-FfIAkvTf3h7DT-kc,9679
|
||||
akshare/economic/macro_constitute.py,sha256=cCfWupKJ86uUzg_pULsg1C2FleHb25mYbfE4x29VnKA,8197
|
||||
akshare/economic/macro_euro.py,sha256=mJFNHV3l0uTQuuPRVIDjDByJbBtOxmeV0ngYFeSZZMM,41076
|
||||
akshare/economic/macro_finance_ths.py,sha256=u0qVSZVa5Ftu1QgehAX-bOenlmejJyy3QWlsf8C5W14,4852
|
||||
akshare/economic/macro_germany.py,sha256=4I7B8kB5oVBvX7EmLUULmYSKFeyZ_Q3NGcsnWS4wgkQ,5883
|
||||
akshare/economic/macro_info_ws.py,sha256=t0PDcsWCD4vt8eq1sWa3zfiYtxil1ekhaV61yu9R32Y,3076
|
||||
akshare/economic/macro_japan.py,sha256=AhHKtgm0eSEl28UUQd5l-Lql2JTA5TQHB9R11ljzUJM,4266
|
||||
akshare/economic/macro_other.py,sha256=zGEwV5LpXSymby8RvjFnaphxH8eJ9y1cagfEmUhHghs,4968
|
||||
akshare/economic/macro_swiss.py,sha256=Ny2AkmrDhL-QcqSCy4uUO56dPSbZB7Xrt77Fpto2xqc,4340
|
||||
akshare/economic/macro_uk.py,sha256=lh2JKCvstYaKIUhZl7SwkKtY1Annk-ZJPaCc50xofac,8440
|
||||
akshare/economic/macro_usa.py,sha256=E5Yhwy1Sel4hHamWkIelnF-V1RZCTYqVYEZBJtLv6Lw,48425
|
||||
akshare/economic/marco_cnbs.py,sha256=gWLy489eEQrxqqpoztls5FnM6yJKSw-H7o40sK6ssMU,2490
|
||||
akshare/energy/__init__.py,sha256=hnsOSZlRX38q13LxfitiByNj_hUcVM-VtWDDnDoHe3s,82
|
||||
akshare/energy/energy_carbon.py,sha256=9nW-u8ziJk-bLSAyjYn_ynJTezO88xjbyyjFoT6h4ZE,11311
|
||||
akshare/energy/energy_oil_em.py,sha256=7mWexgPtuVN0S-dgpuYO3yHhGS_nbZzF-xVgEwKixrI,4028
|
||||
akshare/event/__init__.py,sha256=mVSp-1QdNOPVPjQyEtXfnwsFPTeL9zjfJsrahhvRjkI,80
|
||||
akshare/event/cons.py,sha256=7Ml4vYhrLkQFRyOFbgf0t5QN3b15gWG2pq9JEoxbj44,12391
|
||||
akshare/event/migration.py,sha256=2lR3D_XHRlOKiarBSbjQVEIm3Spj5hbZIwDOvcyKsEU,3760
|
||||
akshare/exceptions.py,sha256=WEJjIhSmJ_xXNW6grwV4nufE_cfmmyuhmueVGiN1VAg,878
|
||||
akshare/file_fold/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/file_fold/calendar.json,sha256=8fHOM8XM61xTDDJx_JUUBctWJNLzC-zshdx6hf1H5lY,123161
|
||||
akshare/forex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare/forex/cons.py,sha256=62e0ogTbuanOtrw79swGCuygsabJsUqvWdsEwQFJMJA,3659
|
||||
akshare/forex/forex_em.py,sha256=dpNrDIWBrkWBsTd8k7XZvV_K0oTqL2cTNb-ASSTNoQo,4534
|
||||
akshare/fortune/__init__.py,sha256=4OCuVKMykUB3Ubm8WogA814U5EGLdrexmfTAOcBnYM4,82
|
||||
akshare/fortune/fortune_500.py,sha256=QqF3dLdDiCcSoDxsyEgJf8CHu72Ppsu7u0EajbXr6mg,3197
|
||||
akshare/fortune/fortune_bloomberg.py,sha256=cFuuM2Zf712ZpTzY2zVBr7n2li4sf0nAmYjJnO6rZ2E,3690
|
||||
akshare/fortune/fortune_forbes_500.py,sha256=RYPEDUb42pa5fYNl0J2RhnD4Qu6jWWZ3R8JrWdYLjhw,1384
|
||||
akshare/fortune/fortune_hurun.py,sha256=TKwC1C4tDH3M8dyG-cE3gObit8nNOPOKEfERW88IL-w,11508
|
||||
akshare/fortune/fortune_xincaifu_500.py,sha256=GNg14YJraS-Ywarbs-tUWvQOiSt3vKOrm2gddcmfMzI,1869
|
||||
akshare/fund/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/fund/fund_amac.py,sha256=Dml3EgpJhmVgkttb0OdaWN41ynOCIbJ0-1qAPDWF0oo,33800
|
||||
akshare/fund/fund_announcement_em.py,sha256=5E0_eT52TDVmegKJIMtT-G-wK-Du3Nnro-MBTXB6JkI,5040
|
||||
akshare/fund/fund_aum_em.py,sha256=L5WtgBDkDCmLaTbRrYAzHywYOIEtIzHeykdyVsMZ2js,3659
|
||||
akshare/fund/fund_em.py,sha256=mKwYkiiRDNW8wTtlCLSkaBLolWi1J_oBGsfeYphw9VI,43408
|
||||
akshare/fund/fund_etf_em.py,sha256=4nvKeQQggf1-bjJR5DGq5bLi3PCTDTo4gYpgCdlOov0,17595
|
||||
akshare/fund/fund_etf_sina.py,sha256=LIMEK36YAWiF8D_NNO0RXUWBtAAEsrO7aDIL73EsTq0,7056
|
||||
akshare/fund/fund_etf_sse.py,sha256=EWQ_ZVcSawVnwkictkpOXfh5TuSb90NoY6wUV4Cpf_A,2309
|
||||
akshare/fund/fund_etf_szse.py,sha256=BdkIcETjKEuFZehtKKI71_-CHHxrwrlm0ZcdLTIKsDQ,2132
|
||||
akshare/fund/fund_etf_ths.py,sha256=QRoWFoff44MlxJVmcKEBLs-G5HAxLNYz9jmnVd7FTHM,5485
|
||||
akshare/fund/fund_fee_em.py,sha256=-wRHseuZMWP_DbASJnof7pg_15gD03b5DCvOOXsEktM,7121
|
||||
akshare/fund/fund_fhsp_em.py,sha256=G9j_wb2UltvHvBAxIlRnd9vOsTZCw_maTgwB6PADUUk,9238
|
||||
akshare/fund/fund_info_ths.py,sha256=k2wKJaDY5XemZqCst3WlvBoPSNPDSRrsfD0YQ2I3Uo8,1583
|
||||
akshare/fund/fund_init_em.py,sha256=9nravXI3ayvIRyREHy07U8gO9_dPTNoh3W36iByhmhM,2225
|
||||
akshare/fund/fund_init_ths.py,sha256=3TJ4WopBoX05em291GfyCBU0v8eDwltgNQ644pafwZE,4321
|
||||
akshare/fund/fund_lof_em.py,sha256=ULWndoG8LswDm8NBApyxzW3-c4llseru_iU-4fnNA2w,12226
|
||||
akshare/fund/fund_manager.py,sha256=piQi1Abqm3u4E0FxTOwiTGx-KTkacH0tCxm-nALlyjY,3101
|
||||
akshare/fund/fund_overview_em.py,sha256=I2SHaUXnt6hFB88kuUWw2_I-8UH1K0cGT3jXjWhztyk,1131
|
||||
akshare/fund/fund_portfolio_em.py,sha256=jMYpt3zrUCma3XcDuLKwsdTnp_W0-qXupvo8vjIsu6s,10855
|
||||
akshare/fund/fund_position_lg.py,sha256=lUBAftC6pGZhDp4PqmHsUvugoKRAXX2RDF2PeI63uWY,3939
|
||||
akshare/fund/fund_rank_em.py,sha256=4JoRCwI6k1YXKGjWWG4qQBKEuHYQ3mNGBzFQqnwmWHo,17784
|
||||
akshare/fund/fund_rating.py,sha256=gLUJntv1_2fWa7004yT-Z_IyYC4i27QrdURWgnlp_cE,11948
|
||||
akshare/fund/fund_report_cninfo.py,sha256=rhztaa3J48VdnCEXFAl8wMg-P7MI2iQa0HculkvL8CI,8785
|
||||
akshare/fund/fund_scale_em.py,sha256=Fl4ru-j1h99-aEcWZAW6Rd-lvslQ456R0RPdIYPoogE,4312
|
||||
akshare/fund/fund_scale_sina.py,sha256=A0qIzWBQdE3IGS9-cxO9_FNpuH-BAG5HhPk5KzTFTFc,8167
|
||||
akshare/fund/fund_scale_szse.py,sha256=C_tLobZ9TZlxfkcx_hjsa_TPN0LpC9PMtt9v-M4qDFY,4409
|
||||
akshare/fund/fund_xq.py,sha256=AxMZB-940bNY7-BatVLZiseHNxiWA17hQzTfuxGibPU,11306
|
||||
akshare/futures/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/futures/cons.py,sha256=VDcE_2qlz3dtu93RJl6LPbbPvbLss1f0UpIij4sp2qU,18189
|
||||
akshare/futures/cot.py,sha256=eiQ6THnoieKj58n3cTXE4tiLbF8vVW6e6A1bqWNETC8,58079
|
||||
akshare/futures/futures_basis.py,sha256=sGjzB5coiTUVI0RHl1vScE9HhqPRyBDnFdtG1OmegdQ,16254
|
||||
akshare/futures/futures_comex_em.py,sha256=NPwOCD6lZUDL4wlGxvbmmJIFkQlW427ERO0vTux13WU,3172
|
||||
akshare/futures/futures_comm_ctp.py,sha256=IyVRCUvhLTFzmcUVvlIaYZ1e38ll7AF8ExhgtXKuzrI,1003
|
||||
akshare/futures/futures_comm_js.py,sha256=C_hziAWX0OcyWIqDdHTp2w-iJoHWkINqJNOEdNNOvNo,2975
|
||||
akshare/futures/futures_comm_qihuo.py,sha256=S4FixnKy3ccIybx8RefFn1dRSq3nVfOjEccAmh0dpvs,12008
|
||||
akshare/futures/futures_contract_detail.py,sha256=FVCL9cQ55DTpFF850MTlAfhj08acXmIO0QYwIcnWRbg,2876
|
||||
akshare/futures/futures_daily_bar.py,sha256=xUf8yHfTpNptDtYKimYKektB4vheKZgYxy6xexnrjco,26928
|
||||
akshare/futures/futures_foreign.py,sha256=f5Os5Ta4g0JpZpRJuTi9hErZGDjt9DsS8iVJGJG_RhQ,2266
|
||||
akshare/futures/futures_hf_em.py,sha256=lemuSxBpZ7OZXvNz-lexpoRMtkgMCnlaP8BTMHfNaHg,8191
|
||||
akshare/futures/futures_hist_em.py,sha256=lWtESyqqau5XbDY9fQYUBvEPbimk3WZW1nlbLPf8S1E,6517
|
||||
akshare/futures/futures_hq_sina.py,sha256=HZBAve1yxp1fnwgEy_2CqVoniTXRkt8KI3REt0N0TiY,9575
|
||||
akshare/futures/futures_index_ccidx.py,sha256=w1p2waOq6LC97kg4cfySy6k0tnn7LHt1vjQxlv3vXEE,1962
|
||||
akshare/futures/futures_inventory_99.py,sha256=9mjq8lRx9levT4KgpzsJrBRR5BccpKcjPTpxyMgVSnU,3569
|
||||
akshare/futures/futures_inventory_em.py,sha256=OwgONgg3Tu1WCIADcH6LpahDedAPz0iQcmNJb4ma5Dw,2620
|
||||
akshare/futures/futures_news_shmet.py,sha256=1epZ3MwDc-T2n1ie4SSDfvUaBiMpSL0Q_xb2VoZ_llU,2465
|
||||
akshare/futures/futures_roll_yield.py,sha256=nPskFCFqbvWKgB6nXr5f8zRQDo4T70jpBrrPvO5uyfA,6140
|
||||
akshare/futures/futures_rule.py,sha256=9RTovEWmK0b3JVCCaefl_cUSLaGY03BUaEUdE-Pdx-g,1587
|
||||
akshare/futures/futures_rule_em.py,sha256=qcXfYZibRJLN2pb3ybNIkNonUOjDMvSirG5xKkRoWqk,963
|
||||
akshare/futures/futures_settle.py,sha256=lrslizNoHItvuJdVLXWf0jLrfCH_01Pdo0ceN2qTfmw,16551
|
||||
akshare/futures/futures_settlement_price_sgx.py,sha256=SJxAGNuNxNEGDk7EF2odRPrWKIpzFoNf6PSNGW2KO9M,2525
|
||||
akshare/futures/futures_spot_stock_em.py,sha256=43CPkAouDu691M6aCMdO1SGKglTak2aba2Np7ftkAdg,3523
|
||||
akshare/futures/futures_stock_js.py,sha256=sAao7ZcqBovdEo4wrVt2K6kXK2rf1_kT_StQdzhm9og,1635
|
||||
akshare/futures/futures_to_spot.py,sha256=fDsnmwUDUWQSF11MBvGEKn_c69fJmaGnRigWzvQMaZc,12898
|
||||
akshare/futures/futures_warehouse_receipt.py,sha256=vBW0deHQPxeV8MJqU8Wnujkhtw9K27IcMucYWDozZOA,9267
|
||||
akshare/futures/futures_zh_sina.py,sha256=iD3cq2TNCbUohiKIGhfnLTBtc-Q0Az_LkrNAH3OntSU,26185
|
||||
akshare/futures/receipt.py,sha256=jS03BF95dsaP1IIccxaEEuqWdcu0kmefu4lUgqAsVB0,26068
|
||||
akshare/futures/requests_fun.py,sha256=0pID8nRIukbgmIEZJYZEPs5pBBEOwvUO8DLdNs8vbe8,2910
|
||||
akshare/futures/symbol_var.py,sha256=0NOG3AoyOPprWBz01J4dxpKgizeUqhvzxF_-fPQxPsE,6814
|
||||
akshare/futures_derivative/__init__.py,sha256=COFyP01gIUhWs4EBr6hwL73B7IWePIzg7vP7oEY3G3I,82
|
||||
akshare/futures_derivative/cons.py,sha256=VkG1HMwPVxvj7BaMifcvDpRYLsfd506npVNiEIaLF_s,5914
|
||||
akshare/futures_derivative/futures_contract_info_cffex.py,sha256=Vv8ovM3FR1HTNj0Oe6LDmP1CO3lWYhcls9ck-iFir8U,3497
|
||||
akshare/futures_derivative/futures_contract_info_czce.py,sha256=PQOcX1DBphqdf01U9zH5D5vqZvPuSif5Tlpisnrzl_U,4329
|
||||
akshare/futures_derivative/futures_contract_info_dce.py,sha256=S3vhBELsmn1J6ql69rkdYsGe3faf1iEYrv8kDDCPTCs,2254
|
||||
akshare/futures_derivative/futures_contract_info_gfex.py,sha256=jWQ7TKPNfEjf1FUCnJqWlHmkvv0qYX0xi0JEEUAuzRg,2313
|
||||
akshare/futures_derivative/futures_contract_info_ine.py,sha256=vwCPG-Vl8c_Wy3ydBZ11ghMM5gjuPN0x9QFvyWxewXI,2433
|
||||
akshare/futures_derivative/futures_contract_info_shfe.py,sha256=NjJNYqRl0VO7vlYSVmLA1DImLcUsG5rqP4ENJvmw6sM,2470
|
||||
akshare/futures_derivative/futures_cot_sina.py,sha256=CmoZu_pItwqX0QNsJMpmEu9I84GBaQhq4dIUkP0Piyw,2815
|
||||
akshare/futures_derivative/futures_hog.py,sha256=8VVd7w5LCUZWFdkffV7-dqihGcqdJlR1ks1evpcU9O0,11613
|
||||
akshare/futures_derivative/futures_index_sina.py,sha256=uYkm4YvXGokpgCUhGccIK3Gv5iMjZouUnyfCDx8D0rM,5888
|
||||
akshare/futures_derivative/futures_spot_sys.py,sha256=Ufqh7S7UAeW_zkASap_DZGqwyW_Vgrf2UOhedYhe-BU,3351
|
||||
akshare/fx/__init__.py,sha256=fvH_pVxTFPnzXvnPvJZDD_vv0IBJusHkJxZ3dJ8ogl8,82
|
||||
akshare/fx/cons.py,sha256=6BC2DoF02ptSILzmYuT1so7z3Ne47Z0eHC95i3a3Zt4,604
|
||||
akshare/fx/currency_investing.py,sha256=rvrz_XD8M6z7ZBSucFInaH3kDX_vASTAsmAOhLW6p4k,2909
|
||||
akshare/fx/fx_c_swap_cm.py,sha256=2WA-pWb-hwyqVPOB1chKbyf4l_996hwzbyVDBVlJ69U,2128
|
||||
akshare/fx/fx_quote.py,sha256=lkBSwc6dJQ2qq1JAODk4knCZInIw3iLhJOGpCnYJo88,3426
|
||||
akshare/fx/fx_quote_baidu.py,sha256=M92Dh42BILPPjC5aGv3ox7OljJiKb6drw2JCT7qChaM,2932
|
||||
akshare/hf/__init__.py,sha256=hFNcepESmuHlH6Ipv9IrHbB6KMxMOD43u_EVX6BzcAo,81
|
||||
akshare/hf/hf_sp500.py,sha256=cEbrP6-C3HPsjUKnErWh_rQBctWGRir31y8cCVl06jk,1207
|
||||
akshare/index/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/index/cons.py,sha256=sstxvhtdG3m2inIhE2geZZnHqNLXrK6GuhcqfI_zE6Q,7789
|
||||
akshare/index/index_cflp.py,sha256=iPn_0kePK74eScwC7rj0IhC-3w-kGQWtWlwsW-J0nbs,4422
|
||||
akshare/index/index_cni.py,sha256=-7nd6KjxP8YOvCCu5nC180zBoJhgWvP3OpMkL1A9vhM,7536
|
||||
akshare/index/index_cons.py,sha256=exCYkXauu3u_liWS5Y0W89F19eSwt6gJmlBciM86txQ,7616
|
||||
akshare/index/index_csindex.py,sha256=-LvkugxNpvHCE8XQzqJubfdhHZFCIGArW9sOzepdOHw,1864
|
||||
akshare/index/index_cx.py,sha256=jLGXfe2hLKet4yYI2ZqHarJf0VzxvlEXz13s3hFprx4,16737
|
||||
akshare/index/index_drewry.py,sha256=BM7V6P8K4QUFQArsdaWRu5qJUZaCoyNz97_b8dmLeCw,2937
|
||||
akshare/index/index_eri.py,sha256=N1yP2_n04WCIJ_vdPb7w5xdSNMIdomqgZ43Wg69hzts,2112
|
||||
akshare/index/index_global_em.py,sha256=UNYBCpO-sD16RKgSmaEDE4IXVLMgKL9SKiv_mSxiQ_0,5912
|
||||
akshare/index/index_global_sina.py,sha256=fFJeW-u6Jo1iiuRMVaGJaUZBUA6wUT0L0u6KT3vkJ4I,2494
|
||||
akshare/index/index_hog.py,sha256=kb867BVagt70_ycZMn22ks5Z9jlVbMiuTsvq5ygjeig,1657
|
||||
akshare/index/index_kq_fz.py,sha256=7RoRYptw5pwKzkfE94qLlhUkK_fXQzwm7G6o6vPk7jM,3376
|
||||
akshare/index/index_kq_ss.py,sha256=VLhpKSa1MJTFfkYjD7Z5oI8pO_4NbWIpcsn4N7sCE84,3334
|
||||
akshare/index/index_option_qvix.py,sha256=1HkeoqtgoFgkStx1QiGW9zcXfdyJmx8bTlnbZkVpfcY,14050
|
||||
akshare/index/index_research_fund_sw.py,sha256=kVYjBl3vZg6CyYBCrxZiSv8taHMnqmG7PQ-LVmMNd3I,4603
|
||||
akshare/index/index_research_sw.py,sha256=Mm1YtiP-PXhDysJwmFidX3RZSZZ92AyXpjl_tVrjdwA,21758
|
||||
akshare/index/index_spot.py,sha256=meTBTCp2DPVTX_N3qpCLtkI-0q3XhrJ3gndNugRBGKg,1767
|
||||
akshare/index/index_stock_hk.py,sha256=VrofVg4QJH-k4pOyMKDQhUCaV-SnVAqpoBPrLx6LeaE,9649
|
||||
akshare/index/index_stock_us_sina.py,sha256=IxOk4G49oasv7EfEQenL9-GLuelyUus6c4JPyRlaOzY,1551
|
||||
akshare/index/index_stock_zh.py,sha256=kUFvpPUiyXfuU23tjS6WMH5IScUuGicwHyKXVJJ7nBs,18762
|
||||
akshare/index/index_stock_zh_csindex.py,sha256=sRVoDD-fitqAMuDs0XPm1oCz2nZ2QTkvNswL1WvXpwo,4164
|
||||
akshare/index/index_sugar.py,sha256=u-huRz_WLCc2xHKRDrI3BHD7lm0XrMkQQwcEfS3FMvo,5104
|
||||
akshare/index/index_sw.py,sha256=hETMmFszQb7JDY8UHjLK8szfwkr7Ui_6QcseOoEfxaI,10456
|
||||
akshare/index/index_yw.py,sha256=pQoF_9HP1MEN3mnI0xUyLNZ96KnM9kQpIwA0P55JN50,4048
|
||||
akshare/index/index_zh_a_scope.py,sha256=4Ej2Gnqtd66EBiI67sQZKhblcIJXdD5CoMIJYD_KwYU,1367
|
||||
akshare/index/index_zh_em.py,sha256=YliKV790ypLdw9oEZ23xVVl6sbGiGxB2grmVXpSHSeA,14090
|
||||
akshare/interest_rate/__init__.py,sha256=O6dl1roEQUWwtXgRpa6wOABUU7MH0YmFDrkfhBpYOX4,81
|
||||
akshare/interest_rate/interbank_rate_em.py,sha256=p6sTfOfu38kAZj7oZS_0LvmLvBmv6nxVJV3-mFzG6xA,4519
|
||||
akshare/movie/__init__.py,sha256=YzijIIzvGpcc9hORC6qJSEK6vkjH5c4Docb5tQq2iHs,82
|
||||
akshare/movie/artist_yien.py,sha256=hYLSb1e9Eowem2vj248xKloqRykIBbIb3ZdNttmw2CE,3876
|
||||
akshare/movie/jm.js,sha256=Emr0kB7KvhBaeVYFwYJ84Ra6EBThVIE_RVPKkOO7uvk,117171
|
||||
akshare/movie/movie_yien.py,sha256=BP3eGmGeTJerlIIF-sOq-TsssZiKM-DiX3vwV3dwi8o,13574
|
||||
akshare/movie/video_yien.py,sha256=2JsyKTwiP4RTuDNzQR6d9V9fzMnByH2ATJFzdtPyXSQ,3524
|
||||
akshare/news/__init__.py,sha256=B7G1wejQ9jRov6hXKLh9xy4F-UcfPps3AgVLDZnKM4w,82
|
||||
akshare/news/news_baidu.py,sha256=c5l8OWSpigiU8E6OhEh-ZwHFDxg0sJWKQc418YHgC0w,14399
|
||||
akshare/news/news_cctv.py,sha256=MRODE1qilypQijyCZedgC1Ctju_3ySdJlhT2nuJcuwc,7389
|
||||
akshare/news/news_stock.py,sha256=s2_ROtls6pHfajGUolU6FP9YROL5bvbs08bFE3yvCOg,4381
|
||||
akshare/nlp/__init__.py,sha256=F-1D7ifZQ4RiE2zsQuPc4Aj_C7RhqxGPvObcRNcLPGs,79
|
||||
akshare/nlp/nlp_interface.py,sha256=PyZjT3PkuTbloop-JwLwZ2kNi22zdO-r_pRUWQ5SmgM,1856
|
||||
akshare/option/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/option/cons.py,sha256=WgeX4UvkvFmTsNTMYwXcIJkqSfCw6A3hn3qM73QrIM0,4817
|
||||
akshare/option/option_comm_qihuo.py,sha256=kjbdp-94KJJJi1ex5U03abtlgviqwP0Aahb6FwddPkk,3128
|
||||
akshare/option/option_commodity.py,sha256=QTYjDHM0OXtGh9n_SkvH_om__l-0-kULnfzCOjNnAPg,26394
|
||||
akshare/option/option_commodity_sina.py,sha256=NN2qywfGZphKlHiEuwU7_3aNXTEKaXH0UrU8xLIQ5XQ,7731
|
||||
akshare/option/option_contract_info_ctp.py,sha256=qei5aN2AIghbxnxTap2xQUouwMD2VlEUI53zHBY6mFs,2111
|
||||
akshare/option/option_current_sse.py,sha256=6xeFc5KwAXV1xCBthytr2SrnJiAd7v1iQxHZH56_2SU,2019
|
||||
akshare/option/option_current_szse.py,sha256=1UInsz1APGtn5gVcq-ajUU67pXxQKkbZEMv6fb2RgOQ,3771
|
||||
akshare/option/option_czce.py,sha256=9FCgqgxrHX3DBdvg3F6HZ1Hs7uSO7w21KJWpS8Wykgg,2538
|
||||
akshare/option/option_daily_stats_sse_szse.py,sha256=Igqi2IPX_1UT2qgIsPDJtSZ660TjvHy9twn_q7Vrodw,4932
|
||||
akshare/option/option_em.py,sha256=9Vm5tDk-i8a0ybzWwa13sUBbWPp5HskYzBlfcs-rF7g,5830
|
||||
akshare/option/option_finance.py,sha256=LF9-j7l2qH469qMzs8Iel2BfJeNuQHtP2nC4hHoIpF4,12608
|
||||
akshare/option/option_finance_sina.py,sha256=EFrM3hD2T75VBsgX0IxMNRq-I7RCo9ibapVjfLUha2I,37867
|
||||
akshare/option/option_lhb_em.py,sha256=lzATTo7aXeJeAq1CqpGiRiWGHPfdDAo9Rm3C0Aoukh4,9010
|
||||
akshare/option/option_margin.py,sha256=j5wyt8pdB8-k1t0Zc3s5dgeM-8YZsHqeubiRUStlGdU,2577
|
||||
akshare/option/option_premium_analysis_em.py,sha256=E0_RVSnEcUBlicHv1GdWG5gJYzCgqx6uTXY81y4LY5c,2543
|
||||
akshare/option/option_risk_analysis_em.py,sha256=OcmZ42Ewg9XCJkNDt8uLjtF9akmKsEdoF9Zu97Hz4eE,2587
|
||||
akshare/option/option_risk_indicator_sse.py,sha256=DQ4e-FHUbfdBUxera83u44fAXHYGQpF4kYeh3hfx-ZE,2453
|
||||
akshare/option/option_value_analysis_em.py,sha256=KIzLJxax1P8SuIUFD0CnnEpTntSnaObwYotGn28DgoY,2658
|
||||
akshare/other/__init__.py,sha256=tSF3ugxWds8utQeRU2yL0MuPphY0iyrW9l4EkQZeNdg,81
|
||||
akshare/other/other_car_cpca.py,sha256=hCBNUrCI2l3OCP3Gqgr_4zpyzhO99XCBoiwkIhUM3r0,34987
|
||||
akshare/other/other_car_gasgoo.py,sha256=KaCMVPydiGJvhJN9eZEvObygYquCsSgsZkQRB0J6srk,3046
|
||||
akshare/other/other_taptap.py,sha256=gbD9shIaMPQJHyWPUgf_5PakAPmgwDtt1xYku_iNXuM,5669
|
||||
akshare/pro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare/pro/client.py,sha256=XiAT5uEKQrYugg1MilEdyXJnJiSwvS13cftR8YY4tgA,2281
|
||||
akshare/pro/cons.py,sha256=ZXTuihl3Pej84O17YdFG1SqPhfD6dQR34Pp8IKak7oQ,245
|
||||
akshare/pro/data_pro.py,sha256=XLpqaZNUPddOBcFK1jBvf4AOYnHJAnoeEitTs0mAA10,831
|
||||
akshare/qdii/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare/qdii/qdii_jsl.py,sha256=9KUMOR-7wK7_GqILqbPFO6bCerJ8oZENo0CiqILOV6U,8161
|
||||
akshare/qhkc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare/qhkc/qhkc_api.py,sha256=LsgyPG57HIF3Ot1EjF2M6qWGSwEg1vdPXKgCg4G4Sec,8364
|
||||
akshare/qhkc_web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
akshare/qhkc_web/qhkc_fund.py,sha256=FZmskiqSVfwLaOHe4xrtcQ0jwwPzMKD5aaC71f2nRnw,17551
|
||||
akshare/qhkc_web/qhkc_index.py,sha256=Dk_ral7UbjyQ0LEyTgDWfIVExPybIKLl77P-t2E4EjA,9501
|
||||
akshare/qhkc_web/qhkc_tool.py,sha256=wLy5Vi_eqwjsiNfw8qSCQwOH12XdUcGKdXygRyznt0c,9286
|
||||
akshare/rate/__init__.py,sha256=qbRx0IhTYi5ZakakyP1xD7dwHmqqkuAvBh0Z1kQr3MQ,82
|
||||
akshare/rate/repo_rate.py,sha256=lxSEMOeWsf-cVfJfZ7XBfSqOwYYQSJKp3iamCWubfjg,4295
|
||||
akshare/reits/__init__.py,sha256=icmIWDUbQg5O-0SJCvf44FzvypneQrb3D-s540_kFk8,81
|
||||
akshare/reits/reits_basic.py,sha256=CRE-_paiPwQ8vWqvJfs8ZAN_LqiMGYkawV4u96aUfGI,7327
|
||||
akshare/request.py,sha256=HtFFf9MhfEibR-ETWe-1Tts6ELU4VKSqA-ghaXjegQM,4252
|
||||
akshare/spot/__init__.py,sha256=BvXm1zCReGMWbcANKydbK9uvYzNU-cbReuUYbdDqunI,82
|
||||
akshare/spot/spot_hog_soozhu.py,sha256=IEt7zrDs0ptAKgMA7QRIk45jcMLcA_LGq6Y3lKLFTi0,9397
|
||||
akshare/spot/spot_price_qh.py,sha256=rRv09vR8K0U_x6x8AiLgGluxytIXkLatFNVkFbIh8eQ,3756
|
||||
akshare/spot/spot_sge.py,sha256=fXy6I9GchX2rfdPDD2wSN8K-hcDdS3ABzLDLdH-9t4Y,8696
|
||||
akshare/stock/__init__.py,sha256=jSa9260d6aNZajaW68chI2mpPkDSXLOgi3eXrqo4MQ8,82
|
||||
akshare/stock/cons.py,sha256=iWAKVzjg9vGliyPt7ECeDB44kv4YQY7q-gFd5nTsb4s,43453
|
||||
akshare/stock/stock_allotment_cninfo.py,sha256=OVjVdWp2XVRNbJvVgtgVVoBmPBJgBB4RyIIgA_9QHM8,6066
|
||||
akshare/stock/stock_ask_bid_em.py,sha256=bo7VNkp1PmK4Z-GPZuVn_I-IAdzeW8cs3W_75KodxCg,3368
|
||||
akshare/stock/stock_board_concept_em.py,sha256=hl8KWtGCcV3wHmrWIuNSqrrbw0ma5p9qxfDsYmb17AQ,18015
|
||||
akshare/stock/stock_board_industry_em.py,sha256=9QfIxNb5EN5xOYEVXcKr1sQVrpt9muSnc7JhTP1Chco,18396
|
||||
akshare/stock/stock_cg_equity_mortgage.py,sha256=Pui5aWKKPwGuKjF_GNpejDzsMGNPrxiaJviLz3x2e9I,3426
|
||||
akshare/stock/stock_cg_guarantee.py,sha256=ts7qcQhhyN1PHB7Q4XlMn38HhfVvubOvky9RZfmUP94,3844
|
||||
akshare/stock/stock_cg_lawsuit.py,sha256=6Y92pPw0JgyrInteqHuU07G1jwmdX2wjaDtrJN8y6Hg,4129
|
||||
akshare/stock/stock_dividend_cninfo.py,sha256=o9VI3RKWy1xWWumtGi9gpJIJvPSfMVMZNCXM5q2LKRQ,3770
|
||||
akshare/stock/stock_dzjy_em.py,sha256=DKzwOg2BtQRjHEJM4-aqRQqTaN8MWLDHabZvczF9H_c,22556
|
||||
akshare/stock/stock_fund_em.py,sha256=sXIZ-2B6_LhfF24my-NLjAArEbjgxvRV6oSy2WObm08,48913
|
||||
akshare/stock/stock_fund_hold.py,sha256=WstyW_tQuNj2pTEYJ2XMV6I1IQXEZl6EnXEsV26G7Gs,6022
|
||||
akshare/stock/stock_gsrl_em.py,sha256=LF88NFHrW4tjUwT3CloZxomnfuI49h7uCmR_Rpgdy_0,1952
|
||||
akshare/stock/stock_hk_comparison_em.py,sha256=vXPfqtAOeJSk_-ECvHUNJ12soYK7UheIy1fOm5J28DM,7084
|
||||
akshare/stock/stock_hk_famous.py,sha256=Kij-j0RF2EwrBONY-VXgrzHz8YHdjZe07ToYo0DpjFE,2988
|
||||
akshare/stock/stock_hk_fhpx_ths.py,sha256=aMKVjhg7nEeXKbVPsq7BkdTe2hpo1JhRHuWxPuLlVoQ,2192
|
||||
akshare/stock/stock_hk_hot_rank_em.py,sha256=OXdm03AW_4M7VuWciauq_tl0FOkb1Yli4Fbnuz4kp4U,4747
|
||||
akshare/stock/stock_hk_sina.py,sha256=--7vkaYvvx_cG-hotjr8mpstDUKVOlDJHTEdIg8V3TQ,10193
|
||||
akshare/stock/stock_hold_control_cninfo.py,sha256=J1CGX1tZ22UJdOWAkED19o7vdE10Hke91cEbiN1RIYQ,10038
|
||||
akshare/stock/stock_hold_control_em.py,sha256=pPd_nXUqSN8FHxFbG1JAl5iiRpYyOqVoeqYgBgjpHtQ,7289
|
||||
akshare/stock/stock_hold_num_cninfo.py,sha256=JY9LcZMhhTiCHfQJv4pwMrLrpUxTKGLE4oRD6pvflsU,3706
|
||||
akshare/stock/stock_hot_rank_em.py,sha256=ktRHbxyslr6WtjUv1KubcRkWiU0BLBDxVCFGSq-O8dg,7424
|
||||
akshare/stock/stock_hot_search_baidu.py,sha256=SZ9iZcLM5sR0xr4JhX56iOaBu_XnBMiBmA17mJ4brlg,2018
|
||||
akshare/stock/stock_hot_up_em.py,sha256=aSV1QIpTeLLkuHbB6GP10A8VFXCfcqLV3HumRTdjiIA,2524
|
||||
akshare/stock/stock_hsgt_em.py,sha256=uI4zc8IsU9rvLcIX54ao58muO90MhoS5EA2UeTNq_Sk,5054
|
||||
akshare/stock/stock_industry.py,sha256=gG8FwylKstLgL_lvM0CWSQgcsd7pe-a4oCSdzCr4bEo,5768
|
||||
akshare/stock/stock_industry_cninfo.py,sha256=-qgKWECckdsEN3o5B57avBY7QrIWaJVBRsOE1-gEThY,6576
|
||||
akshare/stock/stock_industry_pe_cninfo.py,sha256=0OjjsFGG90zJRZEBqaCsjKSpSAgrp3PpXzMtom_ll_s,4287
|
||||
akshare/stock/stock_industry_sw.py,sha256=C0FjDg976EA0EksRS3sChbmJOZmOPEOzKCrHVs2YqTg,1441
|
||||
akshare/stock/stock_info.py,sha256=0yiJA9HozneW4FG_vmUcsVqtCynUBDJ3sEmE887HKJI,16398
|
||||
akshare/stock/stock_info_em.py,sha256=MmRDYZOQFlXMz5FFYDJ863_H2_kZeFmE2mRRyl6l0z8,2508
|
||||
akshare/stock/stock_intraday_em.py,sha256=lKa33VVH9OPisYvUnfib-lmaGzl_iM12uyKUwRERDZE,2391
|
||||
akshare/stock/stock_intraday_sina.py,sha256=gmHW17BJhCu8d3faq-ve-xcblDGH5xkekhj1WMKRnPk,2359
|
||||
akshare/stock/stock_ipo_summary_cninfo.py,sha256=Ma-54GsOOhRWxilLH-Qmm0VVbpJQGf2XWKaJ8NBSgAY,3847
|
||||
akshare/stock/stock_new_cninfo.py,sha256=EOuZowDLQSSHyPAwXcuPXbQkqhbz2nRBZsM7o2ZWILE,5725
|
||||
akshare/stock/stock_news_cx.py,sha256=vLUK4xfvScj6LjIQw9nHYPZOUgG9w8UKoNZD10G0Ib0,1162
|
||||
akshare/stock/stock_profile_cninfo.py,sha256=UgUH3GK52Xl25s3WIXlFmVTlKzDd6QGiTTjj0l-GKsk,3170
|
||||
akshare/stock/stock_profile_em.py,sha256=oxhEQouwmDFcXIu3696Ih-wSbwGTuPX8qj1hSxpqFpA,11203
|
||||
akshare/stock/stock_rank_forecast.py,sha256=5U0fa4tzhqKrw5kDRahUCFSrbrEx_aRtlqZq2mpeJaU,3199
|
||||
akshare/stock/stock_repurchase_em.py,sha256=oOefrlTUo7gJsREaTHdj5HKr_sQeVamU43ATM0Sffts,5029
|
||||
akshare/stock/stock_share_changes_cninfo.py,sha256=siy4PiZgYuNQn5jUUg2G7CyZ_yvuXNi3MVUDFhe5npY,4923
|
||||
akshare/stock/stock_share_hold.py,sha256=PSPiU4gHKe2UGPI_bCgm-Uw-DlQy1VOXAHwWYpiLVNo,10998
|
||||
akshare/stock/stock_stop.py,sha256=WRFvnldImkwNI8b8Y3kAdS6Ua69DUG5s5nlKHZav7R0,1161
|
||||
akshare/stock/stock_summary.py,sha256=eULzk8xqhfxdtJ4JJ03noTFokl5SniBsGmjpyogW1rs,12835
|
||||
akshare/stock/stock_us_famous.py,sha256=3WezC7YxnfB8DeZOICwCOhgvL9IbBgzyOkRA1cmEcHU,3634
|
||||
akshare/stock/stock_us_js.py,sha256=VleGUb7K-NjmW3jMPRc2jwHXM0CMq4IzVM9kUpwURDQ,2503
|
||||
akshare/stock/stock_us_pink.py,sha256=BPupikFfWMxREE944_0Z5EJjRDTG1dakGfPhqKx6ulI,3437
|
||||
akshare/stock/stock_us_sina.py,sha256=gUeZiR19Uhn3OcZRVE6sJ5aC6NQDOvnkMU6QZvzTXJo,8192
|
||||
akshare/stock/stock_weibo_nlp.py,sha256=-k7gzAusb8_D4l0rc6bOzQ3x4b2dFBXJ2hgOntwEGc8,3266
|
||||
akshare/stock/stock_xq.py,sha256=kRPyWbYYd6Adkm7hpuDimk2nXRz8T-mIajboyDNvcBc,4903
|
||||
akshare/stock/stock_zh_a_sina.py,sha256=o6zJRiWYPsIzt2nTav50IQfdhlWIzPN5m1grq9ct4rg,18401
|
||||
akshare/stock/stock_zh_a_special.py,sha256=E2BU73FLyOC-3LcXiLEVQosZ6Vvu6sIgo-Ee66kzzTM,10079
|
||||
akshare/stock/stock_zh_a_tick_tx.py,sha256=-HOilipACz-FEZWlkSXy9lH8A-BpNzuLDcXr_Rv6dYQ,2230
|
||||
akshare/stock/stock_zh_a_tx.py,sha256=OuEuqPkpjT4XWQPmZ_YiLBlcTPeHXvnIu39_YPyhx9o,1063
|
||||
akshare/stock/stock_zh_ah_tx.py,sha256=1DfvP1xF9G4jDnqlacZiYIMWZBujxW9Kycre3yr6MhM,9212
|
||||
akshare/stock/stock_zh_b_sina.py,sha256=-sd0wG4zETsgrJSXivww4YieXfnVMNSfh3phsX_XBBc,16058
|
||||
akshare/stock/stock_zh_comparison_em.py,sha256=8M27v0hr97DN8VybxKYSUWXU5cdfBFXlX3ye71rZlNY,9934
|
||||
akshare/stock/stock_zh_kcb_report.py,sha256=7zRovNGqXrPIYtUj9C3ivlYzfiudkaeBNiYPYlzDWkQ,2914
|
||||
akshare/stock/stock_zh_kcb_sina.py,sha256=ZKFoyq9Y-6LhBoYERc4Oqv5q3Llpne7ngDIZcCs8Yq0,9862
|
||||
akshare/stock_feature/__init__.py,sha256=c2VDBGyg8nWZYLvtnnSqUoQ92Cu6dJ7UFOeJsB2Gff8,82
|
||||
akshare/stock_feature/cons.py,sha256=h_cIhO4YEx8joPozwE5-jHABPsT8tN7tkZ5v-gcTfmw,466
|
||||
akshare/stock_feature/stock_a_below_net_asset_statistics.py,sha256=XrhZI-wLuXXufI5Nh1l9gUx9x7f0iDtdtKa14wexo54,2653
|
||||
akshare/stock_feature/stock_a_high_low.py,sha256=YbbH4r2GCgEEHBP3oJwcxYd6qVJJVhdF_si-0kIT4vw,2050
|
||||
akshare/stock_feature/stock_a_indicator.py,sha256=6_gTR5HiDfPv6c94DD4AFqIPXRRAxgPxt_A8funQrts,2897
|
||||
akshare/stock_feature/stock_a_pe_and_pb.py,sha256=dhfB8MAFK7SVbBwJ98txOMgfPuc3e2hKyjLi3_vCmCo,19055
|
||||
akshare/stock_feature/stock_account_em.py,sha256=4Vh1zoRXmuoGWu1Dw65c9mhIALqOVpb9PLqG5BJgQVg,3312
|
||||
akshare/stock_feature/stock_all_pb.py,sha256=57hIpe5FrlDiiwBHXPJryQIyuSf_2jdxvN8SI8vPYdI,1185
|
||||
akshare/stock_feature/stock_analyst_em.py,sha256=dFUQpgOZUxUmvICFBLRYJP7rjlILStGwm8L0LLbya7M,9406
|
||||
akshare/stock_feature/stock_board_concept_ths.py,sha256=SsJ_kPbs4v9Tge25GLe3LA-meN-c_E_nAGHF3Hfi0IY,11265
|
||||
akshare/stock_feature/stock_board_industry_ths.py,sha256=c22JP9MJGncLaqvBmkAxHUz3HKNMCKf58Rug9n2vlAU,15102
|
||||
akshare/stock_feature/stock_buffett_index_lg.py,sha256=BXM2rdkYwNoIyG4FSKGCjKsC_M42HOPW8yRBk19Arnw,2079
|
||||
akshare/stock_feature/stock_classify_sina.py,sha256=a_AfXPTfb1GwljesjaW4Nifc0BxZ5bib25HygfI314I,3175
|
||||
akshare/stock_feature/stock_comment_em.py,sha256=L8iLRbscqXOZqaPUN2crp5nIE7PwXYhv1Xg52z0o_nI,10479
|
||||
akshare/stock_feature/stock_concept_futu.py,sha256=jKJ9mfdJXgXwcMb3gVpbDl5ivr-zcMkuGO7jjgyA3os,6228
|
||||
akshare/stock_feature/stock_congestion_lg.py,sha256=lAG-5gio95_IfAWyWrDAvIYIf67G6nCupNhsS9pE-3U,1301
|
||||
akshare/stock_feature/stock_cyq_em.py,sha256=fCplJB2glYDmn7DhahiVFP-knPQQOc-hXOSQP6HwhxM,10805
|
||||
akshare/stock_feature/stock_disclosure_cninfo.py,sha256=Vl9MBLQogH1SzCTw8F9nkorHCWW4r9nCGEVh4TvSj0A,10676
|
||||
akshare/stock_feature/stock_dxsyl_em.py,sha256=h-v3_XBrVe8x8jFyolCZfePNE1E_oJf0FZ_fY762IfQ,19285
|
||||
akshare/stock_feature/stock_ebs_lg.py,sha256=ZjAIBc-HWOwpGkjGeDYT05o3lkCs6Vk6jdoMOHDpT88,1787
|
||||
akshare/stock_feature/stock_esg_sina.py,sha256=NKHbyYtuSgYubko1jDWgW0qQFTTcEVEtKA0kasHsahc,11544
|
||||
akshare/stock_feature/stock_fhps_em.py,sha256=Ex355qj1j_EfuM7ImObuFJoUUqpXO73a-zXaDJMKVuU,9471
|
||||
akshare/stock_feature/stock_fhps_ths.py,sha256=h7NTla-ZQRtyEhFS9BHzh-HTGT5aj3OmFL7L_Z2nKIA,2196
|
||||
akshare/stock_feature/stock_fund_flow.py,sha256=cqBqsFrzwmuLP3k3wYQzvW085QUUfHZ4nBW8Zx7egkQ,18669
|
||||
akshare/stock_feature/stock_gddh_em.py,sha256=N4sH_qF7LZvMs46t7eGtbnahNrEBQPDk6tRSP_1ModM,3563
|
||||
akshare/stock_feature/stock_gdfx_em.py,sha256=TK8LeufVjYlJdfgyBM6QXN9SZOuj9zMcB1sllZn23V4,39249
|
||||
akshare/stock_feature/stock_gdhs.py,sha256=PuAUbxuvoQJTDsjnWcW_klJu1Ccsq95qbbNTKc3qpZc,9128
|
||||
akshare/stock_feature/stock_gdzjc_em.py,sha256=3bx2kQmM7OeZWoa9WtkwoCXVaMfIUZw23xpCvs5VSNM,4547
|
||||
akshare/stock_feature/stock_gpzy_em.py,sha256=S4Wgb7GRrKpo9bJtHhQoF1W46z8mO2SjM-bKUS7wSrA,18629
|
||||
akshare/stock_feature/stock_gxl_lg.py,sha256=jwaFojHqS2_Fqn9B3PREuUCQEE1UfowtMaZ00K4cMTw,2688
|
||||
akshare/stock_feature/stock_hist_em.py,sha256=dJqUoZK8157naGf7jfx8VjYTzwivsd1yylqXxHG809g,65443
|
||||
akshare/stock_feature/stock_hist_tx.py,sha256=3Ogdg0yOtzTN8mxQDIqDxcreM3O4LstP43RYWOKZJi0,3400
|
||||
akshare/stock_feature/stock_hk_valuation_baidu.py,sha256=7UOUglXJtLbtj9jh6RnKR7XA_mQZ55TGJhqMxIsoA4M,1885
|
||||
akshare/stock_feature/stock_hot_xq.py,sha256=P4-fLjrh-9CdVe5BQ2O5hmeSesHQAu9E49aMKmhMedM,9023
|
||||
akshare/stock_feature/stock_hsgt_em.py,sha256=npwLcEc81PSn_29gUrD40GBjS3gQyPUJ9de4Hs1zqMs,62194
|
||||
akshare/stock_feature/stock_hsgt_exchange_rate.py,sha256=dSNtqVUyySIqfBu9U5TiDZOETwb2fcO6Y16vLc67c0w,7152
|
||||
akshare/stock_feature/stock_hsgt_min_em.py,sha256=DBNrZwbbR_XoGvGHvi-vexWsBq1Ddio8qe0L9ck0iqY,2841
|
||||
akshare/stock_feature/stock_info.py,sha256=z7IugCECS5qL8VNNIprwHQppeL_ONpfPGRR65c27Ckk,7247
|
||||
akshare/stock_feature/stock_inner_trade_xq.py,sha256=XNeQheeWcjdhuvfO2NWt_m191HX88HS452nZdXFBm9w,2652
|
||||
akshare/stock_feature/stock_irm_cninfo.py,sha256=xD028gllzaHYj6xU9pRKvSLI_gIkVhCTnFH0dSPv1gY,6112
|
||||
akshare/stock_feature/stock_jgdy_em.py,sha256=5xrD-mLcFEpq4wiaanUBXOIkiAfaxxrvaMzYddQn8qg,6109
|
||||
akshare/stock_feature/stock_lh_yybpm.py,sha256=7VlqA-UGbfiQ4ez7Ah9znIfUcVI-7Fxxz_V03JO8LTY,3614
|
||||
akshare/stock_feature/stock_lhb_em.py,sha256=F1L5gLgyS--VCH23D0r3ANFF3Wy8juokjE04E47itPA,38303
|
||||
akshare/stock_feature/stock_lhb_sina.py,sha256=W5F5aPlxAmHzzxcf1AAiJuMVtTK9PlYMo_XamCZ5N1o,9232
|
||||
akshare/stock_feature/stock_margin_em.py,sha256=DRuZ3nwtpYq55Yq3WF8jFlj4xEou3bf9krcc_JbJOPM,3327
|
||||
akshare/stock_feature/stock_margin_sse.py,sha256=T0lEh4Sx-yI2d_Es29SksFn70q4Ji2NQ-ek5_RkQ7TI,7046
|
||||
akshare/stock_feature/stock_margin_szse.py,sha256=ifCtC52y9OCa6nNJuaeDMXeieggYwmB8jKztddjUJ7g,6452
|
||||
akshare/stock_feature/stock_market_legu.py,sha256=Fdu7olXV8Qz6t9Zfz2GGgVp-U24zPpay_mAOLjgF8iA,1914
|
||||
akshare/stock_feature/stock_pankou_em.py,sha256=oynvJGmtlMsiT6NTBOasrR-USeyvccvYgFeV1CUgYmc,5539
|
||||
akshare/stock_feature/stock_qsjy_em.py,sha256=AvCe5GMR70WbNzUHvL0eOuDbzvaE7mHyNjtfDg6nQmM,3970
|
||||
akshare/stock_feature/stock_report_em.py,sha256=IBJJIBciKkBdXNOW06KaOEvHndjB3E0-hzfx0jYb14M,18075
|
||||
akshare/stock_feature/stock_research_report_em.py,sha256=_zRGyO7WxUG2wplPjFzHGfHp9xJ9k3j4CGO8UHSjjBY,6159
|
||||
akshare/stock_feature/stock_sns_sseinfo.py,sha256=TGGLw5P77Hh-sSHgw_KKoK29d1m_V_2GDQXe9m_XFew,4556
|
||||
akshare/stock_feature/stock_sy_em.py,sha256=GysP1WvPpqCLhbCRXH5sxwmXCPYvgtbJYQ_jltDqaA0,17721
|
||||
akshare/stock_feature/stock_technology_ths.py,sha256=MfTIm3WVNY-Uc5yVvfA3cobE01E8fS03w01NxE6B0qE,39177
|
||||
akshare/stock_feature/stock_tfp_em.py,sha256=Y3jjZ758AlCvmSHr7tlT0CMk5MawbLln0cMtl1dqYMY,2481
|
||||
akshare/stock_feature/stock_three_report_em.py,sha256=ld1rEctTJa8BJhCsoStI_Ejc3nMoNRdNNAf_hHma2Gc,24181
|
||||
akshare/stock_feature/stock_ttm_lyr.py,sha256=ftld_a5iu7v1aKzxoY8ahCD28oogFD_l5cjAhkPt06o,1539
|
||||
akshare/stock_feature/stock_us_valuation_baidu.py,sha256=UcKWeCAh7CPc43ivJOi2DVXKa6cZ4KPATORgAdbC4h8,1964
|
||||
akshare/stock_feature/stock_value_em.py,sha256=RA842dkeChSEoS3yN9fiGxS3eDzYjeUdrpXbnteyzZY,2576
|
||||
akshare/stock_feature/stock_yjbb_em.py,sha256=hQBr1aj808AdA88Y_dpuR7G1mb487hcRamD31UZus-s,4689
|
||||
akshare/stock_feature/stock_yjyg_cninfo.py,sha256=KM0O5rHBkVAxDl4dmA_WAgqBWJMuaMLoQ2PyJ-VPBi4,2889
|
||||
akshare/stock_feature/stock_yjyg_em.py,sha256=IJBzUMWAs7gTOUDDniIi_leUwkLuZYQGNUqx4ErhYtU,12184
|
||||
akshare/stock_feature/stock_yzxdr_em.py,sha256=-16KDPtBDXkbHRs7aNAyPy35XurDj7LIcbWAtmgvP64,3219
|
||||
akshare/stock_feature/stock_zdhtmx_em.py,sha256=xCRa0jHgTAeo4XYNom7_d_94OQJbMDiSnGky8mdethE,4472
|
||||
akshare/stock_feature/stock_zf_pg.py,sha256=nYJ1uLOBdzM_PDyq4MNeWoCTripFMAPoAiaPfhDqkcg,6343
|
||||
akshare/stock_feature/stock_zh_valuation_baidu.py,sha256=oxYIHP68pFvAYyqjCvZp3a9tpczTFiWhSxZ0w4eyo7I,1904
|
||||
akshare/stock_feature/stock_zh_vote_baidu.py,sha256=kRnjPskZpFySRAoTb_W2KCZwsUdo20xphU95pGzGtMQ,1768
|
||||
akshare/stock_feature/stock_ztb_em.py,sha256=cKIr6SWXPkE7rdsGHJtICqP19mR8C01n4qLgZCXZAek,17961
|
||||
akshare/stock_feature/ths.js,sha256=AWPkHf3L2Il1UUL0F5qDqNn1dfU0OlZBNUbMf8AmI3Y,39664
|
||||
akshare/stock_fundamental/__init__.py,sha256=umtdE151dFbLfXlzWAqHHVi8yj4lNPlq1wRX1Q5CMNM,81
|
||||
akshare/stock_fundamental/stock_basic_info_xq.py,sha256=fiRwYyduazpxdm6gXGyDtP1mDGpeSYMKicwZRYTD73Q,3647
|
||||
akshare/stock_fundamental/stock_finance_hk_em.py,sha256=iStOF9f7e0iPx3p6qmXdFOBDc7Ikn3LR-p_NGh9jC8g,7017
|
||||
akshare/stock_fundamental/stock_finance_sina.py,sha256=bjYE4ahnP5S8db7KrAizaJx97t-KauHKc-2aRcC2pm8,32562
|
||||
akshare/stock_fundamental/stock_finance_ths.py,sha256=zun4gc8CB_R7UOiOoVeQwrae3Ysr2UEH9SlJbPigfaI,26889
|
||||
akshare/stock_fundamental/stock_finance_us_em.py,sha256=k5bWGOLi48jK48bmEdU6y8KcdAm2gNpa-P-T0WUjqdE,10531
|
||||
akshare/stock_fundamental/stock_gbjg_em.py,sha256=g3F81zP8qXUaBatBZ2R-KMUnLUY5Bp7NMsMRzqmyvbs,3667
|
||||
akshare/stock_fundamental/stock_hold.py,sha256=hiJx2i3hCW7Kl7kMs4Kh1QNvsg-sIUORvgQaeGjOB-Y,5472
|
||||
akshare/stock_fundamental/stock_ipo_declare.py,sha256=MkhYAgMnjlcrQcFQrCOl4_Bhn8BLJszz_J2l7ctHzmQ,3184
|
||||
akshare/stock_fundamental/stock_ipo_review.py,sha256=WieUOEfP-7evF9MJy8kawhfaADPoZ0nn1tIJkfInUz4,3933
|
||||
akshare/stock_fundamental/stock_ipo_ths.py,sha256=1KKWDxAAhnE8k7uR6JglcYgPxZ2W-B0iiHrm8jsjmVI,4064
|
||||
akshare/stock_fundamental/stock_ipo_tutor.py,sha256=l2RdNgivJWS0Coiu4cRjsGjHPijGutUrqSjGxpM-cxo,3300
|
||||
akshare/stock_fundamental/stock_kcb_detail_sse.py,sha256=U2w4wUuOTnavqNEmOdQbTZfnEkDdSs91s82YdA6rwNQ,941
|
||||
akshare/stock_fundamental/stock_kcb_sse.py,sha256=cDCBlCm7PJB1zA9XISpkd2FqzAJnhkfbp21au8Mliy8,1536
|
||||
akshare/stock_fundamental/stock_notice.py,sha256=y2vge3ghhQY9j67kVB1GeIC-Qt1WjXrl8tKonBojptc,6349
|
||||
akshare/stock_fundamental/stock_profit_forecast_em.py,sha256=_ZlWkyz-FswlICbjk_YiHjRwrlLftm_piQIPFkZMrjE,5701
|
||||
akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py,sha256=U0A5oRquM_a4Uz92e17ZPM8h-4_le6Q5N4bFi1yV9Fw,5462
|
||||
akshare/stock_fundamental/stock_profit_forecast_ths.py,sha256=8fzPGyBcxWSvoa7UZke9bDn7P0neSKrkjHAehVgLHJM,4682
|
||||
akshare/stock_fundamental/stock_recommend.py,sha256=50sdN8zYzBQHkVowSjuyMYgqGMTJe8tB8NXu50jrOXw,4617
|
||||
akshare/stock_fundamental/stock_register_em.py,sha256=ZFIbslaBcY1Y52vxAyoe8zGOQDKYiQDoKzN3_n8IWyw,18339
|
||||
akshare/stock_fundamental/stock_restricted_em.py,sha256=e5G3oiZBf9d_a8quX5nLzn3RggeF4yX3j-h3nAZBRmA,13378
|
||||
akshare/stock_fundamental/stock_zygc.py,sha256=hLgtZmQa4hBif_Ap8gmB2Yf_-EAe3qB_UIPhkIi2-qk,2751
|
||||
akshare/stock_fundamental/stock_zyjs_ths.py,sha256=5aniSf9Wp-j0fsCna9dBU8SA2M4CHTpN-GABUv6YWUM,1538
|
||||
akshare/tool/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
||||
akshare/tool/trade_date_hist.py,sha256=o9021QHdOEVucjynFl0jLEi1PEMlNxvDKnMsFSwRfqg,1431
|
||||
akshare/utils/__init__.py,sha256=HbKUP2vZApbeK2PTZVO_m-6kAUymfDwm2yv3Kr4R_1A,81
|
||||
akshare/utils/cons.py,sha256=PFZndkG3lMW1Qhg-wqcZmSowFXwQUsYYCLZT4s1Xkwc,225
|
||||
akshare/utils/context.py,sha256=Hl4kPUzQ1CecRzu5JvTKpTpiMLfzAzYzG7F5hktlsCQ,934
|
||||
akshare/utils/demjson.py,sha256=xT0fcUkDVWkjLquX0rQIkCmpjSueFup0TeXvM_eilGU,250248
|
||||
akshare/utils/func.py,sha256=iqIAkPK6Rcf1QHSAgkIJ0XiVfsfQBDTkOb3E2QAf7uc,2491
|
||||
akshare/utils/multi_decrypt.py,sha256=aWoL2iEPeuXHJg8-n7OtMKixLnIhfzepACgxfrfmQB4,1657
|
||||
akshare/utils/request.py,sha256=2IY3z3v4p7gibrfS7dWIEBcwl3SjST2U0vSs0_auq_4,1899
|
||||
akshare/utils/token_process.py,sha256=nGtgnZGRprXJkhLXH8mcUH4TgIFwzsTOb0EaEPa0Euo,667
|
||||
akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
|
||||
@@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: setuptools (82.0.1)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019-2026 Albert King
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1 @@
|
||||
akshare
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
__version__ = "1.18.64"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/9/30 13:58
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,107 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/4/25 17:20
|
||||
Desc: 河北省空气质量预报信息发布系统
|
||||
https://110.249.223.67/publish
|
||||
每日 17 时发布
|
||||
等级划分
|
||||
1. 空气污染指数为0-50,空气质量级别为一级,空气质量状况属于优。此时,空气质量令人满意,基本无空气污染,各类人群可正常活动。
|
||||
2. 空气污染指数为51-100,空气质量级别为二级,空气质量状况属于良。此时空气质量可接受,但某些污染物可能对极少数异常敏感人群健康有较弱影响,建议极少数异常敏感人群应减少户外活动。
|
||||
3. 空气污染指数为101-150,空气质量级别为三级,空气质量状况属于轻度污染。此时,易感人群症状有轻度加剧,健康人群出现刺激症状。建议儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼。
|
||||
4. 空气污染指数为151-200,空气质量级别为四级,空气质量状况属于中度污染。此时,进一步加剧易感人群症状,可能对健康人群心脏、呼吸系统有影响,建议疾病患者避免长时间、高强度的户外锻练,一般人群适量减少户外运动。
|
||||
5. 空气污染指数为201-300,空气质量级别为五级,空气质量状况属于重度污染。此时,心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状,建议儿童、老年人和心脏病、肺病患者应停留在室内,停止户外运动,一般人群减少户外运动。
|
||||
6. 空气污染指数大于300,空气质量级别为六级,空气质量状况属于严重污染。此时,健康人群运动耐受力降低,有明显强烈症状,提前出现某些疾病,建议儿童、老年人和病人应当留在室内,避免体力消耗,一般人群应避免户外活动。
|
||||
发布单位:河北省环境应急与重污染天气预警中心 技术支持:中国科学院大气物理研究所 中科三清科技有限公司
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
|
||||
def air_quality_hebei() -> pd.DataFrame:
|
||||
"""
|
||||
河北省空气质量预报信息发布系统-空气质量预报, 未来 6 天
|
||||
http://218.11.10.130:8080/#/application/home
|
||||
:return: city = "", 返回所有地区的数据; city="唐山市", 返回唐山市的数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://218.11.10.130:8080/api/hour/130000.xml"
|
||||
r = requests.get(url)
|
||||
soup = BeautifulSoup(r.content, features="xml")
|
||||
data = []
|
||||
cities = soup.find_all("City")
|
||||
for city in cities:
|
||||
pointers = city.find_all("Pointer")
|
||||
for pointer in pointers:
|
||||
row = {
|
||||
"City": city.Name.text if city.Name else None,
|
||||
"Region": pointer.Region.text if pointer.Region else None,
|
||||
"Station": pointer.Name.text if pointer.Name else None,
|
||||
"DateTime": pointer.DataTime.text if pointer.DataTime else None,
|
||||
"AQI": pointer.AQI.text if pointer.AQI else None,
|
||||
"Level": pointer.Level.text if pointer.Level else None,
|
||||
"MaxPoll": pointer.MaxPoll.text if pointer.MaxPoll else None,
|
||||
"Longitude": pointer.CLng.text if pointer.CLng else None,
|
||||
"Latitude": pointer.CLat.text if pointer.CLat else None,
|
||||
}
|
||||
polls = pointer.find_all("Poll")
|
||||
for poll in polls:
|
||||
poll_name = poll.Name.text if poll.Name else None
|
||||
poll_value = poll.Value.text if poll.Value else None
|
||||
row[f"{poll_name}_Value"] = poll_value
|
||||
row[f"{poll_name}_IAQI"] = poll.IAQI.text if poll.IAQI else None
|
||||
data.append(row)
|
||||
|
||||
df = pd.DataFrame(data)
|
||||
numeric_columns = ["AQI", "Longitude", "Latitude"] + [
|
||||
col for col in df.columns if col.endswith("_Value") or col.endswith("_IAQI")
|
||||
]
|
||||
for col in numeric_columns:
|
||||
df[col] = pd.to_numeric(df[col], errors="coerce")
|
||||
|
||||
column_names = {
|
||||
"City": "城市",
|
||||
"Region": "区域",
|
||||
"Station": "监测点",
|
||||
"DateTime": "时间",
|
||||
"Level": "空气质量等级",
|
||||
"MaxPoll": "首要污染物",
|
||||
"Longitude": "经度",
|
||||
"Latitude": "纬度",
|
||||
"SO2_Value": "二氧化硫_浓度",
|
||||
"SO2_IAQI": "二氧化硫_IAQI",
|
||||
"CO_Value": "一氧化碳_浓度",
|
||||
"CO_IAQI": "一氧化碳_IAQI",
|
||||
"NO2_Value": "二氧化氮_浓度",
|
||||
"NO2_IAQI": "二氧化氮_IAQI",
|
||||
"O3-1H_Value": "臭氧1小时_浓度",
|
||||
"O3-1H_IAQI": "臭氧1小时_IAQI",
|
||||
"O3-8H_Value": "臭氧8小时_浓度",
|
||||
"O3-8H_IAQI": "臭氧8小时_IAQI",
|
||||
"PM2.5_Value": "PM2.5_浓度",
|
||||
"PM2.5_IAQI": "PM2.5_IAQI",
|
||||
"PM10_Value": "PM10_浓度",
|
||||
"PM10_IAQI": "PM10_IAQI",
|
||||
}
|
||||
df = df.rename(columns=column_names)
|
||||
basic_columns = [
|
||||
"城市",
|
||||
"区域",
|
||||
"监测点",
|
||||
"时间",
|
||||
"AQI",
|
||||
"空气质量等级",
|
||||
"首要污染物",
|
||||
"经度",
|
||||
"纬度",
|
||||
]
|
||||
pollutant_columns = [col for col in df.columns if col not in basic_columns]
|
||||
df = df[basic_columns + sorted(pollutant_columns)]
|
||||
return df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
air_quality_hebei_df = air_quality_hebei()
|
||||
print(air_quality_hebei_df)
|
||||
@@ -0,0 +1,294 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/4/2 22:40
|
||||
Desc: 真气网-空气质量
|
||||
https://www.zq12369.com/environment.php
|
||||
空气质量在线监测分析平台的空气质量数据
|
||||
https://www.aqistudy.cn/
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from py_mini_racer import MiniRacer
|
||||
|
||||
from akshare.utils import demjson
|
||||
|
||||
|
||||
def _get_js_path(name: str = None, module_file: str = None) -> str:
|
||||
"""
|
||||
获取 JS 文件的路径(从模块所在目录查找)
|
||||
:param name: 文件名
|
||||
:type name: str
|
||||
:param module_file: 模块路径
|
||||
:type module_file: str
|
||||
:return: 路径
|
||||
:rtype: str
|
||||
"""
|
||||
module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))
|
||||
module_json_path = os.path.join(module_folder, "air", name)
|
||||
return module_json_path
|
||||
|
||||
|
||||
def _get_file_content(file_name: str = "crypto.js") -> str:
|
||||
"""
|
||||
获取 JS 文件的内容
|
||||
:param file_name: JS 文件名
|
||||
:type file_name: str
|
||||
:return: 文件内容
|
||||
:rtype: str
|
||||
"""
|
||||
setting_file_name = file_name
|
||||
setting_file_path = _get_js_path(setting_file_name, __file__)
|
||||
with open(setting_file_path) as f:
|
||||
file_data = f.read()
|
||||
return file_data
|
||||
|
||||
|
||||
def has_month_data(href):
|
||||
"""
|
||||
Deal with href node
|
||||
:param href: href
|
||||
:type href: str
|
||||
:return: href result
|
||||
:rtype: str
|
||||
"""
|
||||
return href and re.compile("monthdata.php").search(href)
|
||||
|
||||
|
||||
def air_city_table() -> pd.DataFrame:
|
||||
"""
|
||||
真气网-空气质量历史数据查询-全部城市列表
|
||||
https://www.zq12369.com/environment.php?date=2019-06-05&tab=rank&order=DESC&type=DAY#rank
|
||||
:return: 城市映射
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://www.zq12369.com/environment.php"
|
||||
date = "2020-05-01"
|
||||
temp_df = None
|
||||
if len(date.split("-")) == 3:
|
||||
params = {
|
||||
"date": date,
|
||||
"tab": "rank",
|
||||
"order": "DESC",
|
||||
"type": "DAY",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
temp_df = pd.read_html(StringIO(r.text))[1].iloc[1:, :]
|
||||
del temp_df["降序"]
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df["index"] = temp_df.index + 1
|
||||
temp_df.columns = [
|
||||
"序号",
|
||||
"省份",
|
||||
"城市",
|
||||
"AQI",
|
||||
"空气质量",
|
||||
"PM2.5浓度",
|
||||
"首要污染物",
|
||||
]
|
||||
temp_df["AQI"] = pd.to_numeric(temp_df["AQI"])
|
||||
return temp_df
|
||||
|
||||
|
||||
def air_quality_watch_point(
|
||||
city: str = "杭州", start_date: str = "20220408", end_date: str = "20220409"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
真气网-监测点空气质量-细化到具体城市的每个监测点
|
||||
指定之间段之间的空气质量数据
|
||||
https://www.zq12369.com/
|
||||
:param city: 调用 ak.air_city_table() 接口获取
|
||||
:type city: str
|
||||
:param start_date: e.g., "20190327"
|
||||
:type start_date: str
|
||||
:param end_date: e.g., ""20200327""
|
||||
:type end_date: str
|
||||
:return: 指定城市指定日期区间的观测点空气质量
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
start_date = "-".join([start_date[:4], start_date[4:6], start_date[6:]])
|
||||
end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
|
||||
url = "https://www.zq12369.com/api/zhenqiapi.php"
|
||||
file_data = _get_file_content(file_name="crypto.js")
|
||||
ctx = MiniRacer()
|
||||
ctx.eval(file_data)
|
||||
method = "GETCITYPOINTAVG"
|
||||
city_param = ctx.call("encode_param", city)
|
||||
payload = {
|
||||
"appId": "a01901d3caba1f362d69474674ce477f",
|
||||
"method": ctx.call("encode_param", method),
|
||||
"city": city_param,
|
||||
"startTime": ctx.call("encode_param", start_date),
|
||||
"endTime": ctx.call("encode_param", end_date),
|
||||
"secret": ctx.call("encode_secret", method, city_param, start_date, end_date),
|
||||
}
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/81.0.4044.122 Safari/537.36"
|
||||
}
|
||||
r = requests.post(url, data=payload, headers=headers)
|
||||
data_text = r.text
|
||||
data_json = demjson.decode(ctx.call("decode_result", data_text))
|
||||
temp_df = pd.DataFrame(data_json["rows"])
|
||||
return temp_df
|
||||
|
||||
|
||||
def air_quality_hist(
|
||||
city: str = "杭州",
|
||||
period: str = "day",
|
||||
start_date: str = "20190327",
|
||||
end_date: str = "20200427",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
真气网-空气历史数据
|
||||
https://www.zq12369.com/
|
||||
:param city: 调用 ak.air_city_table() 接口获取所有城市列表
|
||||
:type city: str
|
||||
:param period: "hour": 每小时一个数据, 由于数据量比较大, 下载较慢; "day": 每天一个数据; "month": 每个月一个数据
|
||||
:type period: str
|
||||
:param start_date: e.g., "20190327"
|
||||
:type start_date: str
|
||||
:param end_date: e.g., "20200327"
|
||||
:type end_date: str
|
||||
:return: 指定城市和数据频率下在指定时间段内的空气质量数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
start_date = "-".join([start_date[:4], start_date[4:6], start_date[6:]])
|
||||
end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
|
||||
url = "https://www.zq12369.com/api/newzhenqiapi.php"
|
||||
file_data = _get_file_content(file_name="outcrypto.js")
|
||||
ctx = MiniRacer()
|
||||
ctx.eval(file_data)
|
||||
app_id = "4f0e3a273d547ce6b7147bfa7ceb4b6e"
|
||||
method = "CETCITYPERIOD"
|
||||
timestamp = ctx.eval("timestamp = new Date().getTime()")
|
||||
p_text = json.dumps(
|
||||
{
|
||||
"city": city,
|
||||
"endTime": f"{end_date} 23:45:39",
|
||||
"startTime": f"{start_date} 00:00:00",
|
||||
"type": period.upper(),
|
||||
},
|
||||
ensure_ascii=False,
|
||||
indent=None,
|
||||
).replace(' "', '"')
|
||||
secret = ctx.call("hex_md5", app_id + method + str(timestamp) + "WEB" + p_text)
|
||||
payload = {
|
||||
"appId": "4f0e3a273d547ce6b7147bfa7ceb4b6e",
|
||||
"method": "CETCITYPERIOD",
|
||||
"timestamp": int(timestamp),
|
||||
"clienttype": "WEB",
|
||||
"object": {
|
||||
"city": city,
|
||||
"type": period.upper(),
|
||||
"startTime": f"{start_date} 00:00:00",
|
||||
"endTime": f"{end_date} 23:45:39",
|
||||
},
|
||||
"secret": secret,
|
||||
}
|
||||
need = (
|
||||
json.dumps(payload, ensure_ascii=False, indent=None, sort_keys=False)
|
||||
.replace(' "', '"')
|
||||
.replace("\\", "")
|
||||
.replace('p": ', 'p":')
|
||||
.replace('t": ', 't":')
|
||||
)
|
||||
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
|
||||
"Chrome/100.0.4896.75 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
params = {"param": ctx.call("encode_param", need)}
|
||||
r = requests.post(url, data=params, headers=headers)
|
||||
temp_text = ctx.call("decryptData", r.text)
|
||||
data_json = demjson.decode(ctx.call("b.decode", temp_text))
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"]["rows"])
|
||||
temp_df.index = temp_df["time"]
|
||||
del temp_df["time"]
|
||||
temp_df = temp_df.astype(float, errors="ignore")
|
||||
return temp_df
|
||||
|
||||
|
||||
def air_quality_rank(date: str = "") -> pd.DataFrame:
|
||||
"""
|
||||
真气网-168 城市 AQI 排行榜
|
||||
https://www.zq12369.com/environment.php?date=2020-03-12&tab=rank&order=DESC&type=DAY#rank
|
||||
:param date: "": 当前时刻空气质量排名; "20200312": 当日空气质量排名; "202003": 当月空气质量排名; "2019": 当年空气质量排名;
|
||||
:type date: str
|
||||
:return: 指定 date 类型的空气质量排名数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
if len(date) == 4:
|
||||
date = date
|
||||
elif len(date) == 6:
|
||||
date = "-".join([date[:4], date[4:6]])
|
||||
elif date == "":
|
||||
date = "实时"
|
||||
else:
|
||||
date = "-".join([date[:4], date[4:6], date[6:]])
|
||||
|
||||
url = "https://www.zq12369.com/environment.php"
|
||||
|
||||
if len(date.split("-")) == 3:
|
||||
params = {
|
||||
"date": date,
|
||||
"tab": "rank",
|
||||
"order": "DESC",
|
||||
"type": "DAY",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
return pd.read_html(StringIO(r.text))[1].iloc[1:, :]
|
||||
elif len(date.split("-")) == 2:
|
||||
params = {
|
||||
"month": date,
|
||||
"tab": "rank",
|
||||
"order": "DESC",
|
||||
"type": "MONTH",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
return pd.read_html(StringIO(r.text))[2].iloc[1:, :]
|
||||
elif len(date.split("-")) == 1 and date != "实时":
|
||||
params = {
|
||||
"year": date,
|
||||
"tab": "rank",
|
||||
"order": "DESC",
|
||||
"type": "YEAR",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
return pd.read_html(StringIO(r.text))[3].iloc[1:, :]
|
||||
if date == "实时":
|
||||
params = {
|
||||
"tab": "rank",
|
||||
"order": "DESC",
|
||||
"type": "MONTH",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
return pd.read_html(StringIO(r.text))[0].iloc[1:, :]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
air_city_table_df = air_city_table()
|
||||
print(air_city_table_df)
|
||||
|
||||
air_quality_watch_point_df = air_quality_watch_point(
|
||||
city="杭州", start_date="20220408", end_date="20220409"
|
||||
)
|
||||
print(air_quality_watch_point_df)
|
||||
|
||||
air_quality_hist_df = air_quality_hist(
|
||||
city="北京",
|
||||
period="day",
|
||||
start_date="20220801",
|
||||
end_date="20240402",
|
||||
)
|
||||
print(air_quality_hist_df)
|
||||
|
||||
air_quality_rank_df = air_quality_rank()
|
||||
print(air_quality_rank_df)
|
||||
@@ -0,0 +1,413 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/11/25 20:45
|
||||
Desc: 空气质量接口配置文件
|
||||
"""
|
||||
|
||||
city_chinese_list = [
|
||||
"北京",
|
||||
"重庆",
|
||||
"福州",
|
||||
"广州",
|
||||
"杭州",
|
||||
"昆明",
|
||||
"南昌",
|
||||
"南京",
|
||||
"南宁",
|
||||
"南通",
|
||||
"宁波",
|
||||
"上海",
|
||||
"深圳",
|
||||
"苏州",
|
||||
"徐州",
|
||||
"银川",
|
||||
]
|
||||
|
||||
city_english_list = [
|
||||
"beijing",
|
||||
"chongqing",
|
||||
"foochow",
|
||||
"guangzhou",
|
||||
"hangzhou",
|
||||
"kunming",
|
||||
"nanchang",
|
||||
"nanjing",
|
||||
"nanning",
|
||||
"nantong",
|
||||
"ningbo",
|
||||
"shanghai",
|
||||
"shenzhen",
|
||||
"suzhou",
|
||||
"xuzhou",
|
||||
"yinchuan",
|
||||
]
|
||||
|
||||
city_code_dict = {
|
||||
"北京": "110000",
|
||||
"天津": "120000",
|
||||
"石家庄": "130100",
|
||||
"唐山": "130200",
|
||||
"秦皇岛": "130300",
|
||||
"邯郸": "130400",
|
||||
"邢台": "130500",
|
||||
"保定": "130600",
|
||||
"承德": "130800",
|
||||
"沧州": "130900",
|
||||
"廊坊": "131000",
|
||||
"衡水": "131100",
|
||||
"张家口": "131200",
|
||||
"太原": "140100",
|
||||
"大同": "140200",
|
||||
"阳泉": "140300",
|
||||
"长治": "140400",
|
||||
"晋城": "140500",
|
||||
"朔州": "140600",
|
||||
"晋中": "140700",
|
||||
"运城": "140800",
|
||||
"忻州": "140900",
|
||||
"临汾": "141000",
|
||||
"吕梁": "141100",
|
||||
"呼和浩特": "150100",
|
||||
"包头": "150200",
|
||||
"乌海": "150300",
|
||||
"赤峰": "150400",
|
||||
"通辽": "150500",
|
||||
"鄂尔多斯": "150600",
|
||||
"呼伦贝尔": "150700",
|
||||
"巴彦淖尔": "150800",
|
||||
"乌兰察布": "150900",
|
||||
"兴安盟": "152200",
|
||||
"锡林郭勒盟": "152500",
|
||||
"阿拉善盟": "152900",
|
||||
"沈阳": "210100",
|
||||
"大连": "210200",
|
||||
"瓦房店": "210281",
|
||||
"鞍山": "210300",
|
||||
"抚顺": "210400",
|
||||
"本溪": "210500",
|
||||
"丹东": "210600",
|
||||
"锦州": "210700",
|
||||
"营口": "210800",
|
||||
"阜新": "210900",
|
||||
"辽阳": "211000",
|
||||
"盘锦": "211100",
|
||||
"铁岭": "211200",
|
||||
"朝阳": "211300",
|
||||
"葫芦岛": "211400",
|
||||
"长春": "220100",
|
||||
"吉林": "220200",
|
||||
"四平": "220300",
|
||||
"辽源": "220400",
|
||||
"通化": "220500",
|
||||
"白山": "220600",
|
||||
"松原": "220700",
|
||||
"白城": "220800",
|
||||
"延边州": "222400",
|
||||
"哈尔滨": "230100",
|
||||
"齐齐哈尔": "230200",
|
||||
"鸡西": "230300",
|
||||
"鹤岗": "230400",
|
||||
"双鸭山": "230500",
|
||||
"大庆": "230600",
|
||||
"伊春": "230700",
|
||||
"佳木斯": "230800",
|
||||
"七台河": "230900",
|
||||
"牡丹江": "231000",
|
||||
"黑河": "231100",
|
||||
"绥化": "231200",
|
||||
"大兴安岭地区": "232700",
|
||||
"上海": "310000",
|
||||
"南京": "320100",
|
||||
"无锡": "320200",
|
||||
"江阴": "320281",
|
||||
"宜兴": "320282",
|
||||
"徐州": "320300",
|
||||
"常州": "320400",
|
||||
"溧阳": "320481",
|
||||
"金坛": "320482",
|
||||
"苏州": "320500",
|
||||
"常熟": "320581",
|
||||
"张家港": "320582",
|
||||
"昆山": "320583",
|
||||
"吴江": "320584",
|
||||
"太仓": "320585",
|
||||
"南通": "320600",
|
||||
"海门": "320684",
|
||||
"连云港": "320700",
|
||||
"淮安": "320800",
|
||||
"盐城": "320900",
|
||||
"扬州": "321000",
|
||||
"镇江": "321100",
|
||||
"句容": "321183",
|
||||
"泰州": "321200",
|
||||
"宿迁": "321300",
|
||||
"杭州": "330100",
|
||||
"富阳": "330183",
|
||||
"临安": "330185",
|
||||
"宁波": "330200",
|
||||
"温州": "330300",
|
||||
"嘉兴": "330400",
|
||||
"湖州": "330500",
|
||||
"诸暨": "330681",
|
||||
"金华": "330700",
|
||||
"义乌": "330782",
|
||||
"衢州": "330800",
|
||||
"舟山": "330900",
|
||||
"台州": "331000",
|
||||
"丽水": "331100",
|
||||
"绍兴": "331300",
|
||||
"合肥": "340100",
|
||||
"芜湖": "340200",
|
||||
"蚌埠": "340300",
|
||||
"淮南": "340400",
|
||||
"马鞍山": "340500",
|
||||
"淮北": "340600",
|
||||
"铜陵": "340700",
|
||||
"安庆": "340800",
|
||||
"黄山": "341000",
|
||||
"滁州": "341100",
|
||||
"阜阳": "341200",
|
||||
"宿州": "341300",
|
||||
"六安": "341500",
|
||||
"亳州": "341600",
|
||||
"池州": "341700",
|
||||
"宣城": "341800",
|
||||
"福州": "350100",
|
||||
"厦门": "350200",
|
||||
"莆田": "350300",
|
||||
"三明": "350400",
|
||||
"泉州": "350500",
|
||||
"漳州": "350600",
|
||||
"南平": "350700",
|
||||
"龙岩": "350800",
|
||||
"宁德": "350900",
|
||||
"南昌": "360100",
|
||||
"景德镇": "360200",
|
||||
"萍乡": "360300",
|
||||
"九江": "360400",
|
||||
"新余": "360500",
|
||||
"鹰潭": "360600",
|
||||
"赣州": "360700",
|
||||
"吉安": "360800",
|
||||
"宜春": "360900",
|
||||
"抚州": "361000",
|
||||
"上饶": "361100",
|
||||
"济南": "370100",
|
||||
"章丘": "370181",
|
||||
"青岛": "370200",
|
||||
"胶州": "370281",
|
||||
"即墨": "370282",
|
||||
"平度": "370283",
|
||||
"胶南": "370284",
|
||||
"莱西": "370285",
|
||||
"淄博": "370300",
|
||||
"枣庄": "370400",
|
||||
"东营": "370500",
|
||||
"烟台": "370600",
|
||||
"莱州": "370683",
|
||||
"蓬莱": "370684",
|
||||
"招远": "370685",
|
||||
"潍坊": "370700",
|
||||
"寿光": "370783",
|
||||
"济宁": "370800",
|
||||
"泰安": "370900",
|
||||
"威海": "371000",
|
||||
"文登": "371081",
|
||||
"荣成": "371082",
|
||||
"乳山": "371083",
|
||||
"日照": "371100",
|
||||
"莱芜": "371200",
|
||||
"临沂": "371300",
|
||||
"德州": "371400",
|
||||
"聊城": "371500",
|
||||
"滨州": "371600",
|
||||
"菏泽": "371700",
|
||||
"郑州": "410100",
|
||||
"开封": "410200",
|
||||
"洛阳": "410300",
|
||||
"平顶山": "410400",
|
||||
"安阳": "410500",
|
||||
"鹤壁": "410600",
|
||||
"新乡": "410700",
|
||||
"焦作": "410800",
|
||||
"濮阳": "410900",
|
||||
"许昌": "411000",
|
||||
"漯河": "411100",
|
||||
"三门峡": "411200",
|
||||
"南阳": "411300",
|
||||
"商丘": "411400",
|
||||
"信阳": "411500",
|
||||
"周口": "411600",
|
||||
"驻马店": "411700",
|
||||
"武汉": "420100",
|
||||
"黄石": "420200",
|
||||
"十堰": "420300",
|
||||
"宜昌": "420500",
|
||||
"襄阳": "420600",
|
||||
"鄂州": "420700",
|
||||
"荆门": "420800",
|
||||
"孝感": "420900",
|
||||
"荆州": "421000",
|
||||
"黄冈": "421100",
|
||||
"咸宁": "421200",
|
||||
"随州": "421300",
|
||||
"恩施州": "422800",
|
||||
"长沙": "430100",
|
||||
"株洲": "430200",
|
||||
"湘潭": "430300",
|
||||
"衡阳": "430400",
|
||||
"邵阳": "430500",
|
||||
"岳阳": "430600",
|
||||
"常德": "430700",
|
||||
"张家界": "430800",
|
||||
"益阳": "430900",
|
||||
"郴州": "431000",
|
||||
"永州": "431100",
|
||||
"怀化": "431200",
|
||||
"娄底": "431300",
|
||||
"湘西州": "433100",
|
||||
"广州": "440100",
|
||||
"韶关": "440200",
|
||||
"深圳": "440300",
|
||||
"珠海": "440400",
|
||||
"汕头": "440500",
|
||||
"佛山": "440600",
|
||||
"江门": "440700",
|
||||
"湛江": "440800",
|
||||
"茂名": "440900",
|
||||
"肇庆": "441200",
|
||||
"惠州": "441300",
|
||||
"梅州": "441400",
|
||||
"汕尾": "441500",
|
||||
"河源": "441600",
|
||||
"阳江": "441700",
|
||||
"清远": "441800",
|
||||
"东莞": "441900",
|
||||
"中山": "442000",
|
||||
"潮州": "445100",
|
||||
"揭阳": "445200",
|
||||
"云浮": "445300",
|
||||
"南宁": "450100",
|
||||
"柳州": "450200",
|
||||
"桂林": "450300",
|
||||
"梧州": "450400",
|
||||
"北海": "450500",
|
||||
"防城港": "450600",
|
||||
"钦州": "450700",
|
||||
"贵港": "450800",
|
||||
"玉林": "450900",
|
||||
"百色": "451000",
|
||||
"贺州": "451100",
|
||||
"河池": "451200",
|
||||
"来宾": "451300",
|
||||
"崇左": "451400",
|
||||
"海口": "460100",
|
||||
"三亚": "460200",
|
||||
"重庆": "500000",
|
||||
"成都": "510100",
|
||||
"自贡": "510300",
|
||||
"攀枝花": "510400",
|
||||
"泸州": "510500",
|
||||
"德阳": "510600",
|
||||
"绵阳": "510700",
|
||||
"广元": "510800",
|
||||
"遂宁": "510900",
|
||||
"内江": "511000",
|
||||
"乐山": "511100",
|
||||
"南充": "511300",
|
||||
"眉山": "511400",
|
||||
"宜宾": "511500",
|
||||
"广安": "511600",
|
||||
"达州": "511700",
|
||||
"雅安": "511800",
|
||||
"巴中": "511900",
|
||||
"资阳": "512000",
|
||||
"阿坝州": "513200",
|
||||
"甘孜州": "513300",
|
||||
"凉山州": "513400",
|
||||
"贵阳": "520100",
|
||||
"六盘水": "520200",
|
||||
"遵义": "520300",
|
||||
"安顺": "520400",
|
||||
"铜仁地区": "522200",
|
||||
"黔西南州": "522300",
|
||||
"毕节": "522400",
|
||||
"黔东南州": "522600",
|
||||
"黔南州": "522700",
|
||||
"昆明": "530100",
|
||||
"曲靖": "530300",
|
||||
"玉溪": "530400",
|
||||
"保山": "530500",
|
||||
"昭通": "530600",
|
||||
"丽江": "530700",
|
||||
"普洱": "530800",
|
||||
"临沧": "530900",
|
||||
"红河州": "532522",
|
||||
"文山州": "532621",
|
||||
"西双版纳州": "532801",
|
||||
"大理州": "532901",
|
||||
"德宏州": "533103",
|
||||
"怒江州": "533300",
|
||||
"迪庆州": "533421",
|
||||
"拉萨": "540100",
|
||||
"昌都": "542100",
|
||||
"山南": "542200",
|
||||
"日喀则": "542300",
|
||||
"那曲地区": "542400",
|
||||
"阿里地区": "542500",
|
||||
"林芝": "542600",
|
||||
"西安": "610100",
|
||||
"铜川": "610200",
|
||||
"宝鸡": "610300",
|
||||
"咸阳": "610400",
|
||||
"渭南": "610500",
|
||||
"延安": "610600",
|
||||
"汉中": "610700",
|
||||
"榆林": "610800",
|
||||
"安康": "610900",
|
||||
"商洛": "611000",
|
||||
"兰州": "620100",
|
||||
"嘉峪关": "620200",
|
||||
"金昌": "620300",
|
||||
"白银": "620400",
|
||||
"天水": "620500",
|
||||
"武威": "620600",
|
||||
"张掖": "620700",
|
||||
"平凉": "620800",
|
||||
"酒泉": "620900",
|
||||
"庆阳": "621000",
|
||||
"定西": "621100",
|
||||
"陇南": "621200",
|
||||
"临夏州": "622900",
|
||||
"甘南州": "623000",
|
||||
"西宁": "630100",
|
||||
"海东地区": "632100",
|
||||
"海北州": "632200",
|
||||
"黄南州": "632300",
|
||||
"海南州": "632500",
|
||||
"果洛州": "632600",
|
||||
"玉树州": "632700",
|
||||
"海西州": "632800",
|
||||
"银川": "640100",
|
||||
"石嘴山": "640200",
|
||||
"吴忠": "640300",
|
||||
"固原": "640400",
|
||||
"中卫": "640500",
|
||||
"乌鲁木齐": "650100",
|
||||
"克拉玛依": "650200",
|
||||
"吐鲁番地区": "652100",
|
||||
"哈密地区": "652200",
|
||||
"昌吉州": "652300",
|
||||
"博州": "652700",
|
||||
"库尔勒": "652800",
|
||||
"阿克苏地区": "652900",
|
||||
"克州": "653000",
|
||||
"喀什地区": "653100",
|
||||
"和田地区": "653200",
|
||||
"伊犁哈萨克州": "654000",
|
||||
"塔城地区": "654200",
|
||||
"阿勒泰地区": "654300",
|
||||
"石河子": "659001",
|
||||
"五家渠": "659004",
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
function Base64() {
|
||||
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", this.encode = function(a) {
|
||||
var c, d, e, f, g, h, i, b = "",
|
||||
j = 0;
|
||||
for (a = _utf8_encode(a); j < a.length;) c = a.charCodeAt(j++), d = a.charCodeAt(j++), e = a.charCodeAt(j++), f = c >> 2, g = (3 & c) << 4 | d >> 4, h = (15 & d) << 2 | e >> 6, i = 63 & e, isNaN(d) ? h = i = 64 : isNaN(e) && (i = 64), b = b + _keyStr.charAt(f) + _keyStr.charAt(g) + _keyStr.charAt(h) + _keyStr.charAt(i);
|
||||
return b
|
||||
}, this.decode = function(a) {
|
||||
var c, d, e, f, g, h, i, b = "",
|
||||
j = 0;
|
||||
for (a = a.replace(/[^A-Za-z0-9\+\/\=]/g, ""); j < a.length;) f = _keyStr.indexOf(a.charAt(j++)), g = _keyStr.indexOf(a.charAt(j++)), h = _keyStr.indexOf(a.charAt(j++)), i = _keyStr.indexOf(a.charAt(j++)), c = f << 2 | g >> 4, d = (15 & g) << 4 | h >> 2, e = (3 & h) << 6 | i, b += String.fromCharCode(c), 64 != h && (b += String.fromCharCode(d)), 64 != i && (b += String.fromCharCode(e));
|
||||
return b = _utf8_decode(b)
|
||||
}, _utf8_encode = function(a) {
|
||||
var b, c, d;
|
||||
for (a = a.replace(/\r\n/g, "\n"), b = "", c = 0; c < a.length; c++) d = a.charCodeAt(c), 128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(192 | d >> 6), b += String.fromCharCode(128 | 63 & d)) : (b += String.fromCharCode(224 | d >> 12), b += String.fromCharCode(128 | 63 & d >> 6), b += String.fromCharCode(128 | 63 & d));
|
||||
return b
|
||||
}, _utf8_decode = function(a) {
|
||||
for (var b = "", c = 0, d = c1 = c2 = 0; c < a.length;) d = a.charCodeAt(c), 128 > d ? (b += String.fromCharCode(d), c++) : d > 191 && 224 > d ? (c2 = a.charCodeAt(c + 1), b += String.fromCharCode((31 & d) << 6 | 63 & c2), c += 2) : (c2 = a.charCodeAt(c + 1), c3 = a.charCodeAt(c + 2), b += String.fromCharCode((15 & d) << 12 | (63 & c2) << 6 | 63 & c3), c += 3);
|
||||
return b
|
||||
}
|
||||
}
|
||||
|
||||
function hex_md5(a) {
|
||||
return binl2hex(core_md5(str2binl(a), a.length * chrsz))
|
||||
}
|
||||
|
||||
function b64_md5(a) {
|
||||
return binl2b64(core_md5(str2binl(a), a.length * chrsz))
|
||||
}
|
||||
|
||||
function str_md5(a) {
|
||||
return binl2str(core_md5(str2binl(a), a.length * chrsz))
|
||||
}
|
||||
|
||||
function hex_hmac_md5(a, b) {
|
||||
return binl2hex(core_hmac_md5(a, b))
|
||||
}
|
||||
|
||||
function b64_hmac_md5(a, b) {
|
||||
return binl2b64(core_hmac_md5(a, b))
|
||||
}
|
||||
|
||||
function str_hmac_md5(a, b) {
|
||||
return binl2str(core_hmac_md5(a, b))
|
||||
}
|
||||
|
||||
function md5_vm_test() {
|
||||
return "900150983cd24fb0d6963f7d28e17f72" == hex_md5("abc")
|
||||
}
|
||||
|
||||
function core_md5(a, b) {
|
||||
var c, d, e, f, g, h, i, j, k;
|
||||
for (a[b >> 5] |= 128 << b % 32, a[(b + 64 >>> 9 << 4) + 14] = b, c = 1732584193, d = -271733879, e = -1732584194, f = 271733878, g = 0; g < a.length; g += 16) h = c, i = d, j = e, k = f, c = md5_ff(c, d, e, f, a[g + 0], 7, -680876936), f = md5_ff(f, c, d, e, a[g + 1], 12, -389564586), e = md5_ff(e, f, c, d, a[g + 2], 17, 606105819), d = md5_ff(d, e, f, c, a[g + 3], 22, -1044525330), c = md5_ff(c, d, e, f, a[g + 4], 7, -176418897), f = md5_ff(f, c, d, e, a[g + 5], 12, 1200080426), e = md5_ff(e, f, c, d, a[g + 6], 17, -1473231341), d = md5_ff(d, e, f, c, a[g + 7], 22, -45705983), c = md5_ff(c, d, e, f, a[g + 8], 7, 1770035416), f = md5_ff(f, c, d, e, a[g + 9], 12, -1958414417), e = md5_ff(e, f, c, d, a[g + 10], 17, -42063), d = md5_ff(d, e, f, c, a[g + 11], 22, -1990404162), c = md5_ff(c, d, e, f, a[g + 12], 7, 1804603682), f = md5_ff(f, c, d, e, a[g + 13], 12, -40341101), e = md5_ff(e, f, c, d, a[g + 14], 17, -1502002290), d = md5_ff(d, e, f, c, a[g + 15], 22, 1236535329), c = md5_gg(c, d, e, f, a[g + 1], 5, -165796510), f = md5_gg(f, c, d, e, a[g + 6], 9, -1069501632), e = md5_gg(e, f, c, d, a[g + 11], 14, 643717713), d = md5_gg(d, e, f, c, a[g + 0], 20, -373897302), c = md5_gg(c, d, e, f, a[g + 5], 5, -701558691), f = md5_gg(f, c, d, e, a[g + 10], 9, 38016083), e = md5_gg(e, f, c, d, a[g + 15], 14, -660478335), d = md5_gg(d, e, f, c, a[g + 4], 20, -405537848), c = md5_gg(c, d, e, f, a[g + 9], 5, 568446438), f = md5_gg(f, c, d, e, a[g + 14], 9, -1019803690), e = md5_gg(e, f, c, d, a[g + 3], 14, -187363961), d = md5_gg(d, e, f, c, a[g + 8], 20, 1163531501), c = md5_gg(c, d, e, f, a[g + 13], 5, -1444681467), f = md5_gg(f, c, d, e, a[g + 2], 9, -51403784), e = md5_gg(e, f, c, d, a[g + 7], 14, 1735328473), d = md5_gg(d, e, f, c, a[g + 12], 20, -1926607734), c = md5_hh(c, d, e, f, a[g + 5], 4, -378558), f = md5_hh(f, c, d, e, a[g + 8], 11, -2022574463), e = md5_hh(e, f, c, d, a[g + 11], 16, 1839030562), d = md5_hh(d, e, f, c, a[g + 14], 23, -35309556), c = md5_hh(c, d, e, f, a[g + 1], 4, -1530992060), f = md5_hh(f, c, d, e, a[g + 4], 11, 1272893353), e = md5_hh(e, f, c, d, a[g + 7], 16, -155497632), d = md5_hh(d, e, f, c, a[g + 10], 23, -1094730640), c = md5_hh(c, d, e, f, a[g + 13], 4, 681279174), f = md5_hh(f, c, d, e, a[g + 0], 11, -358537222), e = md5_hh(e, f, c, d, a[g + 3], 16, -722521979), d = md5_hh(d, e, f, c, a[g + 6], 23, 76029189), c = md5_hh(c, d, e, f, a[g + 9], 4, -640364487), f = md5_hh(f, c, d, e, a[g + 12], 11, -421815835), e = md5_hh(e, f, c, d, a[g + 15], 16, 530742520), d = md5_hh(d, e, f, c, a[g + 2], 23, -995338651), c = md5_ii(c, d, e, f, a[g + 0], 6, -198630844), f = md5_ii(f, c, d, e, a[g + 7], 10, 1126891415), e = md5_ii(e, f, c, d, a[g + 14], 15, -1416354905), d = md5_ii(d, e, f, c, a[g + 5], 21, -57434055), c = md5_ii(c, d, e, f, a[g + 12], 6, 1700485571), f = md5_ii(f, c, d, e, a[g + 3], 10, -1894986606), e = md5_ii(e, f, c, d, a[g + 10], 15, -1051523), d = md5_ii(d, e, f, c, a[g + 1], 21, -2054922799), c = md5_ii(c, d, e, f, a[g + 8], 6, 1873313359), f = md5_ii(f, c, d, e, a[g + 15], 10, -30611744), e = md5_ii(e, f, c, d, a[g + 6], 15, -1560198380), d = md5_ii(d, e, f, c, a[g + 13], 21, 1309151649), c = md5_ii(c, d, e, f, a[g + 4], 6, -145523070), f = md5_ii(f, c, d, e, a[g + 11], 10, -1120210379), e = md5_ii(e, f, c, d, a[g + 2], 15, 718787259), d = md5_ii(d, e, f, c, a[g + 9], 21, -343485551), c = safe_add(c, h), d = safe_add(d, i), e = safe_add(e, j), f = safe_add(f, k);
|
||||
return Array(c, d, e, f)
|
||||
}
|
||||
|
||||
function md5_cmn(a, b, c, d, e, f) {
|
||||
return safe_add(bit_rol(safe_add(safe_add(b, a), safe_add(d, f)), e), c)
|
||||
}
|
||||
|
||||
function md5_ff(a, b, c, d, e, f, g) {
|
||||
return md5_cmn(b & c | ~b & d, a, b, e, f, g)
|
||||
}
|
||||
|
||||
function md5_gg(a, b, c, d, e, f, g) {
|
||||
return md5_cmn(b & d | c & ~d, a, b, e, f, g)
|
||||
}
|
||||
|
||||
function md5_hh(a, b, c, d, e, f, g) {
|
||||
return md5_cmn(b ^ c ^ d, a, b, e, f, g)
|
||||
}
|
||||
|
||||
function md5_ii(a, b, c, d, e, f, g) {
|
||||
return md5_cmn(c ^ (b | ~d), a, b, e, f, g)
|
||||
}
|
||||
|
||||
function core_hmac_md5(a, b) {
|
||||
var d, e, f, g, c = str2binl(a);
|
||||
for (c.length > 16 && (c = core_md5(c, a.length * chrsz)), d = Array(16), e = Array(16), f = 0; 16 > f; f++) d[f] = 909522486 ^ c[f], e[f] = 1549556828 ^ c[f];
|
||||
return g = core_md5(d.concat(str2binl(b)), 512 + b.length * chrsz), core_md5(e.concat(g), 640)
|
||||
}
|
||||
|
||||
function safe_add(a, b) {
|
||||
var c = (65535 & a) + (65535 & b),
|
||||
d = (a >> 16) + (b >> 16) + (c >> 16);
|
||||
return d << 16 | 65535 & c
|
||||
}
|
||||
|
||||
function bit_rol(a, b) {
|
||||
return a << b | a >>> 32 - b
|
||||
}
|
||||
|
||||
function str2binl(a) {
|
||||
var d, b = Array(),
|
||||
c = (1 << chrsz) - 1;
|
||||
for (d = 0; d < a.length * chrsz; d += chrsz) b[d >> 5] |= (a.charCodeAt(d / chrsz) & c) << d % 32;
|
||||
return b
|
||||
}
|
||||
|
||||
function binl2str(a) {
|
||||
var d, b = "",
|
||||
c = (1 << chrsz) - 1;
|
||||
for (d = 0; d < 32 * a.length; d += chrsz) b += String.fromCharCode(a[d >> 5] >>> d % 32 & c);
|
||||
return b
|
||||
}
|
||||
|
||||
function binl2hex(a) {
|
||||
var d, b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef",
|
||||
c = "";
|
||||
for (d = 0; d < 4 * a.length; d++) c += b.charAt(15 & a[d >> 2] >> 8 * (d % 4) + 4) + b.charAt(15 & a[d >> 2] >> 8 * (d % 4));
|
||||
return c
|
||||
}
|
||||
|
||||
function binl2b64(a) {
|
||||
var d, e, f, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
|
||||
c = "";
|
||||
for (d = 0; d < 4 * a.length; d += 3)
|
||||
for (e = (255 & a[d >> 2] >> 8 * (d % 4)) << 16 | (255 & a[d + 1 >> 2] >> 8 * ((d + 1) % 4)) << 8 | 255 & a[d + 2 >> 2] >> 8 * ((d + 2) % 4), f = 0; 4 > f; f++) c += 8 * d + 6 * f > 32 * a.length ? b64pad : b.charAt(63 & e >> 6 * (3 - f));
|
||||
return c
|
||||
}
|
||||
|
||||
function encode_param(a) {
|
||||
var b = new Base64;
|
||||
return b.encode(a)
|
||||
}
|
||||
|
||||
function encode_secret() {
|
||||
var b, a = appId;
|
||||
for (b = 0; b < arguments.length; b++) a += arguments[b];
|
||||
return a = a.replace(/\s/g, ""), hex_md5(a)
|
||||
}
|
||||
|
||||
function decode_result(a) {
|
||||
var b = new Base64;
|
||||
return b.decode(b.decode(b.decode(a)))
|
||||
}
|
||||
var hexcase = 0,
|
||||
b64pad = "",
|
||||
chrsz = 8,
|
||||
appId = "a01901d3caba1f362d69474674ce477f";
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/4/29 16:00
|
||||
Desc: 日出和日落数据
|
||||
https://www.timeanddate.com
|
||||
"""
|
||||
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def sunrise_city_list() -> list:
|
||||
"""
|
||||
查询日出与日落数据的城市列表
|
||||
https://www.timeanddate.com/astronomy/china
|
||||
:return: 所有可以获取的数据的城市列表
|
||||
:rtype: list
|
||||
"""
|
||||
url = "https://www.timeanddate.com/astronomy/china"
|
||||
r = requests.get(url)
|
||||
city_list = []
|
||||
china_city_one_df = pd.read_html(StringIO(r.text))[1]
|
||||
china_city_two_df = pd.read_html(StringIO(r.text))[2]
|
||||
city_list.extend([item.lower() for item in china_city_one_df.iloc[:, 0].tolist()])
|
||||
city_list.extend([item.lower() for item in china_city_one_df.iloc[:, 3].tolist()])
|
||||
city_list.extend([item.lower() for item in china_city_one_df.iloc[:, 6].tolist()])
|
||||
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 0].tolist()])
|
||||
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 1].tolist()])
|
||||
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 2].tolist()])
|
||||
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 3].tolist()])
|
||||
city_list.extend(
|
||||
[item.lower() for item in china_city_two_df.iloc[:, 4].dropna().tolist()]
|
||||
)
|
||||
return city_list
|
||||
|
||||
|
||||
def sunrise_daily(date: str = "20240428", city: str = "beijing") -> pd.DataFrame:
|
||||
"""
|
||||
每日日出日落数据
|
||||
https://www.timeanddate.com/astronomy/china/shaoxing
|
||||
:param date: 需要查询的日期, e.g., “20200428”
|
||||
:type date: str
|
||||
:param city: 需要查询的城市; 注意输入的格式, e.g., "北京", "上海"
|
||||
:type city: str
|
||||
:return: 返回指定日期指定地区的日出日落数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
import urllib3
|
||||
|
||||
urllib3.disable_warnings()
|
||||
if city in sunrise_city_list():
|
||||
year = date[:4]
|
||||
month = date[4:6]
|
||||
url = f"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}"
|
||||
r = requests.get(url, verify=False)
|
||||
table = pd.read_html(StringIO(r.text), header=2)[1]
|
||||
month_df = table.iloc[:-1,]
|
||||
day_df = month_df[
|
||||
month_df.iloc[:, 0].astype(str).str.zfill(2) == date[6:]
|
||||
].copy()
|
||||
day_df.index = pd.to_datetime([date] * len(day_df), format="%Y%m%d")
|
||||
day_df.reset_index(inplace=True)
|
||||
day_df.rename(columns={"index": "date"}, inplace=True)
|
||||
day_df["date"] = pd.to_datetime(day_df["date"]).dt.date
|
||||
return day_df
|
||||
else:
|
||||
raise "请输入正确的城市名称"
|
||||
|
||||
|
||||
def sunrise_monthly(date: str = "20240428", city: str = "beijing") -> pd.DataFrame:
|
||||
"""
|
||||
每个指定 date 所在月份的每日日出日落数据, 如果当前月份未到月底, 则以预测值填充
|
||||
https://www.timeanddate.com/astronomy/china/shaoxing
|
||||
:param date: 需要查询的日期, 这里用来指定 date 所在的月份; e.g., “20200428”
|
||||
:type date: str
|
||||
:param city: 需要查询的城市; 注意输入的格式, e.g., "北京", "上海"
|
||||
:type city: str
|
||||
:return: 指定 date 所在月份的每日日出日落数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
import urllib3
|
||||
|
||||
urllib3.disable_warnings()
|
||||
if city in sunrise_city_list():
|
||||
year = date[:4]
|
||||
month = date[4:6]
|
||||
url = f"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}"
|
||||
r = requests.get(url)
|
||||
table = pd.read_html(StringIO(r.text), header=2)[1]
|
||||
month_df = table.iloc[:-1,].copy()
|
||||
month_df.index = [date[:-2]] * len(month_df)
|
||||
month_df.reset_index(inplace=True)
|
||||
month_df.rename(
|
||||
columns={
|
||||
"index": "date",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
return month_df
|
||||
else:
|
||||
raise "请输入正确的城市名称"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sunrise_daily_df = sunrise_daily(date="20240428", city="beijing")
|
||||
print(sunrise_daily_df)
|
||||
|
||||
sunrise_monthly_df = sunrise_monthly(date="20240428", city="beijing")
|
||||
print(sunrise_monthly_df)
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/11/12 14:51
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/11/14 20:32
|
||||
Desc: 学术板块配置文件
|
||||
"""
|
||||
|
||||
# EPU
|
||||
epu_home_url = "http://www.policyuncertainty.com/index.html"
|
||||
|
||||
# FF-Factor
|
||||
ff_home_url = "http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html"
|
||||
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/1/20 22:00
|
||||
Desc: 经济政策不确定性指数
|
||||
https://www.policyuncertainty.com/index.html
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def article_epu_index(symbol: str = "China") -> pd.DataFrame:
|
||||
"""
|
||||
经济政策不确定性指数
|
||||
https://www.policyuncertainty.com/index.html
|
||||
:param symbol: 指定的国家名称, e.g. “China”
|
||||
:type symbol: str
|
||||
:return: 经济政策不确定性指数数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
# 切勿修改 http 否则会读取不到 csv 文件
|
||||
if symbol == "China New":
|
||||
symbol = "SCMP_China"
|
||||
if symbol == "China":
|
||||
symbol = "SCMP_China"
|
||||
if symbol == "USA":
|
||||
symbol = "US"
|
||||
if symbol == "Hong Kong":
|
||||
symbol = "HK"
|
||||
epu_df = pd.read_excel(
|
||||
io=f"http://www.policyuncertainty.com/media/{symbol}_EPU_Data_Annotated.xlsx",
|
||||
engine="openpyxl",
|
||||
)
|
||||
return epu_df
|
||||
if symbol in ["Germany", "France", "Italy"]: # 欧洲
|
||||
symbol = "Europe"
|
||||
if symbol == "South Korea":
|
||||
symbol = "Korea"
|
||||
if symbol == "Spain New":
|
||||
symbol = "Spain"
|
||||
if symbol in ["Ireland", "Chile", "Colombia", "Netherlands", "Singapore", "Sweden"]:
|
||||
epu_df = pd.read_excel(
|
||||
io=f"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.xlsx",
|
||||
engine="openpyxl",
|
||||
)
|
||||
return epu_df
|
||||
if symbol == "Greece":
|
||||
epu_df = pd.read_excel(
|
||||
io=f"http://www.policyuncertainty.com/media/FKT_{symbol}_Policy_Uncertainty_Data.xlsx",
|
||||
engine="openpyxl",
|
||||
)
|
||||
return epu_df
|
||||
url = f"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.csv"
|
||||
epu_df = pd.read_csv(url)
|
||||
return epu_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
article_epu_index_df = article_epu_index(symbol="China")
|
||||
print(article_epu_index_df)
|
||||
@@ -0,0 +1,166 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/1/20 22:30
|
||||
Desc: FF-data-library
|
||||
https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
|
||||
"""
|
||||
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
from akshare.article.cons import ff_home_url
|
||||
|
||||
|
||||
def article_ff_crr() -> pd.DataFrame:
|
||||
"""
|
||||
FF多因子模型
|
||||
https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
|
||||
:return: FF多因子模型单一表格
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
res = requests.get(ff_home_url)
|
||||
# first table
|
||||
list_index = (
|
||||
pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[2, :]
|
||||
.index.tolist()
|
||||
)
|
||||
list_0 = [
|
||||
item
|
||||
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[0, :]
|
||||
.iloc[0]
|
||||
.split(" ")
|
||||
if item != ""
|
||||
]
|
||||
list_1 = [
|
||||
item
|
||||
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[0, :]
|
||||
.iloc[1]
|
||||
.split(" ")
|
||||
if item != ""
|
||||
]
|
||||
list_2 = [
|
||||
item
|
||||
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[0, :]
|
||||
.iloc[2]
|
||||
.split(" ")
|
||||
if item != ""
|
||||
]
|
||||
list_0.insert(0, "-")
|
||||
list_1.insert(0, "-")
|
||||
list_2.insert(0, "-")
|
||||
temp_columns = (
|
||||
pd.read_html(StringIO(res.text), header=0)[4]
|
||||
.iloc[:, 0]
|
||||
.str.split(" ", expand=True)
|
||||
.T[0]
|
||||
.dropna()
|
||||
.tolist()
|
||||
)
|
||||
table_one = pd.DataFrame(
|
||||
[list_0, list_1, list_2], index=list_index, columns=temp_columns
|
||||
).T
|
||||
|
||||
# second table
|
||||
list_index = (
|
||||
pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[1, :]
|
||||
.index.tolist()
|
||||
)
|
||||
list_0 = [
|
||||
item
|
||||
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[1, :]
|
||||
.iloc[0]
|
||||
.split(" ")
|
||||
if item != ""
|
||||
]
|
||||
list_1 = [
|
||||
item
|
||||
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[1, :]
|
||||
.iloc[1]
|
||||
.split(" ")
|
||||
if item != ""
|
||||
]
|
||||
list_2 = [
|
||||
item
|
||||
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
||||
.iloc[1, :]
|
||||
.iloc[2]
|
||||
.split(" ")
|
||||
if item != ""
|
||||
]
|
||||
list_0.insert(0, "-")
|
||||
list_1.insert(0, "-")
|
||||
list_2.insert(0, "-")
|
||||
temp_columns = (
|
||||
pd.read_html(StringIO(res.text), header=0)[4]
|
||||
.iloc[:, 0]
|
||||
.str.split(" ", expand=True)
|
||||
.T[1]
|
||||
.dropna()
|
||||
.tolist()
|
||||
)
|
||||
table_two = pd.DataFrame(
|
||||
[list_0, list_1, list_2], index=list_index, columns=temp_columns
|
||||
).T
|
||||
|
||||
# third table
|
||||
df = pd.read_html(StringIO(res.text), header=0, index_col=0)[4].iloc[2, :]
|
||||
name_list = (
|
||||
pd.read_html(StringIO(res.text), header=0)[4]
|
||||
.iloc[:, 0]
|
||||
.str.split(r" ", expand=True)
|
||||
.iloc[2, :]
|
||||
.tolist()
|
||||
)
|
||||
value_list_0 = df.iloc[0].split(" ")
|
||||
value_list_0.insert(0, "-")
|
||||
value_list_0.insert(1, "-")
|
||||
value_list_0.insert(8, "-")
|
||||
value_list_0.insert(15, "-")
|
||||
|
||||
value_list_1 = df.iloc[1].split(" ")
|
||||
value_list_1.insert(0, "-")
|
||||
value_list_1.insert(1, "-")
|
||||
value_list_1.insert(8, "-")
|
||||
value_list_1.insert(15, "-")
|
||||
|
||||
value_list_2 = df.iloc[2].split(" ")
|
||||
value_list_2.insert(0, "-")
|
||||
value_list_2.insert(1, "-")
|
||||
value_list_2.insert(8, "-")
|
||||
value_list_2.insert(15, "-")
|
||||
|
||||
name_list.remove("Small Growth Big Value")
|
||||
name_list.insert(5, "Small Growth")
|
||||
name_list.insert(6, "Big Value")
|
||||
temp_list = [item for item in name_list if "Portfolios" not in item]
|
||||
temp_list.insert(0, "Fama/French Research Portfolios")
|
||||
temp_list.insert(1, "Size and Book-to-Market Portfolios")
|
||||
temp_list.insert(8, "Size and Operating Profitability Portfolios")
|
||||
temp_list.insert(15, "Size and Investment Portfolios")
|
||||
temp_df = pd.DataFrame([temp_list, value_list_0, value_list_1, value_list_2]).T
|
||||
temp_df.index = temp_df.iloc[:, 0]
|
||||
temp_df = temp_df.iloc[:, 1:]
|
||||
# concat
|
||||
all_df = pd.DataFrame()
|
||||
all_df = pd.concat([all_df, table_one])
|
||||
all_df = pd.concat([all_df, table_two])
|
||||
temp_df.columns = table_two.columns
|
||||
all_df = pd.concat([all_df, temp_df])
|
||||
all_df.reset_index(inplace=True)
|
||||
all_df.rename(columns={"index": "item"}, inplace=True)
|
||||
return all_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
article_ff_crr_df = article_ff_crr()
|
||||
print(article_ff_crr_df)
|
||||
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2020/4/10 19:58
|
||||
Desc: Economic Research from Federal Reserve Bank of St. Louis
|
||||
https://research.stlouisfed.org/econ/mccracken/fred-databases/
|
||||
FRED-MD and FRED-QD are large macroeconomic databases designed for the empirical analysis of “big data.” The datasets of monthly and quarterly observations mimic the coverage of datasets already used in the literature, but they add three appealing features. They are updated in real-time through the FRED database. They are publicly accessible, facilitating the replication of empirical work. And they relieve the researcher of the task of incorporating data changes and revisions (a task accomplished by the data desk at the Federal Reserve Bank of St. Louis).
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def fred_md(date: str = "2020-01") -> pd.DataFrame:
|
||||
"""
|
||||
The accompanying paper shows that factors extracted from the FRED-MD dataset share the same predictive content as those based on the various vintages of the so-called Stock-Watson data. In addition, it suggests that diffusion indexes constructed as the partial sum of the factor estimates can potentially be useful for the study of business cycle chronology.
|
||||
:param date: e.g., "2020-03"; from "2015-01" to now
|
||||
:type date: str
|
||||
:return: Monthly Data
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = (
|
||||
f"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/monthly/{date}.csv"
|
||||
)
|
||||
temp_df = pd.read_csv(url)
|
||||
return temp_df
|
||||
|
||||
|
||||
def fred_qd(date: str = "2020-01") -> pd.DataFrame:
|
||||
"""
|
||||
FRED-QD is a quarterly frequency companion to FRED-MD. It is designed to emulate the dataset used in "Disentangling the Channels of the 2007-2009 Recession" by Stock and Watson (2012, NBER WP No. 18094) but also contains several additional series. Comments or suggestions are welcome.
|
||||
:param date: e.g., "2020-03"; from "2015-01" to now
|
||||
:type date: str
|
||||
:return: Quarterly Data
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = f"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/quarterly/{date}.csv"
|
||||
temp_df = pd.read_csv(url)
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
fred_md_df = fred_md(date="2023-03")
|
||||
print(fred_md_df)
|
||||
|
||||
fred_qd_df = fred_qd(date="2023-03")
|
||||
print(fred_qd_df)
|
||||
@@ -0,0 +1,191 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/1/20 20:51
|
||||
Desc: 修大成主页-Risk Lab-Realized Volatility; Oxford-Man Institute of Quantitative Finance Realized Library
|
||||
"""
|
||||
|
||||
import json
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
import urllib3
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
|
||||
def article_oman_rv(symbol: str = "FTSE", index: str = "rk_th2") -> pd.DataFrame:
|
||||
"""
|
||||
Oxford-Man Institute of Quantitative Finance Realized Library 的数据
|
||||
:param symbol: str ['AEX', 'AORD', 'BFX', 'BSESN', 'BVLG', 'BVSP', 'DJI', 'FCHI', 'FTMIB', 'FTSE', 'GDAXI', 'GSPTSE', 'HSI', 'IBEX', 'IXIC', 'KS11', 'KSE', 'MXX', 'N225', 'NSEI', 'OMXC20', 'OMXHPI', 'OMXSPI', 'OSEAX', 'RUT', 'SMSI', 'SPX', 'SSEC', 'SSMI', 'STI', 'STOXX50E']
|
||||
:param index: str 指标 ['medrv', 'rk_twoscale', 'bv', 'rv10', 'rv5', 'rk_th2', 'rv10_ss', 'rsv', 'rv5_ss', 'bv_ss', 'rk_parzen', 'rsv_ss']
|
||||
:return: pandas.DataFrame
|
||||
|
||||
The Oxford-Man Institute's "realised library" contains daily non-parametric measures of how volatility financial assets or indexes were in the past. Each day's volatility measure depends solely on financial data from that day. They are driven by the use of the latest innovations in econometric modelling and theory to design them, while we draw our high frequency data from the Thomson Reuters DataScope Tick History database. Realised measures are not volatility forecasts. However, some researchers use these measures as an input into forecasting models. The aim of this line of research is to make financial markets more transparent by exposing how volatility changes through time.
|
||||
|
||||
This Library is used as the basis of some of our own research, which effects its scope, and is made available here to encourage the more widespread exploitation of these methods. It is given 'as is' and solely for informational purposes, please read the disclaimer.
|
||||
|
||||
The volatility data can be visually explored. We make the complete up-to-date dataset available for download. Lists of assets covered and realized measures available are also available.
|
||||
| Symbol | Name | Earliest Available | Latest Available |
|
||||
|-----------|-------------------------------------------|--------------------|-------------------|
|
||||
| .AEX | AEX index | January 03, 2000 | November 28, 2019 |
|
||||
| .AORD | All Ordinaries | January 04, 2000 | November 28, 2019 |
|
||||
| .BFX | Bell 20 Index | January 03, 2000 | November 28, 2019 |
|
||||
| .BSESN | S&P BSE Sensex | January 03, 2000 | November 28, 2019 |
|
||||
| .BVLG | PSI All-Share Index | October 15, 2012 | November 28, 2019 |
|
||||
| .BVSP | BVSP BOVESPA Index | January 03, 2000 | November 28, 2019 |
|
||||
| .DJI | Dow Jones Industrial Average | January 03, 2000 | November 27, 2019 |
|
||||
| .FCHI | CAC 40 | January 03, 2000 | November 28, 2019 |
|
||||
| .FTMIB | FTSE MIB | June 01, 2009 | November 28, 2019 |
|
||||
| .FTSE | FTSE 100 | January 04, 2000 | November 28, 2019 |
|
||||
| .GDAXI | DAX | January 03, 2000 | November 28, 2019 |
|
||||
| .GSPTSE | S&P/TSX Composite index | May 02, 2002 | November 28, 2019 |
|
||||
| .HSI | HANG SENG Index | January 03, 2000 | November 28, 2019 |
|
||||
| .IBEX | IBEX 35 Index | January 03, 2000 | November 28, 2019 |
|
||||
| .IXIC | Nasdaq 100 | January 03, 2000 | November 27, 2019 |
|
||||
| .KS11 | Korea Composite Stock Price Index (KOSPI) | January 04, 2000 | November 28, 2019 |
|
||||
| .KSE | Karachi SE 100 Index | January 03, 2000 | November 28, 2019 |
|
||||
| .MXX | IPC Mexico | January 03, 2000 | November 28, 2019 |
|
||||
| .N225 | Nikkei 225 | February 02, 2000 | November 28, 2019 |
|
||||
| .NSEI | NIFTY 50 | January 03, 2000 | November 28, 2019 |
|
||||
| .OMXC20 | OMX Copenhagen 20 Index | October 03, 2005 | November 28, 2019 |
|
||||
| .OMXHPI | OMX Helsinki All Share Index | October 03, 2005 | November 28, 2019 |
|
||||
| .OMXSPI | OMX Stockholm All Share Index | October 03, 2005 | November 28, 2019 |
|
||||
| .OSEAX | Oslo Exchange All-share Index | September 03, 2001 | November 28, 2019 |
|
||||
| .RUT | Russel 2000 | January 03, 2000 | November 27, 2019 |
|
||||
| .SMSI | Madrid General Index | July 04, 2005 | November 28, 2019 |
|
||||
| .SPX | S&P 500 Index | January 03, 2000 | November 27, 2019 |
|
||||
| .SSEC | Shanghai Composite Index | January 04, 2000 | November 28, 2019 |
|
||||
| .SSMI | Swiss Stock Market Index | January 04, 2000 | November 28, 2019 |
|
||||
| .STI | Straits Times Index | January 03, 2000 | November 28, 2019 |
|
||||
| .STOXX50E | EURO STOXX 50 | January 03, 2000 | November 28, 2019 |
|
||||
"""
|
||||
url = "https://realized.oxford-man.ox.ac.uk/theme/js/visualization-data.js?20191111113154"
|
||||
res = requests.get(url)
|
||||
soup = BeautifulSoup(res.text, "lxml")
|
||||
soup_text = soup.find("p").get_text()
|
||||
data_json = json.loads(soup_text[soup_text.find("{") : soup_text.rfind("};") + 1])
|
||||
date_list = data_json[f".{symbol}"]["dates"]
|
||||
temp_df = pd.DataFrame([date_list, data_json[f".{symbol}"][index]["data"]]).T
|
||||
temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit="ms")
|
||||
temp_df = temp_df.iloc[:, 1]
|
||||
temp_df.index.name = "date"
|
||||
temp_df.name = f"{symbol}-{index}"
|
||||
return temp_df
|
||||
|
||||
|
||||
def article_oman_rv_short(symbol: str = "FTSE") -> pd.DataFrame:
|
||||
"""
|
||||
Oxford-Man Institute of Quantitative Finance Realized Library 的数据
|
||||
:param symbol: str FTSE: FTSE 100, GDAXI: DAX, RUT: Russel 2000, SPX: S&P 500 Index, STOXX50E: EURO STOXX 50, SSEC: Shanghai Composite Index, N225: Nikkei 225
|
||||
:return: pandas.DataFrame
|
||||
|
||||
The Oxford-Man Institute's "realised library" contains daily non-parametric measures of how volatility financial assets or indexes were in the past. Each day's volatility measure depends solely on financial data from that day. They are driven by the use of the latest innovations in econometric modelling and theory to design them, while we draw our high frequency data from the Thomson Reuters DataScope Tick History database. Realised measures are not volatility forecasts. However, some researchers use these measures as an input into forecasting models. The aim of this line of research is to make financial markets more transparent by exposing how volatility changes through time.
|
||||
|
||||
This Library is used as the basis of some of our own research, which effects its scope, and is made available here to encourage the more widespread exploitation of these methods. It is given 'as is' and solely for informational purposes, please read the disclaimer.
|
||||
|
||||
The volatility data can be visually explored. We make the complete up-to-date dataset available for download. Lists of assets covered and realized measures available are also available.
|
||||
"""
|
||||
url = "https://realized.oxford-man.ox.ac.uk/theme/js/front-page-chart.js"
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Host": "realized.oxford-man.ox.ac.uk",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "https://realized.oxford-man.ox.ac.uk/?from=groupmessage&isappinstalled=0",
|
||||
"Sec-Fetch-Mode": "no-cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
|
||||
}
|
||||
|
||||
res = requests.get(url, headers=headers, verify=False)
|
||||
soup = BeautifulSoup(res.text, "lxml")
|
||||
soup_text = soup.find("p").get_text()
|
||||
data_json = json.loads(soup_text[soup_text.find("{") : soup_text.rfind("}") + 1])
|
||||
temp_df = pd.DataFrame(data_json[f".{symbol}"]["data"])
|
||||
temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit="ms")
|
||||
temp_df = temp_df.iloc[:, 1]
|
||||
temp_df.index.name = "date"
|
||||
temp_df.name = f"{symbol}"
|
||||
return temp_df
|
||||
|
||||
|
||||
def article_rlab_rv(symbol: str = "39693") -> pd.DataFrame:
|
||||
"""
|
||||
修大成主页-Risk Lab-Realized Volatility
|
||||
:param symbol: str 股票代码
|
||||
:return: pandas.DataFrame
|
||||
1996-01-02 0.000000
|
||||
1996-01-04 0.000000
|
||||
1996-01-05 0.000000
|
||||
1996-01-09 0.000000
|
||||
1996-01-10 0.000000
|
||||
...
|
||||
2019-11-04 0.175107
|
||||
2019-11-05 0.185112
|
||||
2019-11-06 0.210373
|
||||
2019-11-07 0.240808
|
||||
2019-11-08 0.199549
|
||||
Name: RV, Length: 5810, dtype: float64
|
||||
|
||||
Website
|
||||
https://dachxiu.chicagobooth.edu/
|
||||
|
||||
Objective
|
||||
We provide up-to-date daily annualized realized volatilities for individual stocks, ETFs, and future contracts, which are estimated from high-frequency data. We are in the process of incorporating equities from global markets.
|
||||
|
||||
Data
|
||||
We collect trades at their highest frequencies available (up to every millisecond for US equities after 2007), and clean them using the prevalent national best bid and offer (NBBO) that are available up to every second. The mid-quotes are calculated based on the NBBOs, so their highest sampling frequencies are also up to every second.
|
||||
|
||||
Methodology
|
||||
We provide quasi-maximum likelihood estimates of volatility (QMLE) based on moving-average models MA(q), using non-zero returns of transaction prices (or mid-quotes if available) sampled up to their highest frequency available, for days with at least 12 observations. We select the best model (q) using Akaike Information Criterion (AIC). For comparison, we report realized volatility (RV) estimates using 5-minute and 15-minute subsampled returns.
|
||||
|
||||
References
|
||||
1. “When Moving-Average Models Meet High-Frequency Data: Uniform Inference on Volatility”, by Rui Da and Dacheng Xiu. 2017.
|
||||
2. “Quasi-Maximum Likelihood Estimation of Volatility with High Frequency Data”, by Dacheng Xiu. Journal of Econometrics, 159 (2010), 235-250.
|
||||
3. “How Often to Sample A Continuous-time Process in the Presence of Market Microstructure Noise”, by Yacine Aït-Sahalia, Per Mykland, and Lan Zhang. Review of Financial Studies, 18 (2005), 351–416.
|
||||
4. “The Distribution of Exchange Rate Volatility”, by Torben Andersen, Tim Bollerslev, Francis X. Diebold, and Paul Labys. Journal of the American Statistical Association, 96 (2001), 42-55.
|
||||
5. “Econometric Analysis of Realized Volatility and Its Use in Estimating Stochastic Volatility Models”, by Ole E Barndorff‐Nielsen and Neil Shephard. Journal of the Royal Statistical Society: Series B, 64 (2002), 253-280.
|
||||
"""
|
||||
print("由于服务器在国外, 请稍后, 如果访问失败, 请使用代理工具")
|
||||
url = "https://dachxiu.chicagobooth.edu/data.php"
|
||||
payload = {"ticker": symbol}
|
||||
res = requests.get(url, params=payload, verify=False)
|
||||
soup = BeautifulSoup(res.text, "lxml")
|
||||
title_fore = (
|
||||
pd.DataFrame(soup.find("p").get_text().split(symbol)).iloc[0, 0].strip()
|
||||
)
|
||||
title_list = (
|
||||
pd.DataFrame(soup.find("p").get_text().split(symbol))
|
||||
.iloc[1, 0]
|
||||
.strip()
|
||||
.split("\n")
|
||||
)
|
||||
title_list.insert(0, title_fore)
|
||||
temp_df = pd.DataFrame(soup.find("p").get_text().split(symbol)).iloc[2:, :]
|
||||
temp_df = temp_df.iloc[:, 0].str.split(" ", expand=True)
|
||||
temp_df = temp_df.iloc[:, 1:]
|
||||
temp_df.iloc[:, -1] = temp_df.iloc[:, -1].str.replace(r"\n", "")
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.index = pd.to_datetime(temp_df.iloc[:, 1], format="%Y%m%d", errors="coerce")
|
||||
temp_df = temp_df.iloc[:, 1:]
|
||||
data_se = temp_df.iloc[:, 1]
|
||||
data_se.name = "RV"
|
||||
temp_df = data_se.astype("float", errors="ignore")
|
||||
temp_df.index.name = "date"
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
article_rlab_rv_df = article_rlab_rv(symbol="39693")
|
||||
print(article_rlab_rv_df)
|
||||
|
||||
article_oman_rv_short_df = article_oman_rv_short(symbol="FTSE")
|
||||
print(article_oman_rv_short_df)
|
||||
|
||||
article_oman_rv_df = article_oman_rv(symbol="FTSE", index="rk_th2")
|
||||
print(article_oman_rv_df)
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/11/7 14:06
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,189 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/2/4 23:00
|
||||
Desc: 中国银行保险监督管理委员会-首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表
|
||||
https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A#2
|
||||
提取 具体页面 html 页面的 json 接口
|
||||
https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId=881446.json
|
||||
2020 新接口
|
||||
"""
|
||||
|
||||
import warnings
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from tqdm import tqdm
|
||||
|
||||
from akshare.bank.cons import cbirc_headers_without_cookie_2020
|
||||
|
||||
|
||||
def bank_fjcf_total_num(item: str = "分局本级") -> int:
|
||||
"""
|
||||
首页-政务信息-行政处罚-银保监分局本级 总页数
|
||||
https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
|
||||
:param item: choice of {"机关", "本级", "分局本级"}
|
||||
:type item: str
|
||||
:return: 总页数
|
||||
:rtype: int
|
||||
"""
|
||||
item_id_list = {
|
||||
"机关": "4113",
|
||||
"本级": "4114",
|
||||
"分局本级": "4115",
|
||||
}
|
||||
cbirc_headers = cbirc_headers_without_cookie_2020.copy()
|
||||
main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
|
||||
params = {
|
||||
"itemId": item_id_list[item],
|
||||
"pageSize": "18",
|
||||
"pageIndex": "1",
|
||||
}
|
||||
res = requests.get(main_url, params=params, headers=cbirc_headers)
|
||||
return int(res.json()["data"]["total"])
|
||||
|
||||
|
||||
def bank_fjcf_total_page(item: str = "分局本级", begin: int = 1) -> int:
|
||||
"""
|
||||
获取首页-政务信息-行政处罚-银保监分局本级的总页数
|
||||
https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
|
||||
:param item: choice of {"机关", "本级", "分局本级"}
|
||||
:type item: str
|
||||
:param begin: 开始页数
|
||||
:type begin: str
|
||||
:return: 总页数
|
||||
:rtype: int
|
||||
"""
|
||||
item_id_list = {
|
||||
"机关": "4113",
|
||||
"本级": "4114",
|
||||
"分局本级": "4115",
|
||||
}
|
||||
cbirc_headers = cbirc_headers_without_cookie_2020.copy()
|
||||
main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
|
||||
params = {
|
||||
"itemId": item_id_list[item],
|
||||
"pageSize": "18",
|
||||
"pageIndex": str(begin),
|
||||
}
|
||||
res = requests.get(main_url, params=params, headers=cbirc_headers)
|
||||
if res.json()["data"]["total"] / 18 > int(res.json()["data"]["total"] / 18):
|
||||
total_page = int(res.json()["data"]["total"] / 18) + 1
|
||||
return total_page
|
||||
|
||||
|
||||
def bank_fjcf_page_url(
|
||||
page: int = 5, item: str = "分局本级", begin: int = 1
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
获取 首页-政务信息-行政处罚-银保监分局本级-每一页的 json 数据
|
||||
:param page: 需要获取前 page 页的内容, 总页数请通过 ak.bank_fjcf_total_page() 获取
|
||||
:type page: int
|
||||
:param item: choice of {"机关", "本级", "分局本级"}
|
||||
:type item: str
|
||||
:param begin: 开始页数
|
||||
:type begin: str
|
||||
:return: 需要的字段
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
item_id_list = {
|
||||
"机关": "4113",
|
||||
"本级": "4114",
|
||||
"分局本级": "4115",
|
||||
}
|
||||
cbirc_headers = cbirc_headers_without_cookie_2020.copy()
|
||||
main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
|
||||
temp_df = pd.DataFrame()
|
||||
for i_page in tqdm(range(begin, page + begin), leave=False):
|
||||
params = {
|
||||
"itemId": item_id_list[item],
|
||||
"pageSize": "18",
|
||||
"pageIndex": str(i_page),
|
||||
}
|
||||
res = requests.get(main_url, params=params, headers=cbirc_headers)
|
||||
temp_df = pd.concat([temp_df, pd.DataFrame(res.json()["data"]["rows"])])
|
||||
return temp_df[
|
||||
["docId", "docSubtitle", "publishDate", "docFileUrl", "docTitle", "generaltype"]
|
||||
]
|
||||
|
||||
|
||||
def bank_fjcf_table_detail(
|
||||
page: int = 5, item: str = "分局本级", begin: int = 1
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
获取 首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表 数据
|
||||
:param page: 需要获取前 page 页的内容, 总页数请通过 ak.bank_fjcf_total_page() 获取
|
||||
:type page: int
|
||||
:param item: choice of {"机关", "本级", "分局本级"}
|
||||
:type item: str
|
||||
:param begin: 开始页面
|
||||
:type begin: int
|
||||
:return: 返回所有行政处罚信息公开表的集合, 按第一页到最后一页的顺序排列
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
id_list = bank_fjcf_page_url(page=page, item=item, begin=begin)["docId"]
|
||||
big_df = pd.DataFrame()
|
||||
for item in id_list:
|
||||
url = f"https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId={item}.json"
|
||||
res = requests.get(url)
|
||||
try:
|
||||
table_list = pd.read_html(StringIO(res.json()["data"]["docClob"]))[0]
|
||||
if table_list.shape[1] == 2:
|
||||
table_list = table_list.iloc[:, 1].values.tolist()
|
||||
else:
|
||||
table_list = table_list.iloc[:, 3:].values.tolist()
|
||||
# 部分旧表缺少字段,所以填充
|
||||
if len(table_list) == 7:
|
||||
table_list.insert(2, pd.NA)
|
||||
table_list.insert(3, pd.NA)
|
||||
table_list.insert(4, pd.NA)
|
||||
elif len(table_list) == 8:
|
||||
table_list.insert(1, pd.NA)
|
||||
table_list.insert(2, pd.NA)
|
||||
elif len(table_list) == 9:
|
||||
table_list.insert(2, pd.NA)
|
||||
elif len(table_list) == 11:
|
||||
table_list = table_list[2:]
|
||||
table_list.insert(2, pd.NA)
|
||||
else:
|
||||
print(
|
||||
f"{item} 异常,请通过 https://www.nfra.gov.cn/cn/view/pages/ItemDetail.html?docId={item} 查看"
|
||||
)
|
||||
continue
|
||||
|
||||
# 部分会变成嵌套列表, 这里还原
|
||||
table_list = [
|
||||
item[0] if isinstance(item, list) else item for item in table_list
|
||||
]
|
||||
table_list.append(str(item))
|
||||
table_list.append(res.json()["data"]["publishDate"])
|
||||
table_df = pd.DataFrame(table_list)
|
||||
table_df.columns = ["内容"]
|
||||
big_df = pd.concat(objs=[big_df, table_df.T], ignore_index=True)
|
||||
# 解决有些页面缺少字段的问题, 都放到 try 里面
|
||||
except: # noqa: E722
|
||||
warnings.warn(f"{item} 不是表格型数据,将跳过采集")
|
||||
continue
|
||||
if big_df.empty:
|
||||
return pd.DataFrame()
|
||||
big_df.columns = [
|
||||
"行政处罚决定书文号",
|
||||
"姓名",
|
||||
"单位", # 20200108 新增
|
||||
"单位名称",
|
||||
"主要负责人姓名",
|
||||
"主要违法违规事实(案由)",
|
||||
"行政处罚依据",
|
||||
"行政处罚决定",
|
||||
"作出处罚决定的机关名称",
|
||||
"作出处罚决定的日期",
|
||||
"处罚ID",
|
||||
"处罚公布日期",
|
||||
]
|
||||
return big_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bank_fjcf_table_detail_df = bank_fjcf_table_detail(page=1, item="机关", begin=1)
|
||||
print(bank_fjcf_table_detail_df)
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2023/4/3 21:06
|
||||
Desc: 银保监会配置文件
|
||||
"""
|
||||
|
||||
cbirc_headers_without_cookie_2020 = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Host": "www.nfra.gov.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "http://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
|
||||
}
|
||||
|
||||
cbirc_headers_without_cookie_2019 = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Host": "www.nfra.gov.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "http://www.nfra.gov.cn/cn/list/9103/910305/ybjjcf/1.html",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/9/30 13:58
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,234 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/4/5 17:30
|
||||
Desc: 东方财富网-行情中心-债券市场-质押式回购
|
||||
https://quote.eastmoney.com/center/gridlist.html#bond_sz_buyback
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
def bond_sh_buy_back_em() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-行情中心-债券市场-上证质押式回购
|
||||
https://quote.eastmoney.com/center/gridlist.html#bond_sh_buyback
|
||||
:return: 上证质押式回购
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
||||
params = {
|
||||
"np": "1",
|
||||
"fltt": "1",
|
||||
"invt": "2",
|
||||
"fs": "m:1+b:MK0356",
|
||||
"fields": "f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16,f5,f6",
|
||||
"fid": "f6",
|
||||
"pn": "1",
|
||||
"pz": "20",
|
||||
"po": "1",
|
||||
"dect": "1",
|
||||
"wbp2u": "|0|0|0|web",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df["index"] = temp_df["index"] + 1
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"index": "序号",
|
||||
"f2": "最新价",
|
||||
"f3": "涨跌幅",
|
||||
"f4": "涨跌额",
|
||||
"f5": "成交量",
|
||||
"f6": "成交额",
|
||||
"f12": "代码",
|
||||
"f14": "名称",
|
||||
"f15": "最高",
|
||||
"f16": "最低",
|
||||
"f17": "今开",
|
||||
"f18": "昨收",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"序号",
|
||||
"代码",
|
||||
"名称",
|
||||
"最新价",
|
||||
"涨跌额",
|
||||
"涨跌幅",
|
||||
"今开",
|
||||
"最高",
|
||||
"最低",
|
||||
"昨收",
|
||||
"成交量",
|
||||
"成交额",
|
||||
]
|
||||
]
|
||||
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce") / 1000
|
||||
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce") / 100
|
||||
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce") / 1000
|
||||
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce") / 1000
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce") / 1000
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce") / 1000
|
||||
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce") / 1000
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_sz_buy_back_em() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-行情中心-债券市场-深证质押式回购
|
||||
https://quote.eastmoney.com/center/gridlist.html#bond_sz_buyback
|
||||
:return: 深证质押式回购
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
||||
params = {
|
||||
"np": "1",
|
||||
"fltt": "1",
|
||||
"invt": "2",
|
||||
"fs": "m:0+b:MK0356",
|
||||
"fields": "f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16,f5,f6",
|
||||
"fid": "f6",
|
||||
"pn": "1",
|
||||
"pz": "20",
|
||||
"po": "1",
|
||||
"dect": "1",
|
||||
"wbp2u": "|0|0|0|web",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df["index"] = temp_df["index"] + 1
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"index": "序号",
|
||||
"f2": "最新价",
|
||||
"f3": "涨跌幅",
|
||||
"f4": "涨跌额",
|
||||
"f5": "成交量",
|
||||
"f6": "成交额",
|
||||
"f12": "代码",
|
||||
"f14": "名称",
|
||||
"f15": "最高",
|
||||
"f16": "最低",
|
||||
"f17": "今开",
|
||||
"f18": "昨收",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"序号",
|
||||
"代码",
|
||||
"名称",
|
||||
"最新价",
|
||||
"涨跌额",
|
||||
"涨跌幅",
|
||||
"今开",
|
||||
"最高",
|
||||
"最低",
|
||||
"昨收",
|
||||
"成交量",
|
||||
"成交额",
|
||||
]
|
||||
]
|
||||
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce") / 1000
|
||||
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce") / 100
|
||||
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce") / 1000
|
||||
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce") / 1000
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce") / 1000
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce") / 1000
|
||||
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce") / 1000
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_buy_back_hist_em(symbol: str = "204001"):
|
||||
"""
|
||||
东方财富网-行情中心-债券市场-质押式回购-历史数据
|
||||
https://quote.eastmoney.com/center/gridlist.html#bond_sh_buyback
|
||||
:param symbol: 质押式回购代码
|
||||
:type symbol: str
|
||||
:return: 历史数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
if symbol.startswith("1"):
|
||||
market_id = "0"
|
||||
else:
|
||||
market_id = "1"
|
||||
url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
|
||||
params = {
|
||||
"secid": f"{market_id}.{symbol}",
|
||||
"klt": "101",
|
||||
"fqt": "1",
|
||||
"lmt": "10000",
|
||||
"end": "20500000",
|
||||
"iscca": "1",
|
||||
"fields1": "f1,f2,f3,f4,f5,f6,f7,f8",
|
||||
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",
|
||||
"forcect": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
|
||||
temp_df.columns = [
|
||||
"日期",
|
||||
"开盘",
|
||||
"收盘",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"日期",
|
||||
"开盘",
|
||||
"收盘",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
]
|
||||
]
|
||||
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
||||
temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
|
||||
temp_df["收盘"] = pd.to_numeric(temp_df["收盘"], errors="coerce")
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_sh_buy_back_em_df = bond_sh_buy_back_em()
|
||||
print(bond_sh_buy_back_em_df)
|
||||
|
||||
bond_sz_buy_back_em_df = bond_sz_buy_back_em()
|
||||
print(bond_sz_buy_back_em_df)
|
||||
|
||||
bond_buy_back_hist_em_df = bond_buy_back_hist_em(symbol="204001")
|
||||
print(bond_buy_back_hist_em_df)
|
||||
|
||||
bond_buy_back_hist_em_df = bond_buy_back_hist_em(symbol="131810")
|
||||
print(bond_buy_back_hist_em_df)
|
||||
@@ -0,0 +1,58 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2023/9/12 16:50
|
||||
Desc: 新浪财经-债券-可转债
|
||||
https://money.finance.sina.com.cn/bond/info/sz128039.html
|
||||
"""
|
||||
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def bond_cb_profile_sina(symbol: str = "sz128039") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-可转债-详情资料
|
||||
https://money.finance.sina.com.cn/bond/info/sz128039.html
|
||||
:param symbol: 带市场标识的转债代码
|
||||
:type symbol: str
|
||||
:return: 可转债-详情资料
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = f"https://money.finance.sina.com.cn/bond/info/{symbol}.html"
|
||||
r = requests.get(url)
|
||||
temp_df = pd.read_html(StringIO(r.text))[0]
|
||||
temp_df.columns = ["item", "value"]
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_cb_summary_sina(symbol: str = "sh155255") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-可转债-债券概况
|
||||
https://money.finance.sina.com.cn/bond/quotes/sh155255.html
|
||||
:param symbol: 带市场标识的转债代码
|
||||
:type symbol: str
|
||||
:return: 可转债-债券概况
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = f"https://money.finance.sina.com.cn/bond/quotes/{symbol}.html"
|
||||
r = requests.get(url)
|
||||
temp_df = pd.read_html(StringIO(r.text))[10]
|
||||
part1 = temp_df.iloc[:, 0:2].copy()
|
||||
part1.columns = ["item", "value"]
|
||||
part2 = temp_df.iloc[:, 2:4].copy()
|
||||
part2.columns = ["item", "value"]
|
||||
part3 = temp_df.iloc[:, 4:6].copy()
|
||||
part3.columns = ["item", "value"]
|
||||
big_df = pd.concat(objs=[part1, part2, part3], ignore_index=True)
|
||||
return big_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_cb_profile_sina_df = bond_cb_profile_sina(symbol="sz128039")
|
||||
print(bond_cb_profile_sina_df)
|
||||
|
||||
bond_cb_summary_sina_df = bond_cb_summary_sina(symbol="sh155255")
|
||||
print(bond_cb_summary_sina_df)
|
||||
@@ -0,0 +1,93 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2024/8/14 11:30
|
||||
Desc: 同花顺-数据中心-可转债
|
||||
https://data.10jqka.com.cn/ipo/bond/
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def bond_zh_cov_info_ths() -> pd.DataFrame:
|
||||
"""
|
||||
同花顺-数据中心-可转债
|
||||
https://data.10jqka.com.cn/ipo/bond/
|
||||
:return: 可转债行情
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://data.10jqka.com.cn/ipo/kzz/"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/89.0.4389.90 Safari/537.36",
|
||||
}
|
||||
r = requests.get(url, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["list"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"sub_date": "申购日期",
|
||||
"bond_code": "债券代码",
|
||||
"bond_name": "债券简称",
|
||||
"code": "正股代码",
|
||||
"name": "正股简称",
|
||||
"sub_code": "申购代码",
|
||||
"share_code": "原股东配售码",
|
||||
"sign_date": "中签公布日",
|
||||
"plan_total": "计划发行量",
|
||||
"issue_total": "实际发行量",
|
||||
"issue_price": "-",
|
||||
"success_rate": "中签率",
|
||||
"listing_date": "上市日期",
|
||||
"expire_date": "到期时间",
|
||||
"price": "转股价格",
|
||||
"quota": "每股获配额",
|
||||
"number": "中签号",
|
||||
"market_id": "-",
|
||||
"stock_market_id": "-",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"申购日期",
|
||||
"申购代码",
|
||||
"原股东配售码",
|
||||
"每股获配额",
|
||||
"计划发行量",
|
||||
"实际发行量",
|
||||
"中签公布日",
|
||||
"中签号",
|
||||
"上市日期",
|
||||
"正股代码",
|
||||
"正股简称",
|
||||
"转股价格",
|
||||
"到期时间",
|
||||
"中签率",
|
||||
]
|
||||
]
|
||||
temp_df["申购日期"] = pd.to_datetime(
|
||||
temp_df["申购日期"], format="%Y-%m-%d", errors="coerce"
|
||||
).dt.date
|
||||
temp_df["中签公布日"] = pd.to_datetime(
|
||||
temp_df["中签公布日"], format="%Y-%m-%d", errors="coerce"
|
||||
).dt.date
|
||||
temp_df["上市日期"] = pd.to_datetime(
|
||||
temp_df["上市日期"], format="%Y-%m-%d", errors="coerce"
|
||||
).dt.date
|
||||
temp_df["到期时间"] = pd.to_datetime(
|
||||
temp_df["到期时间"], format="%Y-%m-%d", errors="coerce"
|
||||
).dt.date
|
||||
temp_df["每股获配额"] = pd.to_numeric(temp_df["每股获配额"], errors="coerce")
|
||||
temp_df["计划发行量"] = pd.to_numeric(temp_df["计划发行量"], errors="coerce")
|
||||
temp_df["实际发行量"] = pd.to_numeric(temp_df["实际发行量"], errors="coerce")
|
||||
temp_df["转股价格"] = pd.to_numeric(temp_df["转股价格"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_zh_cov_info_ths_df = bond_zh_cov_info_ths()
|
||||
print(bond_zh_cov_info_ths_df)
|
||||
@@ -0,0 +1,296 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2026/4/10 19:00
|
||||
Desc: 中国债券信息网-中债指数-中债指数族系-总指数-综合类指数
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
from akshare.bond.cons import INDEX_MAPPING, PERIOD_MAPPING, INDICATOR_MAPPING
|
||||
|
||||
|
||||
def bond_available_index_cbond():
|
||||
"""
|
||||
中国债券信息网-中债指数-中债指数族系 当中, 非指定期限部分
|
||||
https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult
|
||||
:return: 可选项列表
|
||||
:rtype: list
|
||||
"""
|
||||
temp_df = pd.DataFrame(list(INDEX_MAPPING.keys()))
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df['index'] = temp_df['index'] + 1
|
||||
temp_df.columns = ['index', 'value']
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_index_general_cbond(
|
||||
index_category: str = "新综合指数", indicator: str = "全价", period: str = "总值"
|
||||
):
|
||||
"""
|
||||
中国债券信息网-中债指数-中债指数族系
|
||||
https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult
|
||||
:param index_category: see result of available_bond_index()
|
||||
:type index_category: str
|
||||
:param indicator: choice of {"全价", "净价", "财富", "平均市值法久期", "平均现金流法久期", "平均市值法凸性", "平均现金流法凸性", "平均现金流法到期收益率", "平均市值法到期收益率", "平均基点价值", "平均待偿期", "平均派息率", "指数上日总市值", "财富指数涨跌幅", "全价指数涨跌幅", "净价指数涨跌幅", "现券结算量"}
|
||||
:type indicator: str
|
||||
:param period: choice of {"总值", "1年以下", "1-3年", "3-5年", "5-7年", "7-10年", "10年以上", "0-3个月", "3-6个月", "6-9个月", "9-12个月", "0-6个月", "6-12个月"}
|
||||
:type period: str
|
||||
:return: 指定指数的指定指标的指定期限分段数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult"
|
||||
params = {
|
||||
"indexid": INDEX_MAPPING[index_category],
|
||||
"qxlxt": PERIOD_MAPPING[period],
|
||||
"ltcslx": "",
|
||||
"zslxt": INDICATOR_MAPPING[indicator],
|
||||
"zslxt1": INDICATOR_MAPPING[indicator],
|
||||
"lx": "1",
|
||||
"locale": "zh_CN",
|
||||
}
|
||||
r = requests.post(url, params=params)
|
||||
raw_json = r.json()
|
||||
key_col_map = {f"{INDICATOR_MAPPING[indicator]}_{p_code}": freq_col for p_code, freq_col in
|
||||
raw_json['dqcName'].items()}
|
||||
data_json = {key: raw_json[key] for key in key_col_map}
|
||||
temp_df = pd.DataFrame.from_dict(data_json, orient="columns")
|
||||
temp_df.index = pd.to_datetime(pd.to_numeric(temp_df.index), unit="ms", utc=True).tz_convert("Asia/Shanghai")
|
||||
temp_df.index.name = "date"
|
||||
temp_df.rename(columns=key_col_map, inplace=True)
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.columns = ["date", "value"]
|
||||
temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_treasury_index_cbond(
|
||||
indicator: str = "财富", period: str = "5Y"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-国债指数
|
||||
https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query
|
||||
:param indicator: choice of {"全价", "净价", "财富"}
|
||||
:type indicator: str
|
||||
:param period: choice of {'0-1Y', '0-3Y', '0-5Y', '0-10Y', '1-3Y', '1-5Y', '1-10Y',
|
||||
'3-5Y', '5Y', '7Y', '7-10Y', '10Y', '30Y'}
|
||||
:type period: str
|
||||
:return: 国债指数
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
mapping = {
|
||||
"0-1Y": "8a8b2cef70bc61380170be069828032b",
|
||||
"0-3Y": "61f69682dc3ec18fe9664ff59308314a",
|
||||
"0-5Y": "0beafb51867009998c2f4932bf22ede3",
|
||||
"0-10Y": "8a8b2cef7832f8920178350801470014",
|
||||
"1-3Y": "cc1cfe89b0cbd0800420a0e037026407",
|
||||
"1-5Y": "7c3110e5305f9301482517066427a554",
|
||||
"1-10Y": "a5d90802e3259978a027267de651106d",
|
||||
"3-5Y": "8a8b2ca04bf69582014c10b60f376c77",
|
||||
"5Y": "8a8b2ca03a3feea1013a44b98fc533f5",
|
||||
"7Y": "2c9081e50e8767dc010e87b6e26c0080",
|
||||
"7-10Y": "8a8b2c8f5a492a01015a4ac986480043",
|
||||
"10Y": "8a8b2ca04b666362014b723482bc4f49",
|
||||
"30Y": "8a8b2cef77b239980177b485d20a6379",
|
||||
}
|
||||
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult"
|
||||
params = {
|
||||
"indexid": mapping[period],
|
||||
"qxlxt": "00",
|
||||
"ltcslx": "",
|
||||
"zslxt": INDICATOR_MAPPING[indicator],
|
||||
"zslxt1": INDICATOR_MAPPING[indicator],
|
||||
"lx": "1",
|
||||
"locale": "zh_CN",
|
||||
}
|
||||
r = requests.post(url, params=params)
|
||||
raw_json = r.json()
|
||||
key_col_map = {f"{INDICATOR_MAPPING[indicator]}_{p_code}": freq_col for p_code, freq_col in
|
||||
raw_json['dqcName'].items()}
|
||||
data_json = {key: raw_json[key] for key in key_col_map}
|
||||
temp_df = pd.DataFrame.from_dict(data_json, orient="columns")
|
||||
temp_df.index = pd.to_datetime(pd.to_numeric(temp_df.index), unit="ms", utc=True).tz_convert("Asia/Shanghai")
|
||||
temp_df.index.name = "date"
|
||||
temp_df.rename(columns=key_col_map, inplace=True)
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.columns = ["date", "value"]
|
||||
temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_new_composite_index_cbond(
|
||||
indicator: str = "财富", period: str = "总值"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-新综合指数
|
||||
https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query
|
||||
:param indicator: choice of {"全价", "净价", "财富", "平均市值法久期", "平均现金流法久期", "平均市值法凸性",
|
||||
"平均现金流法凸性", "平均现金流法到期收益率", "平均市值法到期收益率", "平均基点价值", "平均待偿期", "平均派息率",
|
||||
"指数上日总市值", "财富指数涨跌幅", "全价指数涨跌幅", "净价指数涨跌幅", "现券结算量"}
|
||||
:type indicator: str
|
||||
:param period: choice of {"总值", "1年以下", "1-3年", "3-5年", "5-7年", "7-10年", "10年以上", "0-3个月",
|
||||
"3-6个月", "6-9个月", "9-12个月", "0-6个月", "6-12个月"}
|
||||
:type period: str
|
||||
:return: 新综合指数
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
indicator_map = {
|
||||
"全价": "QJZS",
|
||||
"净价": "JJZS",
|
||||
"财富": "CFZS",
|
||||
"平均市值法久期": "PJSZFJQ",
|
||||
"平均现金流法久期": "PJXJLFJQ",
|
||||
"平均市值法凸性": "PJSZFTX",
|
||||
"平均现金流法凸性": "PJXJLFTX",
|
||||
"平均现金流法到期收益率": "PJDQSYL",
|
||||
"平均市值法到期收益率": "PJSZFDQSYL",
|
||||
"平均基点价值": "PJJDJZ",
|
||||
"平均待偿期": "PJDCQ",
|
||||
"平均派息率": "PJPXL",
|
||||
"指数上日总市值": "ZSZSZ",
|
||||
"财富指数涨跌幅": "CFZSZDF",
|
||||
"全价指数涨跌幅": "QJZSZDF",
|
||||
"净价指数涨跌幅": "JJZSZDF",
|
||||
"现券结算量": "XQJSL",
|
||||
}
|
||||
period_map = {
|
||||
"总值": "00",
|
||||
"1年以下": "01",
|
||||
"1-3年": "02",
|
||||
"3-5年": "03",
|
||||
"5-7年": "04",
|
||||
"7-10年": "05",
|
||||
"10年以上": "06",
|
||||
"0-3个月": "07",
|
||||
"3-6个月": "08",
|
||||
"6-9个月": "09",
|
||||
"9-12个月": "10",
|
||||
"0-6个月": "11",
|
||||
"6-12个月": "12",
|
||||
}
|
||||
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQuery"
|
||||
params = {
|
||||
"indexid": "8a8b2ca0332abed20134ea76d8885831",
|
||||
"": "", # noqa: F601
|
||||
"qxlxt": period_map[period],
|
||||
"": "", # noqa: F601
|
||||
"ltcslx": "",
|
||||
"": "", # noqa: F601
|
||||
"zslxt": indicator_map[indicator], # noqa: F601
|
||||
"": "", # noqa: F601
|
||||
"zslxt": indicator_map[indicator], # noqa: F601
|
||||
"": "", # noqa: F601
|
||||
"lx": "1",
|
||||
"": "", # noqa: F601
|
||||
"locale": "",
|
||||
}
|
||||
r = requests.post(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame.from_dict(
|
||||
data_json[f"{indicator_map[indicator]}_{period_map[period]}"],
|
||||
orient="index",
|
||||
)
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.columns = ["date", "value"]
|
||||
temp_df["date"] = temp_df["date"].astype(float)
|
||||
temp_df["date"] = (
|
||||
pd.to_datetime(temp_df["date"], unit="ms", errors="coerce", utc=True)
|
||||
.dt.tz_convert("Asia/Shanghai")
|
||||
.dt.date
|
||||
)
|
||||
temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_composite_index_cbond(
|
||||
indicator: str = "财富", period: str = "总值"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-综合指数
|
||||
https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query
|
||||
:param indicator: choice of {"全价", "净价", "财富", "平均市值法久期", "平均现金流法久期", "平均市值法凸性",
|
||||
"平均现金流法凸性", "平均现金流法到期收益率", "平均市值法到期收益率", "平均基点价值", "平均待偿期", "平均派息率",
|
||||
"指数上日总市值", "财富指数涨跌幅", "全价指数涨跌幅", "净价指数涨跌幅", "现券结算量"}
|
||||
:type indicator: str
|
||||
:param period: choice of {"总值", "1年以下", "1-3年", "3-5年", "5-7年", "7-10年", "10年以上", "0-3个月",
|
||||
"3-6个月", "6-9个月", "9-12个月", "0-6个月", "6-12个月"}
|
||||
:type period: str
|
||||
:return: 新综合指数
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
indicator_map = {
|
||||
"全价": "QJZS",
|
||||
"净价": "JJZS",
|
||||
"财富": "CFZS",
|
||||
"平均市值法久期": "PJSZFJQ",
|
||||
"平均现金流法久期": "PJXJLFJQ",
|
||||
"平均市值法凸性": "PJSZFTX",
|
||||
"平均现金流法凸性": "PJXJLFTX",
|
||||
"平均现金流法到期收益率": "PJDQSYL",
|
||||
"平均市值法到期收益率": "PJSZFDQSYL",
|
||||
"平均基点价值": "PJJDJZ",
|
||||
"平均待偿期": "PJDCQ",
|
||||
"平均派息率": "PJPXL",
|
||||
"指数上日总市值": "ZSZSZ",
|
||||
"财富指数涨跌幅": "CFZSZDF",
|
||||
"全价指数涨跌幅": "QJZSZDF",
|
||||
"净价指数涨跌幅": "JJZSZDF",
|
||||
"现券结算量": "XQJSL",
|
||||
}
|
||||
period_map = {
|
||||
"总值": "00",
|
||||
"1年以下": "01",
|
||||
"1-3年": "02",
|
||||
"3-5年": "03",
|
||||
"5-7年": "04",
|
||||
"7-10年": "05",
|
||||
"10年以上": "06",
|
||||
"0-3个月": "07",
|
||||
"3-6个月": "08",
|
||||
"6-9个月": "09",
|
||||
"9-12个月": "10",
|
||||
"0-6个月": "11",
|
||||
"6-12个月": "12",
|
||||
}
|
||||
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQuery"
|
||||
params = {
|
||||
"indexid": "2c90818811afed8d0111c0c672b31578",
|
||||
"": "", # noqa: F601
|
||||
"qxlxt": period_map[period],
|
||||
"": "", # noqa: F601
|
||||
"zslxt": indicator_map[indicator],
|
||||
"": "", # noqa: F601
|
||||
"lx": "1",
|
||||
"": "", # noqa: F601
|
||||
"locale": "",
|
||||
}
|
||||
r = requests.post(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame.from_dict(
|
||||
data_json[f"{indicator_map[indicator]}_{period_map[period]}"],
|
||||
orient="index",
|
||||
)
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.columns = ["date", "value"]
|
||||
temp_df["date"] = pd.to_datetime(temp_df["date"].astype(int), errors="coerce", unit="ms").dt.date
|
||||
temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_new_composite_index_cbond_df = bond_new_composite_index_cbond(
|
||||
indicator="财富", period="总值"
|
||||
)
|
||||
print(bond_new_composite_index_cbond_df)
|
||||
|
||||
bond_composite_index_cbond_df = bond_composite_index_cbond(
|
||||
indicator="财富", period="总值"
|
||||
)
|
||||
print(bond_composite_index_cbond_df)
|
||||
|
||||
bond_index_general_cbond_df = bond_index_general_cbond(index_category="新综合指数", indicator="全价", period="总值")
|
||||
print(bond_index_general_cbond_df)
|
||||
|
||||
bond_treasury_index_cbond_df = bond_treasury_index_cbond(indicator="财富", period="5Y")
|
||||
print(bond_treasury_index_cbond_df)
|
||||
@@ -0,0 +1,190 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/10/1 17:00
|
||||
Desc: 中国外汇交易中心暨全国银行间同业拆借中心
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场做市报价
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场成交行情
|
||||
https://www.chinamoney.com.cn/chinese/mkdatabond/
|
||||
"""
|
||||
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
from akshare.bond.bond_china_money import bond_china_close_return_map
|
||||
from akshare.utils.cons import headers
|
||||
|
||||
|
||||
def bond_spot_quote() -> pd.DataFrame:
|
||||
"""
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场做市报价
|
||||
https://www.chinamoney.com.cn/chinese/mkdatabond/
|
||||
:return: 现券市场做市报价
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
bond_china_close_return_map()
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbMktMakQuot"
|
||||
payload = {
|
||||
"flag": "1",
|
||||
"lang": "cn",
|
||||
}
|
||||
r = requests.post(url=url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.columns = [
|
||||
"_",
|
||||
"_",
|
||||
"报价机构",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"债券简称",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"买入/卖出收益率",
|
||||
"_",
|
||||
"买入/卖出净价",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"报价机构",
|
||||
"债券简称",
|
||||
"买入/卖出净价",
|
||||
"买入/卖出收益率",
|
||||
]
|
||||
]
|
||||
temp_df["买入净价"] = (
|
||||
temp_df["买入/卖出净价"].str.split("/", expand=True).iloc[:, 0]
|
||||
)
|
||||
temp_df["卖出净价"] = (
|
||||
temp_df["买入/卖出净价"].str.split("/", expand=True).iloc[:, 1]
|
||||
)
|
||||
temp_df["买入收益率"] = (
|
||||
temp_df["买入/卖出收益率"].str.split("/", expand=True).iloc[:, 0]
|
||||
)
|
||||
temp_df["卖出收益率"] = (
|
||||
temp_df["买入/卖出收益率"].str.split("/", expand=True).iloc[:, 1]
|
||||
)
|
||||
del temp_df["买入/卖出净价"]
|
||||
del temp_df["买入/卖出收益率"]
|
||||
temp_df["买入净价"] = pd.to_numeric(temp_df["买入净价"], errors="coerce")
|
||||
temp_df["卖出净价"] = pd.to_numeric(temp_df["卖出净价"], errors="coerce")
|
||||
temp_df["买入收益率"] = pd.to_numeric(temp_df["买入收益率"], errors="coerce")
|
||||
temp_df["卖出收益率"] = pd.to_numeric(temp_df["卖出收益率"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_spot_deal() -> pd.DataFrame:
|
||||
"""
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场成交行情
|
||||
https://www.chinamoney.com.cn/chinese/mkdatabond/
|
||||
:return: 现券市场成交行情
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri"
|
||||
payload = {
|
||||
"flag": "1",
|
||||
"lang": "cn",
|
||||
"bondName": "",
|
||||
}
|
||||
r = requests.post(url=url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.columns = [
|
||||
"_",
|
||||
"_",
|
||||
"债券简称",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"涨跌",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"加权收益率",
|
||||
"成交净价",
|
||||
"_",
|
||||
"_",
|
||||
"最新收益率",
|
||||
"-",
|
||||
"交易量",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券简称",
|
||||
"成交净价",
|
||||
"最新收益率",
|
||||
"涨跌",
|
||||
"加权收益率",
|
||||
"交易量",
|
||||
]
|
||||
]
|
||||
temp_df["成交净价"] = pd.to_numeric(temp_df["成交净价"], errors="coerce")
|
||||
temp_df["最新收益率"] = pd.to_numeric(temp_df["最新收益率"], errors="coerce")
|
||||
temp_df["涨跌"] = pd.to_numeric(temp_df["涨跌"], errors="coerce")
|
||||
temp_df["加权收益率"] = pd.to_numeric(temp_df["加权收益率"], errors="coerce")
|
||||
temp_df["交易量"] = pd.to_numeric(temp_df["交易量"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_china_yield(
|
||||
start_date: str = "20200204", end_date: str = "20210124"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
中国债券信息网-国债及其他债券收益率曲线
|
||||
https://www.chinabond.com.cn/
|
||||
https://yield.chinabond.com.cn/cbweb-pbc-web/pbc/historyQuery?startDate=2019-02-07&endDate=2020-02-04&gjqx=0&qxId=ycqx&locale=cn_ZH
|
||||
注意: end_date - start_date 应该小于一年
|
||||
:param start_date: 需要查询的日期, 返回在该日期之后一年内的数据
|
||||
:type start_date: str
|
||||
:param end_date: 需要查询的日期, 返回在该日期之前一年内的数据
|
||||
:type end_date: str
|
||||
:return: 返回在指定日期之间之前一年内的数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://yield.chinabond.com.cn/cbweb-pbc-web/pbc/historyQuery"
|
||||
params = {
|
||||
"startDate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"endDate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
"gjqx": "0",
|
||||
"qxId": "ycqx",
|
||||
"locale": "cn_ZH",
|
||||
}
|
||||
res = requests.get(url, params=params, headers=headers)
|
||||
data_text = res.text.replace(" ", "")
|
||||
data_df = pd.read_html(StringIO(data_text), header=0)[1]
|
||||
data_df["日期"] = pd.to_datetime(data_df["日期"], errors="coerce").dt.date
|
||||
data_df["3月"] = pd.to_numeric(data_df["3月"], errors="coerce")
|
||||
data_df["6月"] = pd.to_numeric(data_df["6月"], errors="coerce")
|
||||
data_df["1年"] = pd.to_numeric(data_df["1年"], errors="coerce")
|
||||
data_df["3年"] = pd.to_numeric(data_df["3年"], errors="coerce")
|
||||
data_df["5年"] = pd.to_numeric(data_df["5年"], errors="coerce")
|
||||
data_df["7年"] = pd.to_numeric(data_df["7年"], errors="coerce")
|
||||
data_df["10年"] = pd.to_numeric(data_df["10年"], errors="coerce")
|
||||
data_df["30年"] = pd.to_numeric(data_df["30年"], errors="coerce")
|
||||
data_df.sort_values(by="日期", inplace=True)
|
||||
data_df.reset_index(inplace=True, drop=True)
|
||||
return data_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_spot_quote_df = bond_spot_quote()
|
||||
print(bond_spot_quote_df)
|
||||
|
||||
bond_spot_deal_df = bond_spot_deal()
|
||||
print(bond_spot_deal_df)
|
||||
|
||||
bond_china_yield_df = bond_china_yield(start_date="20210201", end_date="20220201")
|
||||
print(bond_china_yield_df)
|
||||
@@ -0,0 +1,390 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/6/27 16:00
|
||||
Desc: 收盘收益率曲线历史数据
|
||||
https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1
|
||||
"""
|
||||
|
||||
from functools import lru_cache
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from akshare.utils.tqdm import get_tqdm
|
||||
|
||||
|
||||
def __bond_register_service() -> requests.Session:
|
||||
"""
|
||||
将服务注册到网站中,则该 IP 在 24 小时内可以直接访问
|
||||
https://www.chinamoney.com.cn
|
||||
:return: 访问过的 Session
|
||||
:rtype: requests.Session
|
||||
"""
|
||||
session = requests.Session()
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/108.0.0.0 Safari/537.36",
|
||||
}
|
||||
session.get(
|
||||
url="https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1",
|
||||
headers=headers,
|
||||
)
|
||||
cookies_dict = session.cookies.get_dict()
|
||||
cookies_str = "; ".join(f"{k}={v}" for k, v in cookies_dict.items())
|
||||
# 此处需要通过未访问的游览器,首次打开
|
||||
# https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1
|
||||
# 页面进行人工获取
|
||||
data = {"key": "TThwSjc2NWkzV0VSOVRzOA=="}
|
||||
headers = {
|
||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "en",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Length": "22",
|
||||
"Cookie": cookies_str,
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"Host": "www.chinamoney.com.cn",
|
||||
"Origin": "https://www.chinamoney.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/108.0.0.0 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
session.post(
|
||||
url="https://www.chinamoney.com.cn/dqs/rest/cm-u-rbt/apply",
|
||||
data=data,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
# 20231127 新增部分 https://github.com/akfamily/akshare/issues/4299
|
||||
cookies_dict = session.cookies.get_dict()
|
||||
cookies_str = "; ".join(f"{k}={v}" for k, v in cookies_dict.items())
|
||||
headers = {
|
||||
"Accept": "application/json, text/javascript, /; q=0.01",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "en",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Length": "0",
|
||||
"Cookie": cookies_str,
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"Host": "www.chinamoney.com.cn",
|
||||
"Origin": "https://www.chinamoney.com.cn",
|
||||
"Referer": "https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/108.0.0.0 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
session.post(
|
||||
url="https://www.chinamoney.com.cn/lss/rest/cm-s-account/getSessionUser",
|
||||
headers=headers,
|
||||
)
|
||||
return session
|
||||
|
||||
|
||||
@lru_cache()
|
||||
def bond_china_close_return_map() -> pd.DataFrame:
|
||||
"""
|
||||
收盘收益率曲线历史数据
|
||||
https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1
|
||||
:return: 收盘收益率曲线历史数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
headers = {
|
||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Length": "0",
|
||||
"Host": "www.chinamoney.com.cn",
|
||||
"Origin": "https://www.chinamoney.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/108.0.0.0 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/ClsYldCurvCurvGO"
|
||||
try:
|
||||
r = requests.get(url, headers=headers)
|
||||
data_json = r.json()
|
||||
except: # noqa: E722
|
||||
session = __bond_register_service()
|
||||
r = session.get(url, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_china_close_return(
|
||||
symbol: str = "国债",
|
||||
period: str = "1",
|
||||
start_date: str = "20231101",
|
||||
end_date: str = "20231101",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
收盘收益率曲线历史数据
|
||||
https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1
|
||||
:param symbol: 需要获取的指标
|
||||
:type period: choice of {'0.1', '0.5', '1'}
|
||||
:param period: 期限间隔
|
||||
:type symbol: str
|
||||
:param start_date: 开始日期, 结束日期和开始日期不要超过 1 个月
|
||||
:type start_date: str
|
||||
:param end_date: 结束日期, 结束日期和开始日期不要超过 1 个月
|
||||
:type end_date: str
|
||||
:return: 收盘收益率曲线历史数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
name_code_df = bond_china_close_return_map()
|
||||
symbol_code = name_code_df[name_code_df["cnLabel"] == symbol]["value"].values[0]
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/ClsYldCurvHis"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/108.0.0.0 Safari/537.36",
|
||||
}
|
||||
params = {
|
||||
"lang": "CN",
|
||||
"reference": "1,2,3",
|
||||
"bondType": symbol_code,
|
||||
"startDate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"endDate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
"termId": period,
|
||||
"pageNum": "1",
|
||||
"pageSize": "50",
|
||||
}
|
||||
r = requests.get(url, params=params, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
del temp_df["newDateValue"]
|
||||
temp_df.columns = [
|
||||
"日期",
|
||||
"期限",
|
||||
"到期收益率",
|
||||
"即期收益率",
|
||||
"远期收益率",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"日期",
|
||||
"期限",
|
||||
"到期收益率",
|
||||
"即期收益率",
|
||||
"远期收益率",
|
||||
]
|
||||
]
|
||||
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
||||
temp_df["期限"] = pd.to_numeric(temp_df["期限"], errors="coerce")
|
||||
temp_df["到期收益率"] = pd.to_numeric(temp_df["到期收益率"], errors="coerce")
|
||||
temp_df["即期收益率"] = pd.to_numeric(temp_df["即期收益率"], errors="coerce")
|
||||
temp_df["远期收益率"] = pd.to_numeric(temp_df["远期收益率"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_swap_rate(
|
||||
start_date: str = "20231101", end_date: str = "20231204"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
FR007 利率互换曲线历史数据; 只能获取近一年的数据
|
||||
https://www.chinamoney.com.cn/chinese/bkcurvfxhis/?cfgItemType=72&curveType=FR007
|
||||
:param start_date: 开始日期, 开始和结束日期不得超过一个月
|
||||
:type start_date: str
|
||||
:param end_date: 结束日期, 开始和结束日期不得超过一个月
|
||||
:type end_date: str
|
||||
:return: FR007利率互换曲线历史数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
bond_china_close_return_map()
|
||||
start_date = "-".join([start_date[:4], start_date[4:6], start_date[6:]])
|
||||
end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bk-shibor/IfccHis"
|
||||
params = {
|
||||
"cfgItemType": "72",
|
||||
"interestRateType": "0",
|
||||
"startDate": start_date,
|
||||
"endDate": end_date,
|
||||
"bidAskType": "",
|
||||
"lang": "CN",
|
||||
"quoteTime": "全部",
|
||||
"pageSize": "5000",
|
||||
"pageNum": "1",
|
||||
}
|
||||
headers = {
|
||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Length": "0",
|
||||
"Host": "www.chinamoney.com.cn",
|
||||
"Origin": "https://www.chinamoney.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "https://www.chinamoney.com.cn/chinese/bkcurvfxhis/?cfgItemType=72&curveType=FR007",
|
||||
"sec-ch-ua": '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Windows"',
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/107.0.0.0 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
r = requests.post(url, data=params, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.columns = [
|
||||
"日期",
|
||||
"_",
|
||||
"_",
|
||||
"时刻",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"价格类型",
|
||||
"_",
|
||||
"曲线名称",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"data",
|
||||
]
|
||||
price_df = pd.DataFrame([item for item in temp_df["data"]])
|
||||
price_df.columns = [
|
||||
"1M",
|
||||
"3M",
|
||||
"6M",
|
||||
"9M",
|
||||
"1Y",
|
||||
"2Y",
|
||||
"3Y",
|
||||
"4Y",
|
||||
"5Y",
|
||||
"7Y",
|
||||
"10Y",
|
||||
]
|
||||
big_df = pd.concat(objs=[temp_df, price_df], axis=1)
|
||||
big_df = big_df[
|
||||
[
|
||||
"日期",
|
||||
"曲线名称",
|
||||
"时刻",
|
||||
"价格类型",
|
||||
"1M",
|
||||
"3M",
|
||||
"6M",
|
||||
"9M",
|
||||
"1Y",
|
||||
"2Y",
|
||||
"3Y",
|
||||
"4Y",
|
||||
"5Y",
|
||||
"7Y",
|
||||
"10Y",
|
||||
]
|
||||
]
|
||||
big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce").dt.date
|
||||
big_df["1M"] = pd.to_numeric(big_df["1M"], errors="coerce")
|
||||
big_df["3M"] = pd.to_numeric(big_df["3M"], errors="coerce")
|
||||
big_df["6M"] = pd.to_numeric(big_df["6M"], errors="coerce")
|
||||
big_df["9M"] = pd.to_numeric(big_df["9M"], errors="coerce")
|
||||
big_df["1Y"] = pd.to_numeric(big_df["1Y"], errors="coerce")
|
||||
big_df["2Y"] = pd.to_numeric(big_df["2Y"], errors="coerce")
|
||||
big_df["3Y"] = pd.to_numeric(big_df["3Y"], errors="coerce")
|
||||
big_df["4Y"] = pd.to_numeric(big_df["4Y"], errors="coerce")
|
||||
big_df["5Y"] = pd.to_numeric(big_df["5Y"], errors="coerce")
|
||||
big_df["7Y"] = pd.to_numeric(big_df["7Y"], errors="coerce")
|
||||
big_df["10Y"] = pd.to_numeric(big_df["10Y"], errors="coerce")
|
||||
big_df.sort_values(["日期"], inplace=True, ignore_index=True)
|
||||
return big_df
|
||||
|
||||
|
||||
def macro_china_bond_public() -> pd.DataFrame:
|
||||
"""
|
||||
中国-债券信息披露-债券发行
|
||||
https://www.chinamoney.com.cn/chinese/xzjfx/
|
||||
:return: 债券发行
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
bond_china_close_return_map()
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-an/bnBondEmit"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/107.0.0.0 Safari/537.36",
|
||||
}
|
||||
payload = {
|
||||
"enty": "",
|
||||
"bondType": "",
|
||||
"bondNameCode": "",
|
||||
"leadUnderwriter": "",
|
||||
"pageNo": "1",
|
||||
"pageSize": "10",
|
||||
"limit": "1",
|
||||
}
|
||||
r = requests.post(url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
total_page = int(data_json["data"]["pageTotalSize"]) + 1
|
||||
big_df = pd.DataFrame()
|
||||
tqdm = get_tqdm()
|
||||
for page in tqdm(range(1, total_page), leave=False):
|
||||
payload.update({"pageNo": page})
|
||||
r = requests.post(url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
||||
big_df.columns = [
|
||||
"债券全称",
|
||||
"债券类型",
|
||||
"-",
|
||||
"发行日期",
|
||||
"-",
|
||||
"计息方式",
|
||||
"-",
|
||||
"债券期限",
|
||||
"-",
|
||||
"债券评级",
|
||||
"-",
|
||||
"价格",
|
||||
"计划发行量",
|
||||
]
|
||||
big_df = big_df[
|
||||
[
|
||||
"债券全称",
|
||||
"债券类型",
|
||||
"发行日期",
|
||||
"计息方式",
|
||||
"价格",
|
||||
"债券期限",
|
||||
"计划发行量",
|
||||
"债券评级",
|
||||
]
|
||||
]
|
||||
big_df["价格"] = pd.to_numeric(big_df["价格"], errors="coerce")
|
||||
big_df["计划发行量"] = pd.to_numeric(big_df["计划发行量"], errors="coerce")
|
||||
return big_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_china_close_return_df = bond_china_close_return(
|
||||
symbol="同业存单(AAA)", period="1", start_date="20240607", end_date="20240607"
|
||||
)
|
||||
print(bond_china_close_return_df)
|
||||
|
||||
macro_china_swap_rate_df = macro_china_swap_rate(
|
||||
start_date="20251010", end_date="20251208"
|
||||
)
|
||||
print(macro_china_swap_rate_df)
|
||||
|
||||
macro_china_bond_public_df = macro_china_bond_public()
|
||||
print(macro_china_bond_public_df)
|
||||
@@ -0,0 +1,344 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/5/16 19:00
|
||||
Desc: 债券-集思录-可转债
|
||||
集思录:https://www.jisilu.cn/data/cbnew/#cb
|
||||
"""
|
||||
|
||||
from io import StringIO
|
||||
import pandas as pd
|
||||
import requests
|
||||
import time
|
||||
|
||||
from akshare.utils import demjson
|
||||
|
||||
|
||||
def bond_cb_index_jsl() -> pd.DataFrame:
|
||||
"""
|
||||
首页-可转债-集思录可转债等权指数
|
||||
https://www.jisilu.cn/web/data/cb/index
|
||||
:return: 集思录可转债等权指数
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://www.jisilu.cn/webapi/cb/index_history/"
|
||||
r = requests.get(url)
|
||||
data_dict = demjson.decode(r.text)["data"]
|
||||
temp_df = pd.DataFrame(data_dict)
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_cb_jsl(cookie: str = None) -> pd.DataFrame:
|
||||
"""
|
||||
集思录可转债
|
||||
https://www.jisilu.cn/data/cbnew/#cb
|
||||
:param cookie: 输入获取到的游览器 cookie
|
||||
:type cookie: str
|
||||
:return: 集思录可转债
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://www.jisilu.cn/data/cbnew/cb_list_new/"
|
||||
headers = {
|
||||
"accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"accept-encoding": "gzip, deflate, br",
|
||||
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"cache-control": "no-cache",
|
||||
"content-length": "220",
|
||||
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"cookie": cookie,
|
||||
"origin": "https://www.jisilu.cn",
|
||||
"pragma": "no-cache",
|
||||
"referer": "https://www.jisilu.cn/data/cbnew/",
|
||||
"sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "same-origin",
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/91.0.4472.164 Safari/537.36",
|
||||
"x-requested-with": "XMLHttpRequest",
|
||||
}
|
||||
params = {
|
||||
"___jsl": f"LST___t={int(time.time() * 1000)}",
|
||||
}
|
||||
payload = {
|
||||
"fprice": "",
|
||||
"tprice": "",
|
||||
"curr_iss_amt": "",
|
||||
"volume": "",
|
||||
"svolume": "",
|
||||
"premium_rt": "",
|
||||
"ytm_rt": "",
|
||||
"market": "",
|
||||
"rating_cd": "",
|
||||
"is_search": "N",
|
||||
"market_cd[]": "shmb", # noqa: F601
|
||||
"market_cd[]": "shkc", # noqa: F601
|
||||
"market_cd[]": "szmb", # noqa: F601
|
||||
"market_cd[]": "szcy", # noqa: F601
|
||||
"btype": "",
|
||||
"listed": "Y",
|
||||
"qflag": "N",
|
||||
"sw_cd": "",
|
||||
"bond_ids": "",
|
||||
"rp": "50",
|
||||
}
|
||||
r = requests.post(url, params=params, json=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame([item["cell"] for item in data_json["rows"]])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"bond_id": "代码",
|
||||
"bond_nm": "转债名称",
|
||||
"price": "现价",
|
||||
"increase_rt": "涨跌幅",
|
||||
"stock_id": "正股代码",
|
||||
"stock_nm": "正股名称",
|
||||
"sprice": "正股价",
|
||||
"sincrease_rt": "正股涨跌",
|
||||
"pb": "正股PB",
|
||||
"convert_price": "转股价",
|
||||
"convert_value": "转股价值",
|
||||
"premium_rt": "转股溢价率",
|
||||
"dblow": "双低",
|
||||
"rating_cd": "债券评级",
|
||||
"put_convert_price": "回售触发价",
|
||||
"force_redeem_price": "强赎触发价",
|
||||
"convert_amt_ratio": "转债占比",
|
||||
"maturity_dt": "到期时间",
|
||||
"year_left": "剩余年限",
|
||||
"curr_iss_amt": "剩余规模",
|
||||
"volume": "成交额",
|
||||
"turnover_rt": "换手率",
|
||||
"ytm_rt": "到期税前收益",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"代码",
|
||||
"转债名称",
|
||||
"现价",
|
||||
"涨跌幅",
|
||||
"正股代码",
|
||||
"正股名称",
|
||||
"正股价",
|
||||
"正股涨跌",
|
||||
"正股PB",
|
||||
"转股价",
|
||||
"转股价值",
|
||||
"转股溢价率",
|
||||
"债券评级",
|
||||
"回售触发价",
|
||||
"强赎触发价",
|
||||
"转债占比",
|
||||
"到期时间",
|
||||
"剩余年限",
|
||||
"剩余规模",
|
||||
"成交额",
|
||||
"换手率",
|
||||
"到期税前收益",
|
||||
"双低",
|
||||
]
|
||||
]
|
||||
temp_df["到期时间"] = pd.to_datetime(temp_df["到期时间"], errors="coerce").dt.date
|
||||
temp_df["现价"] = pd.to_numeric(temp_df["现价"], errors="coerce")
|
||||
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
||||
temp_df["正股价"] = pd.to_numeric(temp_df["正股价"], errors="coerce")
|
||||
temp_df["正股涨跌"] = pd.to_numeric(temp_df["正股涨跌"], errors="coerce")
|
||||
temp_df["正股PB"] = pd.to_numeric(temp_df["正股PB"], errors="coerce")
|
||||
temp_df["转股价"] = pd.to_numeric(temp_df["转股价"], errors="coerce")
|
||||
temp_df["转股价值"] = pd.to_numeric(temp_df["转股价值"], errors="coerce")
|
||||
temp_df["转股溢价率"] = pd.to_numeric(temp_df["转股溢价率"], errors="coerce")
|
||||
temp_df["回售触发价"] = pd.to_numeric(temp_df["回售触发价"], errors="coerce")
|
||||
temp_df["强赎触发价"] = pd.to_numeric(temp_df["强赎触发价"], errors="coerce")
|
||||
temp_df["转债占比"] = pd.to_numeric(temp_df["转债占比"], errors="coerce")
|
||||
temp_df["剩余年限"] = pd.to_numeric(temp_df["剩余年限"], errors="coerce")
|
||||
temp_df["剩余规模"] = pd.to_numeric(temp_df["剩余规模"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
|
||||
temp_df["到期税前收益"] = pd.to_numeric(temp_df["到期税前收益"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_cb_redeem_jsl() -> pd.DataFrame:
|
||||
"""
|
||||
集思录可转债-强赎
|
||||
https://www.jisilu.cn/data/cbnew/#redeem
|
||||
:return: 集思录可转债-强赎
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://www.jisilu.cn/data/cbnew/redeem_list/"
|
||||
headers = {
|
||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Length": "5",
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"Host": "www.jisilu.cn",
|
||||
"Origin": "https://www.jisilu.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Referer": "https://www.jisilu.cn/data/cbnew/",
|
||||
"sec-ch-ua": '" Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Windows"',
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/101.0.4951.67 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
params = {
|
||||
"___jsl": "LST___t=1653394005966",
|
||||
}
|
||||
payload = {
|
||||
"rp": "50",
|
||||
}
|
||||
r = requests.post(url, params=params, json=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame([item["cell"] for item in data_json["rows"]])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"bond_id": "代码",
|
||||
"bond_nm": "名称",
|
||||
"price": "现价",
|
||||
"stock_id": "正股代码",
|
||||
"stock_nm": "正股名称",
|
||||
"margin_flg": "-",
|
||||
"btype": "-",
|
||||
"orig_iss_amt": "规模",
|
||||
"curr_iss_amt": "剩余规模",
|
||||
"convert_dt": "转股起始日",
|
||||
"convert_price": "转股价",
|
||||
"next_put_dt": "-",
|
||||
"redeem_dt": "-",
|
||||
"force_redeem": "-",
|
||||
"redeem_flag": "-",
|
||||
"redeem_price": "-",
|
||||
"redeem_price_ratio": "强赎触发比",
|
||||
"real_force_redeem_price": "强赎价",
|
||||
"redeem_remain_days": "-",
|
||||
"redeem_real_days": "-",
|
||||
"redeem_total_days": "-",
|
||||
"recount_dt": "-",
|
||||
"redeem_count_days": "-",
|
||||
"redeem_tc": "强赎条款",
|
||||
"sprice": "正股价",
|
||||
"delist_dt": "最后交易日",
|
||||
"maturity_dt": "到期日",
|
||||
"redeem_icon": "强赎状态",
|
||||
"redeem_orders": "-",
|
||||
"at_maturity": "-",
|
||||
"redeem_count": "强赎天计数",
|
||||
"after_next_put_dt": "-",
|
||||
"force_redeem_price": "强赎触发价",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"代码",
|
||||
"名称",
|
||||
"现价",
|
||||
"正股代码",
|
||||
"正股名称",
|
||||
"规模",
|
||||
"剩余规模",
|
||||
"转股起始日",
|
||||
"最后交易日",
|
||||
"到期日",
|
||||
"转股价",
|
||||
"强赎触发比",
|
||||
"强赎触发价",
|
||||
"正股价",
|
||||
"强赎价",
|
||||
"强赎天计数",
|
||||
"强赎条款",
|
||||
"强赎状态",
|
||||
]
|
||||
]
|
||||
temp_df["现价"] = pd.to_numeric(temp_df["现价"], errors="coerce")
|
||||
temp_df["规模"] = pd.to_numeric(temp_df["规模"], errors="coerce")
|
||||
temp_df["剩余规模"] = pd.to_numeric(temp_df["剩余规模"], errors="coerce")
|
||||
temp_df["转股起始日"] = pd.to_datetime(
|
||||
temp_df["转股起始日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["最后交易日"] = pd.to_datetime(
|
||||
temp_df["最后交易日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["到期日"] = pd.to_datetime(temp_df["到期日"], errors="coerce").dt.date
|
||||
temp_df["转股价"] = pd.to_numeric(temp_df["转股价"], errors="coerce")
|
||||
temp_df["强赎触发比"] = pd.to_numeric(
|
||||
temp_df["强赎触发比"].str.strip("%"), errors="coerce"
|
||||
)
|
||||
temp_df["强赎触发价"] = pd.to_numeric(temp_df["强赎触发价"], errors="coerce")
|
||||
temp_df["正股价"] = pd.to_numeric(temp_df["正股价"], errors="coerce")
|
||||
temp_df["强赎价"] = pd.to_numeric(temp_df["强赎价"], errors="coerce")
|
||||
temp_df["强赎天计数"] = temp_df["强赎天计数"].replace(
|
||||
r"^.*?(\d{1,2}\/\d{1,2} \| \d{1,2}).*?$", r"\1", regex=True
|
||||
)
|
||||
temp_df["强赎状态"] = temp_df["强赎状态"].map(
|
||||
{
|
||||
"R": "已公告强赎",
|
||||
"O": "公告要强赎",
|
||||
"G": "公告不强赎",
|
||||
"B": "已满足强赎条件",
|
||||
"": "",
|
||||
}
|
||||
)
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_cb_adj_logs_jsl(symbol: str = "128013") -> pd.DataFrame:
|
||||
"""
|
||||
集思录-可转债转股价-调整记录
|
||||
https://www.jisilu.cn/data/cbnew/#cb
|
||||
:param symbol: 可转债代码
|
||||
:type symbol: str
|
||||
:return: 转股价调整记录
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = f"https://www.jisilu.cn/data/cbnew/adj_logs/?bond_id={symbol}"
|
||||
r = requests.get(url)
|
||||
data_text = r.text
|
||||
if "</table>" not in data_text:
|
||||
# 1. 该可转债没有转股价调整记录,服务端返回文本 '暂无数据'
|
||||
# 2. 无效可转债代码,服务端返回 {"timestamp":1639565628,"isError":1,"msg":"无效代码格式"}
|
||||
# 以上两种情况,返回空的 DataFrame
|
||||
return pd.DataFrame()
|
||||
else:
|
||||
temp_df = pd.read_html(StringIO(data_text), parse_dates=True)[0]
|
||||
temp_df.columns = [item.replace(" ", "") for item in temp_df.columns]
|
||||
temp_df["下修前转股价"] = pd.to_numeric(
|
||||
temp_df["下修前转股价"], errors="coerce"
|
||||
)
|
||||
temp_df["下修后转股价"] = pd.to_numeric(
|
||||
temp_df["下修后转股价"], errors="coerce"
|
||||
)
|
||||
temp_df["下修底价"] = pd.to_numeric(temp_df["下修底价"], errors="coerce")
|
||||
temp_df["股东大会日"] = pd.to_datetime(
|
||||
temp_df["股东大会日"], format="%Y-%m-%d", errors="coerce"
|
||||
).dt.date
|
||||
temp_df["新转股价生效日期"] = pd.to_datetime(
|
||||
temp_df["新转股价生效日期"], format="%Y-%m-%d", errors="coerce"
|
||||
).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_cb_index_jsl_df = bond_cb_index_jsl()
|
||||
print(bond_cb_index_jsl_df)
|
||||
|
||||
bond_cb_jsl_df = bond_cb_jsl(cookie="")
|
||||
print(bond_cb_jsl_df)
|
||||
|
||||
bond_cb_redeem_jsl_df = bond_cb_redeem_jsl()
|
||||
print(bond_cb_redeem_jsl_df)
|
||||
|
||||
bond_cb_adj_logs_jsl_df = bond_cb_adj_logs_jsl(symbol="128013")
|
||||
print(bond_cb_adj_logs_jsl_df)
|
||||
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/4/5 17:00
|
||||
Desc: 东方财富网-数据中心-经济数据-中美国债收益率
|
||||
https://data.eastmoney.com/cjsj/zmgzsyl.html
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from akshare.utils.tqdm import get_tqdm
|
||||
|
||||
|
||||
def bond_zh_us_rate(start_date: str = "19901219") -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-数据中心-经济数据-中美国债收益率
|
||||
https://data.eastmoney.com/cjsj/zmgzsyl.html
|
||||
:param start_date: 开始统计时间
|
||||
:type start_date: str
|
||||
:return: 中美国债收益率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter.eastmoney.com/api/data/get"
|
||||
params = {
|
||||
"type": "RPTA_WEB_TREASURYYIELD",
|
||||
"sty": "ALL",
|
||||
"st": "SOLAR_DATE",
|
||||
"sr": "-1",
|
||||
"token": "894050c76af8597a853f5b408b759f5d",
|
||||
"p": "1",
|
||||
"ps": "500",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
total_page = data_json["result"]["pages"]
|
||||
big_df = pd.DataFrame()
|
||||
tqdm = get_tqdm()
|
||||
for page in tqdm(range(1, total_page + 1), leave=False):
|
||||
params = {
|
||||
"type": "RPTA_WEB_TREASURYYIELD",
|
||||
"sty": "ALL",
|
||||
"st": "SOLAR_DATE",
|
||||
"sr": "-1",
|
||||
"token": "894050c76af8597a853f5b408b759f5d",
|
||||
"p": page,
|
||||
"ps": "500",
|
||||
"pageNo": page,
|
||||
"pageNum": page,
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
for col in temp_df.columns:
|
||||
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
||||
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
||||
if big_df.empty:
|
||||
big_df = temp_df
|
||||
else:
|
||||
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
||||
|
||||
temp_date_list = pd.to_datetime(big_df["SOLAR_DATE"]).dt.date.to_list()
|
||||
if pd.to_datetime(start_date) in pd.date_range(
|
||||
temp_date_list[-1], temp_date_list[0]
|
||||
):
|
||||
break
|
||||
|
||||
big_df.rename(
|
||||
columns={
|
||||
"SOLAR_DATE": "日期",
|
||||
"EMM00166462": "中国国债收益率5年",
|
||||
"EMM00166466": "中国国债收益率10年",
|
||||
"EMM00166469": "中国国债收益率30年",
|
||||
"EMM00588704": "中国国债收益率2年",
|
||||
"EMM01276014": "中国国债收益率10年-2年",
|
||||
"EMG00001306": "美国国债收益率2年",
|
||||
"EMG00001308": "美国国债收益率5年",
|
||||
"EMG00001310": "美国国债收益率10年",
|
||||
"EMG00001312": "美国国债收益率30年",
|
||||
"EMG01339436": "美国国债收益率10年-2年",
|
||||
"EMM00000024": "中国GDP年增率",
|
||||
"EMG00159635": "美国GDP年增率",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
big_df = big_df[
|
||||
[
|
||||
"日期",
|
||||
"中国国债收益率2年",
|
||||
"中国国债收益率5年",
|
||||
"中国国债收益率10年",
|
||||
"中国国债收益率30年",
|
||||
"中国国债收益率10年-2年",
|
||||
"中国GDP年增率",
|
||||
"美国国债收益率2年",
|
||||
"美国国债收益率5年",
|
||||
"美国国债收益率10年",
|
||||
"美国国债收益率30年",
|
||||
"美国国债收益率10年-2年",
|
||||
"美国GDP年增率",
|
||||
]
|
||||
]
|
||||
big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce")
|
||||
big_df["中国国债收益率2年"] = pd.to_numeric(
|
||||
big_df["中国国债收益率2年"], errors="coerce"
|
||||
)
|
||||
big_df["中国国债收益率5年"] = pd.to_numeric(
|
||||
big_df["中国国债收益率5年"], errors="coerce"
|
||||
)
|
||||
big_df["中国国债收益率10年"] = pd.to_numeric(
|
||||
big_df["中国国债收益率10年"], errors="coerce"
|
||||
)
|
||||
big_df["中国国债收益率30年"] = pd.to_numeric(
|
||||
big_df["中国国债收益率30年"], errors="coerce"
|
||||
)
|
||||
big_df["中国国债收益率10年-2年"] = pd.to_numeric(
|
||||
big_df["中国国债收益率10年-2年"], errors="coerce"
|
||||
)
|
||||
big_df["中国GDP年增率"] = pd.to_numeric(big_df["中国GDP年增率"], errors="coerce")
|
||||
big_df["美国国债收益率2年"] = pd.to_numeric(
|
||||
big_df["美国国债收益率2年"], errors="coerce"
|
||||
)
|
||||
big_df["美国国债收益率5年"] = pd.to_numeric(
|
||||
big_df["美国国债收益率5年"], errors="coerce"
|
||||
)
|
||||
big_df["美国国债收益率10年"] = pd.to_numeric(
|
||||
big_df["美国国债收益率10年"], errors="coerce"
|
||||
)
|
||||
big_df["美国国债收益率30年"] = pd.to_numeric(
|
||||
big_df["美国国债收益率30年"], errors="coerce"
|
||||
)
|
||||
big_df["美国国债收益率10年-2年"] = pd.to_numeric(
|
||||
big_df["美国国债收益率10年-2年"], errors="coerce"
|
||||
)
|
||||
big_df["美国GDP年增率"] = pd.to_numeric(big_df["美国GDP年增率"], errors="coerce")
|
||||
big_df.sort_values("日期", inplace=True)
|
||||
big_df.set_index(["日期"], inplace=True)
|
||||
big_df = big_df[pd.to_datetime(start_date) :]
|
||||
big_df.reset_index(inplace=True)
|
||||
big_df["日期"] = pd.to_datetime(big_df["日期"]).dt.date
|
||||
return big_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_zh_us_rate_df = bond_zh_us_rate(start_date="19901219")
|
||||
print(bond_zh_us_rate_df)
|
||||
@@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2026/2/4 17:00
|
||||
Desc: 新浪财经-债券-中国/美国国债收益率
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hs_z
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def bond_gb_zh_sina(symbol: str = "中国10年期国债") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-中国国债收益率行情数据
|
||||
https://stock.finance.sina.com.cn/forex/globalbd/cn10yt.html
|
||||
:param symbol: choice of {"中国1年期国债", "中国2年期国债", "中国3年期国债", "中国5年期国债", "中国7年期国债", "中国10年期国债", "中国15年期国债", "中国20年期国债", "中国30年期国债"}
|
||||
:type symbol: str
|
||||
:return: 中国国债收益率行情数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
symbol_map = {
|
||||
"中国1年期国债": "CN1YT",
|
||||
"中国2年期国债": "CN2YT",
|
||||
"中国3年期国债": "CN3YT",
|
||||
"中国5年期国债": "CN5YT",
|
||||
"中国7年期国债": "CN7YT",
|
||||
"中国10年期国债": "CN10YT",
|
||||
"中国15年期国债": "CN15YT",
|
||||
"中国20年期国债": "CN20YT",
|
||||
"中国30年期国债": "CN30YT",
|
||||
}
|
||||
url = f"https://bond.finance.sina.com.cn/hq/gb/daily?symbol={symbol_map[symbol]}"
|
||||
r = requests.get(url)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"date",
|
||||
"open",
|
||||
"high",
|
||||
"low",
|
||||
"close",
|
||||
"volume",
|
||||
]
|
||||
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
|
||||
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
|
||||
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
|
||||
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
|
||||
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
|
||||
temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_gb_us_sina(symbol: str = "美国10年期国债") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-美国国债收益率行情数据
|
||||
https://stock.finance.sina.com.cn/forex/globalbd/cn10yt.html
|
||||
:param symbol: choice of {"美国1月期国债", "美国2月期国债", "美国3月期国债", "美国4月期国债", "美国6月期国债", "美国1年期国债", "美国2年期国债", "美国3年期国债", "美国5年期国债", "美国7年期国债", "美国10年期国债", "美国20年期国债", "美国30年期国债"}
|
||||
:type symbol: str
|
||||
:return: 美国国债收益率行情数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
symbol_map = {
|
||||
"美国1月期国债": "US1MT",
|
||||
"美国2月期国债": "US2MT",
|
||||
"美国3月期国债": "US3MT",
|
||||
"美国4月期国债": "US4MT",
|
||||
"美国6月期国债": "US6MT",
|
||||
"美国1年期国债": "US1YT",
|
||||
"美国2年期国债": "US2YT",
|
||||
"美国3年期国债": "US3YT",
|
||||
"美国5年期国债": "US5YT",
|
||||
"美国7年期国债": "US7YT",
|
||||
"美国10年期国债": "US10YT",
|
||||
"美国20年期国债": "US20YT",
|
||||
"美国30年期国债": "US30YT",
|
||||
}
|
||||
url = f"https://bond.finance.sina.com.cn/hq/gb/daily?symbol={symbol_map[symbol]}"
|
||||
r = requests.get(url)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"date",
|
||||
"open",
|
||||
"high",
|
||||
"low",
|
||||
"close",
|
||||
"volume",
|
||||
]
|
||||
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
|
||||
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
|
||||
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
|
||||
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
|
||||
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
|
||||
temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_gb_zh_sina_df = bond_gb_zh_sina(symbol="中国10年期国债")
|
||||
print(bond_gb_zh_sina_df)
|
||||
|
||||
bond_gb_us_sina_df = bond_gb_us_sina(symbol="美国10年期国债")
|
||||
print(bond_gb_us_sina_df)
|
||||
@@ -0,0 +1,231 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/5/10 14:00
|
||||
Desc: 中国外汇交易中心暨全国银行间同业拆借中心
|
||||
https://www.chinamoney.com.cn/chinese/scsjzqxx/
|
||||
"""
|
||||
|
||||
import functools
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
from akshare.bond.bond_china import bond_china_close_return_map
|
||||
from akshare.utils.tqdm import get_tqdm
|
||||
|
||||
|
||||
@functools.lru_cache()
|
||||
def bond_info_cm_query(symbol: str = "评级等级") -> pd.DataFrame:
|
||||
"""
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-查询相关指标的参数
|
||||
https://www.chinamoney.com.cn/chinese/scsjzqxx/
|
||||
:param symbol: choice of {"主承销商", "债券类型", "息票类型", "发行年份", "评级等级"}
|
||||
:type symbol: str
|
||||
:return: 查询相关指标的参数
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
bond_china_close_return_map()
|
||||
if symbol == "主承销商":
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/EntyFullNameSearchCondition"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/109.0.0.0 Safari/537.36"
|
||||
}
|
||||
r = requests.post(url, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["data"]["enty"])
|
||||
temp_df.columns = ["code", "name"]
|
||||
temp_df = temp_df[["name", "code"]]
|
||||
return temp_df
|
||||
else:
|
||||
symbol_map = {
|
||||
"债券类型": "bondType",
|
||||
"息票类型": "couponType",
|
||||
"发行年份": "issueYear",
|
||||
"评级等级": "bondRtngShrt",
|
||||
}
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondBaseInfoSearchCondition"
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/109.0.0.0 Safari/537.36"
|
||||
}
|
||||
r = requests.post(url, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["data"][f"{symbol_map[symbol]}"])
|
||||
if temp_df.shape[1] == 1:
|
||||
temp_df.columns = ["name"]
|
||||
temp_df["code"] = temp_df["name"]
|
||||
temp_df.columns = ["code", "name"]
|
||||
temp_df = temp_df[["name", "code"]]
|
||||
return temp_df
|
||||
|
||||
|
||||
@functools.lru_cache()
|
||||
def bond_info_cm(
|
||||
bond_name: str = "",
|
||||
bond_code: str = "",
|
||||
bond_issue: str = "",
|
||||
bond_type: str = "",
|
||||
coupon_type: str = "",
|
||||
issue_year: str = "",
|
||||
underwriter: str = "",
|
||||
grade: str = "",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询
|
||||
https://www.chinamoney.com.cn/chinese/scsjzqxx/
|
||||
:param bond_name: 债券名称
|
||||
:type bond_name: str
|
||||
:param bond_code: 债券代码
|
||||
:type bond_code: str
|
||||
:param bond_issue: 发行人/受托机构
|
||||
:type bond_issue: str
|
||||
:param bond_type: 债券类型
|
||||
:type bond_type: str
|
||||
:param coupon_type: 息票类型
|
||||
:type coupon_type: str
|
||||
:param issue_year: 发行年份
|
||||
:type issue_year: str
|
||||
:param underwriter: 主承销商
|
||||
:type underwriter: str
|
||||
:param grade: 评级等级
|
||||
:type grade: str
|
||||
:return: 信息查询结果
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
bond_china_close_return_map()
|
||||
if bond_type:
|
||||
bond_type_df = bond_info_cm_query(symbol="债券类型")
|
||||
bond_type_df_value = bond_type_df[bond_type_df["name"] == bond_type][
|
||||
"code"
|
||||
].values[0]
|
||||
else:
|
||||
bond_type_df_value = ""
|
||||
|
||||
if coupon_type:
|
||||
coupon_type_df = bond_info_cm_query(symbol="息票类型")
|
||||
coupon_type_df_value = coupon_type_df[coupon_type_df["name"] == coupon_type][
|
||||
"code"
|
||||
].values[0]
|
||||
else:
|
||||
coupon_type_df_value = ""
|
||||
|
||||
if underwriter:
|
||||
underwriter_df = bond_info_cm_query(symbol="主承销商")
|
||||
underwriter_value = underwriter_df[underwriter_df["name"] == underwriter][
|
||||
"code"
|
||||
].values[0]
|
||||
else:
|
||||
underwriter_value = ""
|
||||
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondMarketInfoList2"
|
||||
payload = {
|
||||
"pageNo": "1",
|
||||
"pageSize": "15",
|
||||
"bondName": bond_name,
|
||||
"bondCode": bond_code,
|
||||
"issueEnty": bond_issue,
|
||||
"bondType": bond_type_df_value if bond_type_df_value else "",
|
||||
"bondSpclPrjctVrty": "",
|
||||
"couponType": coupon_type_df_value if coupon_type_df_value else "",
|
||||
"issueYear": issue_year,
|
||||
"entyDefinedCode": underwriter_value if underwriter_value else "",
|
||||
"rtngShrt": grade,
|
||||
}
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/109.0.0.0 Safari/537.36"
|
||||
}
|
||||
r = requests.post(url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
total_page = data_json["data"]["pageTotal"]
|
||||
big_df = pd.DataFrame()
|
||||
tqdm = get_tqdm()
|
||||
for page in tqdm(range(1, total_page + 1), leave=False):
|
||||
payload.update({"pageNo": page})
|
||||
r = requests.post(url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["data"]["resultList"])
|
||||
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
||||
big_df.rename(
|
||||
columns={
|
||||
"bondDefinedCode": "查询代码",
|
||||
"bondName": "债券简称",
|
||||
"bondCode": "债券代码",
|
||||
"issueStartDate": "发行日期",
|
||||
"issueEndDate": "-",
|
||||
"bondTypeCode": "-",
|
||||
"bondType": "债券类型",
|
||||
"entyFullName": "发行人/受托机构",
|
||||
"entyDefinedCode": "-",
|
||||
"debtRtng": "最新债项评级",
|
||||
"isin": "-",
|
||||
"inptTp": "-",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
big_df = big_df[
|
||||
[
|
||||
"债券简称",
|
||||
"债券代码",
|
||||
"发行人/受托机构",
|
||||
"债券类型",
|
||||
"发行日期",
|
||||
"最新债项评级",
|
||||
"查询代码",
|
||||
]
|
||||
]
|
||||
return big_df
|
||||
|
||||
|
||||
@functools.lru_cache()
|
||||
def bond_info_detail_cm(symbol: str = "淮安农商行CDSD2022021012") -> pd.DataFrame:
|
||||
"""
|
||||
中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询-债券详情
|
||||
https://www.chinamoney.com.cn/chinese/zqjc/?bondDefinedCode=egfjh08154
|
||||
:param symbol: 债券简称
|
||||
:type symbol: str
|
||||
:return: 债券详情
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
bond_china_close_return_map()
|
||||
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondDetailInfo"
|
||||
inner_bond_info_cm_df = bond_info_cm(bond_name=symbol)
|
||||
bond_code = inner_bond_info_cm_df["查询代码"].values[0]
|
||||
payload = {"bondDefinedCode": bond_code}
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/109.0.0.0 Safari/537.36",
|
||||
"host": "www.chinamoney.com.cn",
|
||||
"origin": "https://www.chinamoney.com.cn",
|
||||
"referer": "https://www.chinamoney.com.cn/chinese/zqjc/?bondDefinedCode=egfjh08154",
|
||||
}
|
||||
r = requests.post(url, data=payload, headers=headers)
|
||||
data_json = r.json()
|
||||
data_dict = data_json["data"]["bondBaseInfo"]
|
||||
if data_dict["creditRateEntyList"]:
|
||||
del data_dict["creditRateEntyList"]
|
||||
if data_dict["exerciseInfoList"]:
|
||||
del data_dict["exerciseInfoList"]
|
||||
temp_df = pd.DataFrame.from_dict(data_dict, orient="index")
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.columns = ["name", "value"]
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_info_cm_df = bond_info_cm(
|
||||
bond_name="",
|
||||
bond_code="",
|
||||
bond_issue="",
|
||||
bond_type="短期融资券",
|
||||
coupon_type="零息式",
|
||||
issue_year="2019",
|
||||
grade="A-1",
|
||||
underwriter="重庆农村商业银行股份有限公司",
|
||||
)
|
||||
print(bond_info_cm_df)
|
||||
|
||||
bond_info_detail_cm_df = bond_info_detail_cm(symbol="19渝机电CP002")
|
||||
print(bond_info_detail_cm_df)
|
||||
@@ -0,0 +1,574 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2024/6/19 22:00
|
||||
Desc: 巨潮资讯-数据中心-专题统计-债券报表-债券发行
|
||||
http://webapi.cninfo.com.cn/#/thematicStatistics
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
import py_mini_racer
|
||||
|
||||
from akshare.datasets import get_ths_js
|
||||
|
||||
|
||||
def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
||||
"""
|
||||
获取 JS 文件的内容
|
||||
:param file: JS 文件名
|
||||
:type file: str
|
||||
:return: 文件内容
|
||||
:rtype: str
|
||||
"""
|
||||
setting_file_path = get_ths_js(file)
|
||||
with open(setting_file_path, encoding="utf-8") as f:
|
||||
file_data = f.read()
|
||||
return file_data
|
||||
|
||||
|
||||
def bond_treasure_issue_cninfo(
|
||||
start_date: str = "20210910", end_date: str = "20211109"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
巨潮资讯-数据中心-专题统计-债券报表-债券发行-国债发行
|
||||
http://webapi.cninfo.com.cn/#/thematicStatistics
|
||||
:param start_date: 开始统计时间
|
||||
:type start_date: str
|
||||
:param end_date: 结束统计数据
|
||||
:type end_date: str
|
||||
:return: 国债发行
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1120"
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_content = _get_file_content_cninfo("cninfo.js")
|
||||
js_code.eval(js_content)
|
||||
mcode = js_code.call("getResCode1")
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Enckey": mcode,
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Content-Length": "0",
|
||||
"Host": "webapi.cninfo.com.cn",
|
||||
"Origin": "http://webapi.cninfo.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Proxy-Connection": "keep-alive",
|
||||
"Referer": "http://webapi.cninfo.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/93.0.4577.63 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
params = {
|
||||
"sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"edate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
}
|
||||
r = requests.post(url, headers=headers, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"F009D": "缴款日",
|
||||
"SECNAME": "债券简称",
|
||||
"DECLAREDATE": "公告日期",
|
||||
"F004D": "发行起始日",
|
||||
"F003D": "发行终止日",
|
||||
"F008N": "单位面值",
|
||||
"SECCODE": "债券代码",
|
||||
"F007N": "发行价格",
|
||||
"F006N": "计划发行总量",
|
||||
"F005N": "实际发行总量",
|
||||
"F028N": "增发次数",
|
||||
"BONDNAME": "债券名称",
|
||||
"F014V": "发行对象",
|
||||
"F002V": "交易市场",
|
||||
"F013V": "发行方式",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"发行起始日",
|
||||
"发行终止日",
|
||||
"计划发行总量",
|
||||
"实际发行总量",
|
||||
"发行价格",
|
||||
"单位面值",
|
||||
"缴款日",
|
||||
"增发次数",
|
||||
"交易市场",
|
||||
"发行方式",
|
||||
"发行对象",
|
||||
"公告日期",
|
||||
"债券名称",
|
||||
]
|
||||
]
|
||||
temp_df["发行起始日"] = pd.to_datetime(
|
||||
temp_df["发行起始日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["发行终止日"] = pd.to_datetime(
|
||||
temp_df["发行终止日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["缴款日"] = pd.to_datetime(temp_df["缴款日"], errors="coerce").dt.date
|
||||
temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
|
||||
temp_df["计划发行总量"] = pd.to_numeric(temp_df["计划发行总量"], errors="coerce")
|
||||
temp_df["实际发行总量"] = pd.to_numeric(temp_df["实际发行总量"], errors="coerce")
|
||||
temp_df["发行价格"] = pd.to_numeric(temp_df["发行价格"], errors="coerce")
|
||||
temp_df["单位面值"] = pd.to_numeric(temp_df["单位面值"], errors="coerce")
|
||||
temp_df["增发次数"] = pd.to_numeric(temp_df["增发次数"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_local_government_issue_cninfo(
|
||||
start_date: str = "20210911", end_date: str = "20211110"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
巨潮资讯-数据中心-专题统计-债券报表-债券发行-地方债发行
|
||||
http://webapi.cninfo.com.cn/#/thematicStatistics
|
||||
:param start_date: 开始统计时间
|
||||
:type start_date: str
|
||||
:param end_date: 开始统计时间
|
||||
:type end_date: str
|
||||
:return: 地方债发行
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1121"
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_content = _get_file_content_cninfo("cninfo.js")
|
||||
js_code.eval(js_content)
|
||||
mcode = js_code.call("getResCode1")
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Enckey": mcode,
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Content-Length": "0",
|
||||
"Host": "webapi.cninfo.com.cn",
|
||||
"Origin": "http://webapi.cninfo.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Proxy-Connection": "keep-alive",
|
||||
"Referer": "http://webapi.cninfo.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/93.0.4577.63 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
params = {
|
||||
"sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"edate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
}
|
||||
r = requests.post(url, headers=headers, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"F009D": "缴款日",
|
||||
"SECNAME": "债券简称",
|
||||
"DECLAREDATE": "公告日期",
|
||||
"F004D": "发行起始日",
|
||||
"F003D": "发行终止日",
|
||||
"F008N": "单位面值",
|
||||
"SECCODE": "债券代码",
|
||||
"F007N": "发行价格",
|
||||
"F006N": "计划发行总量",
|
||||
"F005N": "实际发行总量",
|
||||
"F028N": "增发次数",
|
||||
"BONDNAME": "债券名称",
|
||||
"F014V": "发行对象",
|
||||
"F002V": "交易市场",
|
||||
"F013V": "发行方式",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"发行起始日",
|
||||
"发行终止日",
|
||||
"计划发行总量",
|
||||
"实际发行总量",
|
||||
"发行价格",
|
||||
"单位面值",
|
||||
"缴款日",
|
||||
"增发次数",
|
||||
"交易市场",
|
||||
"发行方式",
|
||||
"发行对象",
|
||||
"公告日期",
|
||||
"债券名称",
|
||||
]
|
||||
]
|
||||
temp_df["发行起始日"] = pd.to_datetime(
|
||||
temp_df["发行起始日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["发行终止日"] = pd.to_datetime(
|
||||
temp_df["发行终止日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["缴款日"] = pd.to_datetime(temp_df["缴款日"], errors="coerce").dt.date
|
||||
temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
|
||||
temp_df["计划发行总量"] = pd.to_numeric(temp_df["计划发行总量"], errors="coerce")
|
||||
temp_df["实际发行总量"] = pd.to_numeric(temp_df["实际发行总量"], errors="coerce")
|
||||
temp_df["发行价格"] = pd.to_numeric(temp_df["发行价格"], errors="coerce")
|
||||
temp_df["单位面值"] = pd.to_numeric(temp_df["单位面值"], errors="coerce")
|
||||
temp_df["增发次数"] = pd.to_numeric(temp_df["增发次数"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_corporate_issue_cninfo(
|
||||
start_date: str = "20210911", end_date: str = "20211110"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
巨潮资讯-数据中心-专题统计-债券报表-债券发行-企业债发行
|
||||
http://webapi.cninfo.com.cn/#/thematicStatistics
|
||||
:param start_date: 开始统计时间
|
||||
:type start_date: str
|
||||
:param end_date: 开始统计时间
|
||||
:type end_date: str
|
||||
:return: 企业债发行
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1122"
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_content = _get_file_content_cninfo("cninfo.js")
|
||||
js_code.eval(js_content)
|
||||
mcode = js_code.call("getResCode1")
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Enckey": mcode,
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Content-Length": "0",
|
||||
"Host": "webapi.cninfo.com.cn",
|
||||
"Origin": "http://webapi.cninfo.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Proxy-Connection": "keep-alive",
|
||||
"Referer": "http://webapi.cninfo.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/93.0.4577.63 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
params = {
|
||||
"sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"edate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
}
|
||||
r = requests.post(url, headers=headers, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"SECNAME": "债券简称",
|
||||
"DECLAREDATE": "公告日期",
|
||||
"F004D": "交易所网上发行终止日",
|
||||
"F003D": "交易所网上发行起始日",
|
||||
"F008N": "发行面值",
|
||||
"SECCODE": "债券代码",
|
||||
"F007N": "发行价格",
|
||||
"F006N": "实际发行总量",
|
||||
"F005N": "计划发行总量",
|
||||
"F022N": "最小认购单位",
|
||||
"F017V": "承销方式",
|
||||
"F052N": "最低认购额",
|
||||
"F015V": "发行范围",
|
||||
"BONDNAME": "债券名称",
|
||||
"F014V": "发行对象",
|
||||
"F013V": "发行方式",
|
||||
"F023V": "募资用途说明",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"公告日期",
|
||||
"交易所网上发行起始日",
|
||||
"交易所网上发行终止日",
|
||||
"计划发行总量",
|
||||
"实际发行总量",
|
||||
"发行面值",
|
||||
"发行价格",
|
||||
"发行方式",
|
||||
"发行对象",
|
||||
"发行范围",
|
||||
"承销方式",
|
||||
"最小认购单位",
|
||||
"募资用途说明",
|
||||
"最低认购额",
|
||||
"债券名称",
|
||||
]
|
||||
]
|
||||
temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
|
||||
temp_df["交易所网上发行起始日"] = pd.to_datetime(
|
||||
temp_df["交易所网上发行起始日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["交易所网上发行终止日"] = pd.to_datetime(
|
||||
temp_df["交易所网上发行终止日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["计划发行总量"] = pd.to_numeric(temp_df["计划发行总量"], errors="coerce")
|
||||
temp_df["实际发行总量"] = pd.to_numeric(temp_df["实际发行总量"], errors="coerce")
|
||||
temp_df["发行面值"] = pd.to_numeric(temp_df["发行面值"], errors="coerce")
|
||||
temp_df["发行价格"] = pd.to_numeric(temp_df["发行价格"], errors="coerce")
|
||||
temp_df["最小认购单位"] = pd.to_numeric(temp_df["最小认购单位"], errors="coerce")
|
||||
temp_df["最低认购额"] = pd.to_numeric(temp_df["最低认购额"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_cov_issue_cninfo(
|
||||
start_date: str = "20210913", end_date: str = "20211112"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
巨潮资讯-数据中心-专题统计-债券报表-债券发行-可转债发行
|
||||
http://webapi.cninfo.com.cn/#/thematicStatistics
|
||||
:param start_date: 开始统计时间
|
||||
:type start_date: str
|
||||
:param end_date: 开始统计时间
|
||||
:type end_date: str
|
||||
:return: 可转债发行
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1123"
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_content = _get_file_content_cninfo("cninfo.js")
|
||||
js_code.eval(js_content)
|
||||
mcode = js_code.call("getResCode1")
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Enckey": mcode,
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Content-Length": "0",
|
||||
"Host": "webapi.cninfo.com.cn",
|
||||
"Origin": "http://webapi.cninfo.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Proxy-Connection": "keep-alive",
|
||||
"Referer": "http://webapi.cninfo.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/93.0.4577.63 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
params = {
|
||||
"sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"edate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
}
|
||||
r = requests.post(url, headers=headers, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"F029D": "发行起始日",
|
||||
"SECNAME": "债券简称",
|
||||
"F027D": "转股开始日期",
|
||||
"F003D": "发行终止日",
|
||||
"F007N": "发行面值",
|
||||
"F053D": "转股终止日期",
|
||||
"F005N": "计划发行总量",
|
||||
"F051D": "网上申购日期",
|
||||
"F026N": "初始转股价格",
|
||||
"F066N": "网上申购数量下限",
|
||||
"F052N": "发行价格",
|
||||
"BONDNAME": "债券名称",
|
||||
"F014V": "发行对象",
|
||||
"F002V": "交易市场",
|
||||
"F032V": "网上申购简称",
|
||||
"F086V": "转股代码",
|
||||
"DECLAREDATE": "公告日期",
|
||||
"F028D": "债权登记日",
|
||||
"F004D": "优先申购日",
|
||||
"F068D": "网上申购中签结果公告日及退款日",
|
||||
"F054D": "优先申购缴款日",
|
||||
"F008N": "网上申购数量上限",
|
||||
"SECCODE": "债券代码",
|
||||
"F006N": "实际发行总量",
|
||||
"F067N": "网上申购单位",
|
||||
"F065N": "配售价格",
|
||||
"F017V": "承销方式",
|
||||
"F015V": "发行范围",
|
||||
"F013V": "发行方式",
|
||||
"F021V": "募资用途说明",
|
||||
"F031V": "网上申购代码",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"公告日期",
|
||||
"发行起始日",
|
||||
"发行终止日",
|
||||
"计划发行总量",
|
||||
"实际发行总量",
|
||||
"发行面值",
|
||||
"发行价格",
|
||||
"发行方式",
|
||||
"发行对象",
|
||||
"发行范围",
|
||||
"承销方式",
|
||||
"募资用途说明",
|
||||
"初始转股价格",
|
||||
"转股开始日期",
|
||||
"转股终止日期",
|
||||
"网上申购日期",
|
||||
"网上申购代码",
|
||||
"网上申购简称",
|
||||
"网上申购数量上限",
|
||||
"网上申购数量下限",
|
||||
"网上申购单位",
|
||||
"网上申购中签结果公告日及退款日",
|
||||
"优先申购日",
|
||||
"配售价格",
|
||||
"债权登记日",
|
||||
"优先申购缴款日",
|
||||
"转股代码",
|
||||
"交易市场",
|
||||
"债券名称",
|
||||
]
|
||||
]
|
||||
temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
|
||||
temp_df["发行起始日"] = pd.to_datetime(
|
||||
temp_df["发行起始日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["发行终止日"] = pd.to_datetime(
|
||||
temp_df["发行终止日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["转股开始日期"] = pd.to_datetime(
|
||||
temp_df["转股开始日期"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["转股终止日期"] = pd.to_datetime(
|
||||
temp_df["转股终止日期"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["转股终止日期"] = pd.to_datetime(
|
||||
temp_df["转股终止日期"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["网上申购日期"] = pd.to_datetime(
|
||||
temp_df["网上申购日期"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["网上申购中签结果公告日及退款日"] = pd.to_datetime(
|
||||
temp_df["网上申购中签结果公告日及退款日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["债权登记日"] = pd.to_datetime(
|
||||
temp_df["债权登记日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["优先申购日"] = pd.to_datetime(
|
||||
temp_df["优先申购日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["优先申购缴款日"] = pd.to_datetime(
|
||||
temp_df["优先申购缴款日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["计划发行总量"] = pd.to_numeric(temp_df["计划发行总量"], errors="coerce")
|
||||
temp_df["实际发行总量"] = pd.to_numeric(temp_df["实际发行总量"], errors="coerce")
|
||||
temp_df["发行面值"] = pd.to_numeric(temp_df["发行面值"], errors="coerce")
|
||||
temp_df["发行价格"] = pd.to_numeric(temp_df["发行价格"], errors="coerce")
|
||||
temp_df["初始转股价格"] = pd.to_numeric(temp_df["初始转股价格"], errors="coerce")
|
||||
temp_df["网上申购数量上限"] = pd.to_numeric(
|
||||
temp_df["网上申购数量上限"], errors="coerce"
|
||||
)
|
||||
temp_df["网上申购数量下限"] = pd.to_numeric(
|
||||
temp_df["网上申购数量下限"], errors="coerce"
|
||||
)
|
||||
temp_df["网上申购单位"] = pd.to_numeric(temp_df["网上申购单位"], errors="coerce")
|
||||
temp_df["配售价格"] = pd.to_numeric(temp_df["配售价格"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_cov_stock_issue_cninfo() -> pd.DataFrame:
|
||||
"""
|
||||
巨潮资讯-数据中心-专题统计-债券报表-债券发行-可转债转股
|
||||
http://webapi.cninfo.com.cn/#/thematicStatistics
|
||||
:return: 可转债转股
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1124"
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_content = _get_file_content_cninfo("cninfo.js")
|
||||
js_code.eval(js_content)
|
||||
mcode = js_code.call("getResCode1")
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Enckey": mcode,
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cache-Control": "no-cache",
|
||||
"Content-Length": "0",
|
||||
"Host": "webapi.cninfo.com.cn",
|
||||
"Origin": "http://webapi.cninfo.com.cn",
|
||||
"Pragma": "no-cache",
|
||||
"Proxy-Connection": "keep-alive",
|
||||
"Referer": "http://webapi.cninfo.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/93.0.4577.63 Safari/537.36",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
}
|
||||
r = requests.post(url, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["records"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"F003N": "转股价格",
|
||||
"SECNAME": "债券简称",
|
||||
"DECLAREDATE": "公告日期",
|
||||
"F005D": "自愿转换期终止日",
|
||||
"F004D": "自愿转换期起始日",
|
||||
"F017V": "标的股票",
|
||||
"BONDNAME": "债券名称",
|
||||
"F002V": "转股简称",
|
||||
"F001V": "转股代码",
|
||||
"SECCODE": "债券代码",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"公告日期",
|
||||
"转股代码",
|
||||
"转股简称",
|
||||
"转股价格",
|
||||
"自愿转换期起始日",
|
||||
"自愿转换期终止日",
|
||||
"标的股票",
|
||||
"债券名称",
|
||||
]
|
||||
]
|
||||
temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
|
||||
temp_df["自愿转换期起始日"] = pd.to_datetime(
|
||||
temp_df["自愿转换期起始日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["自愿转换期终止日"] = pd.to_datetime(
|
||||
temp_df["自愿转换期终止日"], errors="coerce"
|
||||
).dt.date
|
||||
temp_df["转股价格"] = pd.to_numeric(temp_df["转股价格"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_treasure_issue_cninfo_df = bond_treasure_issue_cninfo(
|
||||
start_date="20210910", end_date="20211109"
|
||||
)
|
||||
print(bond_treasure_issue_cninfo_df)
|
||||
|
||||
bond_local_government_issue_cninfo_df = bond_local_government_issue_cninfo(
|
||||
start_date="20210911", end_date="20211110"
|
||||
)
|
||||
print(bond_local_government_issue_cninfo_df)
|
||||
|
||||
bond_corporate_issue_cninfo_df = bond_corporate_issue_cninfo(
|
||||
start_date="20210911", end_date="20211110"
|
||||
)
|
||||
print(bond_corporate_issue_cninfo_df)
|
||||
|
||||
bond_cov_issue_cninfo_df = bond_cov_issue_cninfo(
|
||||
start_date="20210913", end_date="20211112"
|
||||
)
|
||||
print(bond_cov_issue_cninfo_df)
|
||||
|
||||
bond_cov_stock_issue_cninfo_df = bond_cov_stock_issue_cninfo()
|
||||
print(bond_cov_stock_issue_cninfo_df)
|
||||
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/3/16 9:00
|
||||
Desc:中国银行间市场交易商协会(https://www.nafmii.org.cn/)
|
||||
孔雀开屏(http://zhuce.nafmii.org.cn/fans/publicQuery/manager)的债券基本信息数据
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def bond_debt_nafmii(page: str = "1") -> pd.DataFrame:
|
||||
"""
|
||||
中国银行间市场交易商协会-非金融企业债务融资工具注册信息系统
|
||||
http://zhuce.nafmii.org.cn/fans/publicQuery/manager
|
||||
:param page: 输入数字页码
|
||||
:type page: int
|
||||
:return: 指定 sector 和 indicator 的数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://zhuce.nafmii.org.cn/fans/publicQuery/releFileProjDataGrid"
|
||||
payload = {
|
||||
"regFileName": "",
|
||||
"itemType": "",
|
||||
"startTime": "",
|
||||
"endTime": "",
|
||||
"entityName": "",
|
||||
"leadManager": "",
|
||||
"regPrdtType": "",
|
||||
"page": page,
|
||||
"rows": 50,
|
||||
}
|
||||
payload.update({"page": page})
|
||||
r = requests.post(url, data=payload)
|
||||
data_json = r.json() # 数据类型为 json 格式
|
||||
temp_df = pd.DataFrame(data_json["rows"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"firstIssueAmount": "金额",
|
||||
"isReg": "注册或备案",
|
||||
"regFileName": "债券名称",
|
||||
"regNoticeNo": "注册通知书文号",
|
||||
"regPrdtType": "品种",
|
||||
"releaseTime": "更新日期",
|
||||
"projPhase": "项目状态",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
if "注册通知书文号" not in temp_df.columns:
|
||||
temp_df["注册通知书文号"] = pd.NA
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"债券名称",
|
||||
"品种",
|
||||
"注册或备案",
|
||||
"金额",
|
||||
"注册通知书文号",
|
||||
"更新日期",
|
||||
"项目状态",
|
||||
]
|
||||
]
|
||||
temp_df["金额"] = pd.to_numeric(temp_df["金额"], errors="coerce")
|
||||
temp_df["更新日期"] = pd.to_datetime(temp_df["更新日期"], errors="coerce").dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_debt_nafmii_df = bond_debt_nafmii(page="1")
|
||||
print(bond_debt_nafmii_df)
|
||||
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2022/3/5 12:55
|
||||
Desc: 上登债券信息网-债券成交概览
|
||||
http://bond.sse.com.cn/data/statistics/overview/turnover/
|
||||
"""
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def bond_cash_summary_sse(date: str = "20210111") -> pd.DataFrame:
|
||||
"""
|
||||
上登债券信息网-市场数据-市场统计-市场概览-债券现券市场概览
|
||||
http://bond.sse.com.cn/data/statistics/overview/bondow/
|
||||
:param date: 指定日期
|
||||
:type date: str
|
||||
:return: 债券成交概览
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://query.sse.com.cn/commonExcelDd.do"
|
||||
headers = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Referer": "http://bond.sse.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
|
||||
}
|
||||
params = {
|
||||
"sqlId": "COMMON_SSEBOND_SCSJ_SCTJ_SCGL_ZQXQSCGL_CX_L",
|
||||
"TRADE_DATE": f"{date[:4]}-{date[4:6]}-{date[6:]}",
|
||||
}
|
||||
r = requests.get(url, params=params, headers=headers)
|
||||
temp_df = pd.read_excel(BytesIO(r.content), engine="xlrd")
|
||||
temp_df.columns = [
|
||||
"债券现货",
|
||||
"托管只数",
|
||||
"托管市值",
|
||||
"托管面值",
|
||||
"数据日期",
|
||||
]
|
||||
temp_df["托管只数"] = pd.to_numeric(temp_df["托管只数"])
|
||||
temp_df["托管市值"] = pd.to_numeric(temp_df["托管市值"])
|
||||
temp_df["托管面值"] = pd.to_numeric(temp_df["托管面值"])
|
||||
temp_df["数据日期"] = pd.to_datetime(temp_df["数据日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_deal_summary_sse(date: str = "20210104") -> pd.DataFrame:
|
||||
"""
|
||||
上登债券信息网-市场数据-市场统计-市场概览-债券成交概览
|
||||
http://bond.sse.com.cn/data/statistics/overview/turnover/
|
||||
:param date: 指定日期
|
||||
:type date: str
|
||||
:return: 债券成交概览
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "http://query.sse.com.cn/commonExcelDd.do"
|
||||
headers = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Referer": "http://bond.sse.com.cn/",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
|
||||
}
|
||||
params = {
|
||||
"sqlId": "COMMON_SSEBOND_SCSJ_SCTJ_SCGL_ZQCJGL_CX_L",
|
||||
"TRADE_DATE": f"{date[:4]}-{date[4:6]}-{date[6:]}",
|
||||
}
|
||||
r = requests.get(url, params=params, headers=headers)
|
||||
temp_df = pd.read_excel(BytesIO(r.content))
|
||||
temp_df.columns = [
|
||||
"债券类型",
|
||||
"当日成交笔数",
|
||||
"当日成交金额",
|
||||
"当年成交笔数",
|
||||
"当年成交金额",
|
||||
"数据日期",
|
||||
]
|
||||
temp_df["当日成交笔数"] = pd.to_numeric(temp_df["当日成交笔数"])
|
||||
temp_df["当日成交金额"] = pd.to_numeric(temp_df["当日成交金额"])
|
||||
temp_df["当年成交笔数"] = pd.to_numeric(temp_df["当年成交笔数"])
|
||||
temp_df["当年成交金额"] = pd.to_numeric(temp_df["当年成交金额"])
|
||||
temp_df["数据日期"] = pd.to_datetime(temp_df["数据日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_cash_summary_sse_df = bond_cash_summary_sse(date="20210111")
|
||||
print(bond_cash_summary_sse_df)
|
||||
|
||||
bond_summary_sse_df = bond_deal_summary_sse(date="20210111")
|
||||
print(bond_summary_sse_df)
|
||||
@@ -0,0 +1,714 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/7/4 15:00
|
||||
Desc: 新浪财经-债券-沪深可转债-实时行情数据和历史行情数据
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import re
|
||||
|
||||
import pandas as pd
|
||||
import py_mini_racer
|
||||
import requests
|
||||
|
||||
from akshare.bond.cons import (
|
||||
zh_sina_bond_hs_cov_count_url,
|
||||
zh_sina_bond_hs_cov_payload,
|
||||
zh_sina_bond_hs_cov_url,
|
||||
zh_sina_bond_hs_cov_hist_url,
|
||||
)
|
||||
from akshare.stock.cons import hk_js_decode
|
||||
from akshare.utils import demjson
|
||||
from akshare.utils.func import fetch_paginated_data
|
||||
from akshare.utils.tqdm import get_tqdm
|
||||
|
||||
|
||||
def _get_zh_bond_hs_cov_page_count() -> int:
|
||||
"""
|
||||
新浪财经-行情中心-债券-沪深可转债的总页数
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z
|
||||
:return: 总页数
|
||||
:rtype: int
|
||||
"""
|
||||
params = {
|
||||
"node": "hskzz_z",
|
||||
}
|
||||
r = requests.get(zh_sina_bond_hs_cov_count_url, params=params)
|
||||
page_count = int(re.findall(re.compile(r"\d+"), r.text)[0]) / 80
|
||||
if isinstance(page_count, int):
|
||||
return page_count
|
||||
else:
|
||||
return int(page_count) + 1
|
||||
|
||||
|
||||
def bond_zh_hs_cov_spot() -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-沪深可转债的实时行情数据; 大量抓取容易封IP
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z
|
||||
:return: 所有沪深可转债在当前时刻的实时行情数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
big_df = pd.DataFrame()
|
||||
page_count = _get_zh_bond_hs_cov_page_count()
|
||||
zh_sina_bond_hs_payload_copy = zh_sina_bond_hs_cov_payload.copy()
|
||||
tqdm = get_tqdm()
|
||||
for page in tqdm(range(1, page_count + 1), leave=False):
|
||||
zh_sina_bond_hs_payload_copy.update({"page": page})
|
||||
res = requests.get(zh_sina_bond_hs_cov_url, params=zh_sina_bond_hs_payload_copy)
|
||||
data_json = demjson.decode(res.text)
|
||||
big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)
|
||||
return big_df
|
||||
|
||||
|
||||
def bond_zh_hs_cov_daily(symbol: str = "sh010107") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-沪深可转债的历史行情数据, 大量抓取容易封 IP
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z
|
||||
:param symbol: 沪深可转债代码; e.g., sh010107
|
||||
:type symbol: str
|
||||
:return: 指定沪深可转债代码的日 K 线数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
r = requests.get(
|
||||
zh_sina_bond_hs_cov_hist_url.format(
|
||||
symbol, datetime.datetime.now().strftime("%Y_%m_%d")
|
||||
)
|
||||
)
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_code.eval(hk_js_decode)
|
||||
dict_list = js_code.call(
|
||||
"d", r.text.split("=")[1].split(";")[0].replace('"', "")
|
||||
) # 执行js解密代码
|
||||
data_df = pd.DataFrame(dict_list)
|
||||
data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
|
||||
return data_df
|
||||
|
||||
|
||||
def _code_id_map() -> dict:
|
||||
"""
|
||||
东方财富-股票和市场代码
|
||||
https://quote.eastmoney.com/center/gridlist.html#hs_a_board
|
||||
:return: 股票和市场代码
|
||||
:rtype: dict
|
||||
"""
|
||||
url = "https://80.push2.eastmoney.com/api/qt/clist/get"
|
||||
params = {
|
||||
"pn": "1",
|
||||
"pz": "100",
|
||||
"po": "1",
|
||||
"np": "1",
|
||||
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
||||
"fltt": "2",
|
||||
"invt": "2",
|
||||
"fid": "f12",
|
||||
"fs": "m:1 t:2,m:1 t:23",
|
||||
"fields": "f3,f12",
|
||||
}
|
||||
temp_df = fetch_paginated_data(url, params)
|
||||
temp_df["market_id"] = 1
|
||||
temp_df.rename(columns={"f12": "sh_code", "market_id": "sh_id"}, inplace=True)
|
||||
code_id_dict = dict(zip(temp_df["sh_code"], temp_df["sh_id"]))
|
||||
params = {
|
||||
"pn": "1",
|
||||
"pz": "100",
|
||||
"po": "1",
|
||||
"np": "1",
|
||||
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
||||
"fltt": "2",
|
||||
"invt": "2",
|
||||
"fid": "f3",
|
||||
"fs": "m:0 t:6,m:0 t:80",
|
||||
"fields": "f3,f12",
|
||||
}
|
||||
temp_df_sz = fetch_paginated_data(url, params)
|
||||
temp_df_sz["sz_id"] = 0
|
||||
code_id_dict.update(dict(zip(temp_df_sz["f12"], temp_df_sz["sz_id"])))
|
||||
return code_id_dict
|
||||
|
||||
|
||||
def bond_zh_hs_cov_min(
|
||||
symbol: str = "sz128039",
|
||||
period: str = "15",
|
||||
adjust: str = "",
|
||||
start_date: str = "1979-09-01 09:32:00",
|
||||
end_date: str = "2222-01-01 09:32:00",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-可转债-分时行情
|
||||
https://quote.eastmoney.com/concept/sz128039.html
|
||||
:param symbol: 转债代码
|
||||
:type symbol: str
|
||||
:param period: choice of {'1', '5', '15', '30', '60'}
|
||||
:type period: str
|
||||
:param adjust: choice of {'', 'qfq', 'hfq'}
|
||||
:type adjust: str
|
||||
:param start_date: 开始日期
|
||||
:type start_date: str
|
||||
:param end_date: 结束日期
|
||||
:type end_date: str
|
||||
:return: 分时行情
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
market_type = {"sh": "1", "sz": "0"}
|
||||
if period == "1":
|
||||
url = "https://push2.eastmoney.com/api/qt/stock/trends2/get"
|
||||
params = {
|
||||
"secid": f"{market_type[symbol[:2]]}.{symbol[2:]}",
|
||||
"fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
|
||||
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
|
||||
"iscr": "0",
|
||||
"iscca": "0",
|
||||
"ut": "f057cbcbce2a86e2866ab8877db1d059",
|
||||
"ndays": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(
|
||||
[item.split(",") for item in data_json["data"]["trends"]]
|
||||
)
|
||||
temp_df.columns = [
|
||||
"时间",
|
||||
"开盘",
|
||||
"收盘",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
"最新价",
|
||||
]
|
||||
temp_df.index = pd.to_datetime(temp_df["时间"])
|
||||
temp_df = temp_df[start_date:end_date]
|
||||
temp_df.reset_index(drop=True, inplace=True)
|
||||
temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
|
||||
temp_df["收盘"] = pd.to_numeric(temp_df["收盘"], errors="coerce")
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
||||
temp_df["时间"] = pd.to_datetime(temp_df["时间"]).astype(
|
||||
str
|
||||
) # show datatime here
|
||||
return temp_df
|
||||
else:
|
||||
adjust_map = {
|
||||
"": "0",
|
||||
"qfq": "1",
|
||||
"hfq": "2",
|
||||
}
|
||||
url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
|
||||
params = {
|
||||
"secid": f"{market_type[symbol[:2]]}.{symbol[2:]}",
|
||||
"klt": period,
|
||||
"fqt": adjust_map[adjust],
|
||||
"lmt": "66",
|
||||
"end": "20500000",
|
||||
"iscca": "1",
|
||||
"fields1": "f1,f2,f3,f4,f5",
|
||||
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
|
||||
"ut": "7eea3edcaed734bea9cbfc24409ed989",
|
||||
"forcect": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(
|
||||
[item.split(",") for item in data_json["data"]["klines"]]
|
||||
)
|
||||
temp_df.columns = [
|
||||
"时间",
|
||||
"开盘",
|
||||
"收盘",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
"振幅",
|
||||
"涨跌幅",
|
||||
"涨跌额",
|
||||
"换手率",
|
||||
]
|
||||
temp_df.index = pd.to_datetime(temp_df["时间"])
|
||||
temp_df = temp_df[start_date:end_date]
|
||||
temp_df.reset_index(drop=True, inplace=True)
|
||||
temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
|
||||
temp_df["收盘"] = pd.to_numeric(temp_df["收盘"], errors="coerce")
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
|
||||
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
||||
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
||||
temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
|
||||
temp_df["时间"] = pd.to_datetime(temp_df["时间"]).astype(str)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"开盘",
|
||||
"收盘",
|
||||
"最高",
|
||||
"最低",
|
||||
"涨跌幅",
|
||||
"涨跌额",
|
||||
"成交量",
|
||||
"成交额",
|
||||
"振幅",
|
||||
"换手率",
|
||||
]
|
||||
]
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_zh_hs_cov_pre_min(symbol: str = "sh113570") -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-可转债-分时行情-盘前
|
||||
https://quote.eastmoney.com/concept/sz128039.html
|
||||
:param symbol: 转债代码
|
||||
:type symbol: str
|
||||
:return: 分时行情-盘前
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
market_type = {"sh": "1", "sz": "0"}
|
||||
url = "https://push2.eastmoney.com/api/qt/stock/trends2/get"
|
||||
params = {
|
||||
"fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
|
||||
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
|
||||
"ndays": "1",
|
||||
"iscr": "1",
|
||||
"iscca": "0",
|
||||
"secid": f"{market_type[symbol[:2]]}.{symbol[2:]}",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["trends"]])
|
||||
temp_df.columns = [
|
||||
"时间",
|
||||
"开盘",
|
||||
"收盘",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
"最新价",
|
||||
]
|
||||
temp_df.index = pd.to_datetime(temp_df["时间"])
|
||||
temp_df.reset_index(drop=True, inplace=True)
|
||||
temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
|
||||
temp_df["收盘"] = pd.to_numeric(temp_df["收盘"], errors="coerce")
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
||||
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
||||
temp_df["时间"] = pd.to_datetime(temp_df["时间"]).astype(str)
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_zh_cov() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-数据中心-新股数据-可转债数据
|
||||
https://data.eastmoney.com/kzz/default.html
|
||||
:return: 可转债数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"sortColumns": "PUBLIC_START_DATE",
|
||||
"sortTypes": "-1",
|
||||
"pageSize": "500",
|
||||
"pageNumber": "1",
|
||||
"reportName": "RPT_BOND_CB_LIST",
|
||||
"columns": "ALL",
|
||||
"quoteColumns": "f2~01~CONVERT_STOCK_CODE~CONVERT_STOCK_PRICE,"
|
||||
"f235~10~SECURITY_CODE~TRANSFER_PRICE,f236~10~SECURITY_CODE~TRANSFER_VALUE,"
|
||||
"f2~10~SECURITY_CODE~CURRENT_BOND_PRICE,f237~10~SECURITY_CODE~TRANSFER_PREMIUM_RATIO,"
|
||||
"f239~10~SECURITY_CODE~RESALE_TRIG_PRICE,f240~10~SECURITY_CODE~REDEEM_TRIG_PRICE,"
|
||||
"f23~01~CONVERT_STOCK_CODE~PBV_RATIO",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
total_page = data_json["result"]["pages"]
|
||||
big_df = pd.DataFrame()
|
||||
tqdm = get_tqdm()
|
||||
for page in tqdm(range(1, total_page + 1), leave=False):
|
||||
params.update({"pageNumber": page})
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
||||
|
||||
big_df.columns = [
|
||||
"债券代码",
|
||||
"_",
|
||||
"_",
|
||||
"债券简称",
|
||||
"_",
|
||||
"上市时间",
|
||||
"正股代码",
|
||||
"_",
|
||||
"信用评级",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"发行规模",
|
||||
"申购上限",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"申购代码",
|
||||
"_",
|
||||
"申购日期",
|
||||
"_",
|
||||
"_",
|
||||
"中签号发布日",
|
||||
"原股东配售-股权登记日",
|
||||
"正股简称",
|
||||
"原股东配售-每股配售额",
|
||||
"_",
|
||||
"中签率",
|
||||
"-",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"正股价",
|
||||
"转股价",
|
||||
"转股价值",
|
||||
"债现价",
|
||||
"转股溢价率",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
"_",
|
||||
]
|
||||
big_df = big_df[
|
||||
[
|
||||
"债券代码",
|
||||
"债券简称",
|
||||
"申购日期",
|
||||
"申购代码",
|
||||
"申购上限",
|
||||
"正股代码",
|
||||
"正股简称",
|
||||
"正股价",
|
||||
"转股价",
|
||||
"转股价值",
|
||||
"债现价",
|
||||
"转股溢价率",
|
||||
"原股东配售-股权登记日",
|
||||
"原股东配售-每股配售额",
|
||||
"发行规模",
|
||||
"中签号发布日",
|
||||
"中签率",
|
||||
"上市时间",
|
||||
"信用评级",
|
||||
]
|
||||
]
|
||||
|
||||
big_df["申购上限"] = pd.to_numeric(big_df["申购上限"], errors="coerce")
|
||||
big_df["正股价"] = pd.to_numeric(big_df["正股价"], errors="coerce")
|
||||
big_df["转股价"] = pd.to_numeric(big_df["转股价"], errors="coerce")
|
||||
big_df["转股价值"] = pd.to_numeric(big_df["转股价值"], errors="coerce")
|
||||
big_df["债现价"] = pd.to_numeric(big_df["债现价"], errors="coerce")
|
||||
big_df["转股溢价率"] = pd.to_numeric(big_df["转股溢价率"], errors="coerce")
|
||||
big_df["原股东配售-每股配售额"] = pd.to_numeric(
|
||||
big_df["原股东配售-每股配售额"], errors="coerce"
|
||||
)
|
||||
big_df["发行规模"] = pd.to_numeric(big_df["发行规模"], errors="coerce")
|
||||
big_df["中签率"] = pd.to_numeric(big_df["中签率"], errors="coerce")
|
||||
big_df["中签号发布日"] = pd.to_datetime(
|
||||
big_df["中签号发布日"], errors="coerce"
|
||||
).dt.date
|
||||
big_df["上市时间"] = pd.to_datetime(big_df["上市时间"], errors="coerce").dt.date
|
||||
big_df["申购日期"] = pd.to_datetime(big_df["申购日期"], errors="coerce").dt.date
|
||||
big_df["原股东配售-股权登记日"] = pd.to_datetime(
|
||||
big_df["原股东配售-股权登记日"], errors="coerce"
|
||||
).dt.date
|
||||
big_df["债现价"] = big_df["债现价"].fillna(100)
|
||||
return big_df
|
||||
|
||||
|
||||
def bond_cov_comparison() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-行情中心-债券市场-可转债比价表
|
||||
https://quote.eastmoney.com/center/fullscreenlist.html#convertible_comparison
|
||||
:return: 可转债比价表数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://16.push2.eastmoney.com/api/qt/clist/get"
|
||||
params = {
|
||||
"pn": "1",
|
||||
"pz": "100",
|
||||
"po": "1",
|
||||
"np": "1",
|
||||
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
||||
"fltt": "2",
|
||||
"invt": "2",
|
||||
"fid": "f243",
|
||||
"fs": "b:MK0354",
|
||||
"fields": "f1,f152,f2,f3,f12,f13,f14,f227,f228,f229,f230,f231,f232,f233,f234,"
|
||||
"f235,f236,f237,f238,f239,f240,f241,f242,f26,f243",
|
||||
}
|
||||
temp_df = fetch_paginated_data(url, params)
|
||||
temp_df.columns = [
|
||||
"序号",
|
||||
"_",
|
||||
"转债最新价",
|
||||
"转债涨跌幅",
|
||||
"转债代码",
|
||||
"_",
|
||||
"转债名称",
|
||||
"上市日期",
|
||||
"_",
|
||||
"纯债价值",
|
||||
"_",
|
||||
"正股最新价",
|
||||
"正股涨跌幅",
|
||||
"_",
|
||||
"正股代码",
|
||||
"_",
|
||||
"正股名称",
|
||||
"转股价",
|
||||
"转股价值",
|
||||
"转股溢价率",
|
||||
"纯债溢价率",
|
||||
"回售触发价",
|
||||
"强赎触发价",
|
||||
"到期赎回价",
|
||||
"开始转股日",
|
||||
"申购日期",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"序号",
|
||||
"转债代码",
|
||||
"转债名称",
|
||||
"转债最新价",
|
||||
"转债涨跌幅",
|
||||
"正股代码",
|
||||
"正股名称",
|
||||
"正股最新价",
|
||||
"正股涨跌幅",
|
||||
"转股价",
|
||||
"转股价值",
|
||||
"转股溢价率",
|
||||
"纯债溢价率",
|
||||
"回售触发价",
|
||||
"强赎触发价",
|
||||
"到期赎回价",
|
||||
"纯债价值",
|
||||
"开始转股日",
|
||||
"上市日期",
|
||||
"申购日期",
|
||||
]
|
||||
]
|
||||
return temp_df
|
||||
|
||||
|
||||
def bond_zh_cov_info(
|
||||
symbol: str = "123121", indicator: str = "基本信息"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
https://data.eastmoney.com/kzz/detail/123121.html
|
||||
东方财富网-数据中心-新股数据-可转债详情
|
||||
:param symbol: 可转债代码
|
||||
:type symbol: str
|
||||
:param indicator: choice of {"基本信息", "中签号", "筹资用途", "重要日期"}
|
||||
:type indicator: str
|
||||
:return: 可转债详情
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
indicator_map = {
|
||||
"基本信息": "RPT_BOND_CB_LIST",
|
||||
"中签号": "RPT_CB_BALLOTNUM",
|
||||
"筹资用途": "RPT_BOND_BS_OPRFINVESTITEM",
|
||||
"重要日期": "RPT_CB_IMPORTANTDATE",
|
||||
}
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_BOND_CB_LIST",
|
||||
"columns": "ALL",
|
||||
"quoteColumns": "f2~01~CONVERT_STOCK_CODE~CONVERT_STOCK_PRICE,f235~10~SECURITY_CODE~TRANSFER_PRICE,"
|
||||
"f236~10~SECURITY_CODE~TRANSFER_VALUE,f2~10~SECURITY_CODE~CURRENT_BOND_PRICE,"
|
||||
"f237~10~SECURITY_CODE~TRANSFER_PREMIUM_RATIO,f239~10~SECURITY_CODE~RESALE_TRIG_PRICE,"
|
||||
"f240~10~SECURITY_CODE~REDEEM_TRIG_PRICE,f23~01~CONVERT_STOCK_CODE~PBV_RATIO",
|
||||
"quoteType": "0",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"filter": f'(SECURITY_CODE="{symbol}")',
|
||||
}
|
||||
if indicator == "基本信息":
|
||||
params.update(
|
||||
{
|
||||
"reportName": indicator_map[indicator],
|
||||
"quoteColumns": "f2~01~CONVERT_STOCK_CODE~CONVERT_STOCK_PRICE,f235~10~SECURITY_CODE~TRANSFER_PRICE,"
|
||||
"f236~10~SECURITY_CODE~TRANSFER_VALUE,f2~10~SECURITY_CODE~CURRENT_BOND_PRICE,"
|
||||
"f237~10~SECURITY_CODE~TRANSFER_PREMIUM_RATIO,f239~10~SECURITY_CODE~RESALE_TRIG_PRICE,"
|
||||
"f240~10~SECURITY_CODE~REDEEM_TRIG_PRICE,f23~01~CONVERT_STOCK_CODE~PBV_RATIO",
|
||||
}
|
||||
)
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame.from_dict(data_json["result"]["data"])
|
||||
return temp_df
|
||||
elif indicator == "中签号":
|
||||
params.update(
|
||||
{
|
||||
"reportName": indicator_map[indicator],
|
||||
"quoteColumns": "",
|
||||
}
|
||||
)
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame.from_dict(data_json["result"]["data"])
|
||||
return temp_df
|
||||
elif indicator == "筹资用途":
|
||||
params.update(
|
||||
{
|
||||
"reportName": indicator_map[indicator],
|
||||
"quoteColumns": "",
|
||||
"sortColumns": "SORT",
|
||||
"sortTypes": "1",
|
||||
}
|
||||
)
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame.from_dict(data_json["result"]["data"])
|
||||
return temp_df
|
||||
elif indicator == "重要日期":
|
||||
params.update(
|
||||
{
|
||||
"reportName": indicator_map[indicator],
|
||||
"quoteColumns": "",
|
||||
}
|
||||
)
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame.from_dict(data_json["result"]["data"])
|
||||
return temp_df
|
||||
else:
|
||||
return pd.DataFrame()
|
||||
|
||||
|
||||
def bond_zh_cov_value_analysis(symbol: str = "113527") -> pd.DataFrame:
|
||||
"""
|
||||
https://data.eastmoney.com/kzz/detail/113527.html
|
||||
东方财富网-数据中心-新股数据-可转债数据-价值分析-溢价率分析
|
||||
:param symbol: 可转债代码
|
||||
:type symbol: str
|
||||
:return: 可转债价值分析
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/get"
|
||||
params = {
|
||||
"sty": "ALL",
|
||||
"token": "894050c76af8597a853f5b408b759f5d",
|
||||
"st": "date",
|
||||
"sr": "1",
|
||||
"source": "WEB",
|
||||
"type": "RPTA_WEB_KZZ_LS",
|
||||
"filter": f'(zcode="{symbol}")',
|
||||
"p": "1",
|
||||
"ps": "8000",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"日期",
|
||||
"-",
|
||||
"-",
|
||||
"转股价值",
|
||||
"纯债价值",
|
||||
"纯债溢价率",
|
||||
"转股溢价率",
|
||||
"收盘价",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"日期",
|
||||
"收盘价",
|
||||
"纯债价值",
|
||||
"转股价值",
|
||||
"纯债溢价率",
|
||||
"转股溢价率",
|
||||
]
|
||||
]
|
||||
temp_df["收盘价"] = pd.to_numeric(temp_df["收盘价"], errors="coerce")
|
||||
temp_df["纯债价值"] = pd.to_numeric(temp_df["纯债价值"], errors="coerce")
|
||||
temp_df["转股价值"] = pd.to_numeric(temp_df["转股价值"], errors="coerce")
|
||||
temp_df["纯债溢价率"] = pd.to_numeric(temp_df["纯债溢价率"], errors="coerce")
|
||||
temp_df["转股溢价率"] = pd.to_numeric(temp_df["转股溢价率"], errors="coerce")
|
||||
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_zh_hs_cov_min_df = bond_zh_hs_cov_min(
|
||||
symbol="sz128039",
|
||||
period="1",
|
||||
adjust="hfq",
|
||||
start_date="1979-09-01 09:32:00",
|
||||
end_date="2222-01-01 09:32:00",
|
||||
)
|
||||
print(bond_zh_hs_cov_min_df)
|
||||
|
||||
bond_zh_hs_cov_pre_min_df = bond_zh_hs_cov_pre_min(symbol="sz128039")
|
||||
print(bond_zh_hs_cov_pre_min_df)
|
||||
|
||||
bond_zh_hs_cov_daily_df = bond_zh_hs_cov_daily(symbol="sz128039")
|
||||
print(bond_zh_hs_cov_daily_df)
|
||||
|
||||
bond_zh_hs_cov_spot_df = bond_zh_hs_cov_spot()
|
||||
print(bond_zh_hs_cov_spot_df)
|
||||
|
||||
bond_zh_cov_df = bond_zh_cov()
|
||||
print(bond_zh_cov_df)
|
||||
|
||||
bond_cov_comparison_df = bond_cov_comparison()
|
||||
print(bond_cov_comparison_df)
|
||||
|
||||
bond_zh_cov_info_df = bond_zh_cov_info(symbol="123121", indicator="基本信息")
|
||||
print(bond_zh_cov_info_df)
|
||||
|
||||
bond_zh_cov_value_analysis_df = bond_zh_cov_value_analysis(symbol="113527")
|
||||
print(bond_zh_cov_value_analysis_df)
|
||||
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/6/18 18:30
|
||||
Desc: 新浪财经-债券-沪深债券-实时行情数据和历史行情数据
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hs_z
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import re
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
import py_mini_racer
|
||||
|
||||
from akshare.bond.cons import (
|
||||
zh_sina_bond_hs_count_url,
|
||||
zh_sina_bond_hs_payload,
|
||||
zh_sina_bond_hs_url,
|
||||
zh_sina_bond_hs_hist_url,
|
||||
)
|
||||
from akshare.stock.cons import hk_js_decode
|
||||
from akshare.utils import demjson
|
||||
from akshare.utils.tqdm import get_tqdm
|
||||
|
||||
|
||||
def get_zh_bond_hs_page_count() -> int:
|
||||
"""
|
||||
行情中心首页-债券-沪深债券的总页数
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hs_z
|
||||
:return: 总页数
|
||||
:rtype: int
|
||||
"""
|
||||
params = {
|
||||
"node": "hs_z",
|
||||
}
|
||||
res = requests.get(zh_sina_bond_hs_count_url, params=params)
|
||||
page_count = int(re.findall(re.compile(r"\d+"), res.text)[0]) / 80
|
||||
if isinstance(page_count, int):
|
||||
return page_count
|
||||
else:
|
||||
return int(page_count) + 1
|
||||
|
||||
|
||||
def bond_zh_hs_spot(start_page: str = "1", end_page: str = "10") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-沪深债券-实时行情数据, 大量抓取容易封IP
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hs_z
|
||||
:param start_page: 分页起始页
|
||||
:type start_page: str
|
||||
:param end_page: 分页结束页
|
||||
:type end_page: str
|
||||
:return: 所有沪深债券在当前时刻的实时行情数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
page_count = get_zh_bond_hs_page_count()
|
||||
page_count = int(page_count)
|
||||
zh_sina_bond_hs_payload_copy = zh_sina_bond_hs_payload.copy()
|
||||
tqdm = get_tqdm()
|
||||
big_df = pd.DataFrame()
|
||||
start_page = int(start_page)
|
||||
end_page = int(end_page) + 1 if int(end_page) + 1 <= page_count else page_count
|
||||
for page in tqdm(range(start_page, end_page), leave=False):
|
||||
zh_sina_bond_hs_payload_copy.update({"page": page})
|
||||
r = requests.get(zh_sina_bond_hs_url, params=zh_sina_bond_hs_payload_copy)
|
||||
data_json = demjson.decode(r.text)
|
||||
temp_df = pd.DataFrame(data_json)
|
||||
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
||||
big_df.columns = [
|
||||
"代码",
|
||||
"-",
|
||||
"名称",
|
||||
"最新价",
|
||||
"涨跌额",
|
||||
"涨跌幅",
|
||||
"买入",
|
||||
"卖出",
|
||||
"昨收",
|
||||
"今开",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
]
|
||||
big_df = big_df[
|
||||
[
|
||||
"代码",
|
||||
"名称",
|
||||
"最新价",
|
||||
"涨跌额",
|
||||
"涨跌幅",
|
||||
"买入",
|
||||
"卖出",
|
||||
"昨收",
|
||||
"今开",
|
||||
"最高",
|
||||
"最低",
|
||||
"成交量",
|
||||
"成交额",
|
||||
]
|
||||
]
|
||||
big_df["买入"] = pd.to_numeric(big_df["买入"], errors="coerce")
|
||||
big_df["卖出"] = pd.to_numeric(big_df["卖出"], errors="coerce")
|
||||
big_df["昨收"] = pd.to_numeric(big_df["昨收"], errors="coerce")
|
||||
big_df["今开"] = pd.to_numeric(big_df["今开"], errors="coerce")
|
||||
big_df["最高"] = pd.to_numeric(big_df["最高"], errors="coerce")
|
||||
big_df["最低"] = pd.to_numeric(big_df["最低"], errors="coerce")
|
||||
big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
|
||||
return big_df
|
||||
|
||||
|
||||
def bond_zh_hs_daily(symbol: str = "sh010107") -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-债券-沪深债券-历史行情数据, 大量抓取容易封 IP
|
||||
https://vip.stock.finance.sina.com.cn/mkt/#hs_z
|
||||
:param symbol: 沪深债券代码; e.g., sh010107
|
||||
:type symbol: str
|
||||
:return: 指定沪深债券代码的日 K 线数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
r = requests.get(
|
||||
zh_sina_bond_hs_hist_url.format(
|
||||
symbol, datetime.datetime.now().strftime("%Y_%m_%d")
|
||||
)
|
||||
)
|
||||
js_code = py_mini_racer.MiniRacer()
|
||||
js_code.eval(hk_js_decode)
|
||||
dict_list = js_code.call(
|
||||
"d", r.text.split("=")[1].split(";")[0].replace('"', "")
|
||||
) # 执行 js 解密代码
|
||||
data_df = pd.DataFrame(dict_list)
|
||||
data_df["date"] = pd.to_datetime(data_df["date"], errors="coerce").dt.date
|
||||
data_df["open"] = pd.to_numeric(data_df["open"], errors="coerce")
|
||||
data_df["high"] = pd.to_numeric(data_df["high"], errors="coerce")
|
||||
data_df["low"] = pd.to_numeric(data_df["low"], errors="coerce")
|
||||
data_df["close"] = pd.to_numeric(data_df["close"], errors="coerce")
|
||||
return data_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bond_zh_hs_spot_df = bond_zh_hs_spot(start_page="1", end_page="5")
|
||||
print(bond_zh_hs_spot_df)
|
||||
|
||||
bond_zh_hs_daily_df = bond_zh_hs_daily(symbol="sh010107")
|
||||
print(bond_zh_hs_daily_df)
|
||||
@@ -0,0 +1,408 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2026/4/10 10:21
|
||||
Desc: 债券配置文件
|
||||
"""
|
||||
|
||||
INDEX_MAPPING: dict[str, str] = {
|
||||
"新综合指数": "8a8b2ca0332abed20134ea76d8885831",
|
||||
"高等级科技创新债券综合指数": "4d4aa3607fb4ba663b4587de4a624b24",
|
||||
"长江养老年金基金债券指数": "5846dca288299ac125539d6600c07853",
|
||||
"中信证券挂钩DR浮动利率政策性银行债活跃券指数": "11c92fe0df3940c3ea172bfec5126593",
|
||||
"股份制商业银行同业存单指数": "1398633fe32c4076f596530652d2f9bb",
|
||||
"金融高质量发展主题信用债指数": "20e35c92ef7b9a439fcaa8fce5835ea5",
|
||||
"交易所国债指数": "2c9081e50e8767dc010e87a4bdd20041",
|
||||
"进出口行债券总指数": "8a8b2ca054ef4e4e0154f0c515eb0002",
|
||||
"市场隐含评级AA信用债指数": "8a8b2cef6ab893c2016aba4c8ee7009f",
|
||||
"房地产行业信用债指数": "8a8b2cef73b68e6a0173b92f5e1774c5",
|
||||
"重庆市地方政府债指数": "8a8b2cef744be6d401744ebe4e6568c2",
|
||||
"甘肃省地方政府债指数": "8a8b2cef74608045017461d9115400c8",
|
||||
"公司信用类科技创新债券指数": "8641b0cb4c1f39c372dbcf5516b9c615",
|
||||
"长三角绿色债券指数": "8a8b2c8364aa0bb20164abfd957f000f",
|
||||
"企业债AA-指数": "8a8b2ca0406a93470140800885d20b7f",
|
||||
"中国高等级债券指数": "8a8b2ca047bd1dfe0147d317b62e2158",
|
||||
"中高等级公司信用类债券指数": "ef82cc4ba2540191dcdce19559153a3d",
|
||||
"系统重要性银行债券指数": "928c2552e9b15d784f02b13b53392d53",
|
||||
"红利现金流高等级股债金波动率控制1.5%指数": "b6b0f49ce87604657e97133968cb85bc",
|
||||
"中高等级粤港澳大湾区绿色债券指数": "cc2b58ce2230e6097b7b32447406c783",
|
||||
"投资级公司信用债综合指数": "4e808b033318be271f9b2063693a12ef",
|
||||
"中高等级绿色金融债券指数": "562d8e2d9d331c99a7a9f9fefded6907",
|
||||
"高等级科技创新债券指数": "0366fa8fafe2d1b12c62e4ffe11b97fe",
|
||||
"北京农商银行中高信用等级农村商业银行金融债券指数": "185bb3883f838a1fdfe60e9ca37f4b43",
|
||||
"货币市场基金可投资债券指数": "2c9081e918ad26f40118e90afbee66ae",
|
||||
"高信用等级债券指数": "2c9081e91da03927011dcc4fae9f6171",
|
||||
"非银金融行业信用债指数": "3396aaec56be7ba3378976c9387380f3",
|
||||
"商业银行无固定期限资本债券市场隐含评级AA指数": "3d75e320abd5c3440ddd156de1ee622e",
|
||||
"京津冀公司信用类债券指数": "8a8b2cef6d4bc1c2016d4ca23ef4251b",
|
||||
"京津冀债券综合指数": "8a8b2cef6d4bc1c2016d4caa15e8254a",
|
||||
"工行关键期限国债指数": "8a8b2cef6e1ee681016e200a8aa50400",
|
||||
"广东省地方政府债指数": "8a8b2cef7109a09c01710c14d2a74415",
|
||||
"厦门市地方政府债指数": "8a8b2cef732135fd017322a8e7c80113",
|
||||
"商业银行无固定期限资本债券AAA指数": "6b12c39d52c331dd5e3d1aabc4d9b5a6",
|
||||
"粤港澳大湾区绿色债券综合指数": "7fd4e2eda73794d409e592448adb8c25",
|
||||
"中高等级科技创新绿色普惠主题信用债指数": "865e39d03b6fd073781dbf1477a6cca1",
|
||||
"红利自由现金流低波股债恒定比例10/90指数": "8961444e141891490cba185d6b59cba2",
|
||||
"高信用等级企业债指数": "8a8b2ca03e4dd765013e6312d6462a1b",
|
||||
"农行乡村振兴债券指数": "e8df331cfd44e54f338bf2811716c6da",
|
||||
"城市商业银行及农村商业银行同业存单AAA指数": "8b8f70506d65f4675233a32c903ad552",
|
||||
"股债恒定组合10/90指数": "978a5b988dfe640d0d083981803d0675",
|
||||
"国信证券深圳市国有企业信用债精选指数": "9d895a4e2d56d6829590a5eb3ccf285d",
|
||||
"商业银行无固定期限资本债券指数": "a096ce5c63c2a1df2240b876c868c3ed",
|
||||
"银行间碳中和债券指数": "ac478f286376cf14bf6cbc68ca0aa284",
|
||||
"中高等级信用债综合指数": "b10fd010c80946bf881ca39dca62e49a",
|
||||
"贵阳银行西部高质量发展信用债精选指数": "c1dc7e964c26475afa239b00594b8275",
|
||||
"投资优选国际信用评级投资级活跃信用债指数": "d20fbfd3ed04a7261a0572967ffc06c3",
|
||||
"红利现金流高等级股债金波动率控制1%指数": "188b64de57c782a3b8a9359ff08f113d",
|
||||
"东方证券科技创新信用债精选指数": "2adeb5d8aa35cbcb0ea4a05614a75a08",
|
||||
"进出口行新发关键期限债券指数": "2e8da3759b4f83e0f0752147738f7fc9",
|
||||
"商业银行二级资本债券AAA指数": "3f6da52f1d57886271979d928af5a203",
|
||||
"粤港澳大湾区信用债指数": "8a8b2cef74b8f0c10174bac93afe436a",
|
||||
"投资优选信用债指数": "8a8b2cef771ce12601771df60d924fdb",
|
||||
"科技创新绿色普惠主题信用债指数": "6b227923cd44064bbf239a69f70f09ae",
|
||||
"中国高等级债券指数(美元)": "8a8b2c8f581cfb2f01581db3fd830001",
|
||||
"信用债总指数": "8a8b2ca038d716f10138dadde8416adc",
|
||||
"高等级科技创新及绿色债券指数": "f1df5dcfb61be8a2fbcbc119db98b149",
|
||||
"中邮理财高等级绿色债券精选指数": "f22aea49f4b11a53bd787b013253d5be",
|
||||
"平安人寿ESG整合策略信用债指数": "f711877ede9c7aa67bfe326721c2137e",
|
||||
"战略性新兴产业信用债指数": "f72725181b56144d3f9b55f1b6e60102",
|
||||
"商业银行债券AAA指数": "9883fcadeac6d8c22204f0c749e4cf08",
|
||||
"AAA评级债券综合指数": "b017c9c53c7ad6586b3446129c152616",
|
||||
"高等级黄河流域绿色债券指数": "bfbeeed1994639dcd0e0b94fda306b56",
|
||||
"高等级公司信用类债券综合指数": "c9a7185542022826b09dcc2ab72be8b1",
|
||||
"中信证券高等级同业存单指数": "0857793c945697daf6a9873ff42825f4",
|
||||
"浦银理财新质生产力发展债券指数": "103c0fdb82c06b6b9d7ec09f28b8b615",
|
||||
"银行间国债指数": "2c9081e50e8767dc010e87b559ee0078",
|
||||
"交易所高等级科技创新债券指数": "44a33e0c99dffbce14774eb52415a5b0",
|
||||
"银行间资产支持证券指数": "8a8b2ca055eba5e10155ed6ebc530895",
|
||||
"中国气候相关债券指数": "8a8b2ca056b9a4450156bb2be8df0002",
|
||||
"招商银行优选信用债指数": "8a8b2cef6dd6cd77016dd88a7e7d002c",
|
||||
"福建省地方政府债指数": "8a8b2cef732135fd017322145858008e",
|
||||
"市场隐含评级AA+及以上信用债指数": "8a8b2cef734f8f3701735061131b014a",
|
||||
"青海省地方政府债指数": "8a8b2cef74608045017461f9e203012a",
|
||||
"红利自由现金流低波股债恒定比例25/75指数": "6bae070303eed9cf867fd5011a0e47bb",
|
||||
"投资优选信用债分散指数": "6dd638194bb5a5f2de90bd7133192953",
|
||||
"高信用等级城市商业银行及农村商业银行债券指数": "81303c95d362b50182547f7385469b7b",
|
||||
"金融机构二级资本债券总指数": "8a8b2c8368edcfd70168f08992c6153a",
|
||||
"新中期票据总指数": "8a8b2ca0375f977f0138c2c322474b06",
|
||||
"高收益中期票据指数": "8a8b2ca03e29cab5013e3a180e064537",
|
||||
"商业银行二级资本债券指数": "b379a2dacd92d19ca805021c0d336ee8",
|
||||
"高信用等级商业银行无固定期限及二级资本债券指数": "ca7f4de2681f726e0d1268fd6f646788",
|
||||
"银行间科技创新债券指数": "4bde3b669a49e81e8de90e8df7687128",
|
||||
"金融行业信用债指数": "594b0c6f18d6dd3c6af0830d784058fa",
|
||||
"高等级科技创新债券行业精选指数": "1287a4c6c7bce84cbe9eab904468b9d5",
|
||||
"固定利率债券指数": "2c9081e50e8767dc010e87954b780011",
|
||||
"中信证券挂钩LPR浮动利率政策性银行债活跃券指数": "430f1876233c711f505500edce079236",
|
||||
"广西壮族自治区公司信用类债券指数": "8a8b2cef6b00accd016b022cffbb0009",
|
||||
"长三角债券综合指数": "8a8b2cef6b29dfac016b2bc115460040",
|
||||
"个人住房抵押贷款资产支持证券指数": "8a8b2cef6b96053a016b982c95e7001f",
|
||||
"青岛市地方政府债指数": "8a8b2cef7307763001730a5c824524ce",
|
||||
"煤炭行业信用债指数": "8a8b2cef73bbb4c60173bc59a0c90006",
|
||||
"安徽省公司信用类债券指数": "8a8b2c8367bdf89e0167c05355f201fb",
|
||||
"企业债AA+指数": "8a8b2ca0408e9fa701409edf078f26c0",
|
||||
"挂钩DR浮动利率政策性银行债指数": "db78a8ddda8a6ac88bc193055906740a",
|
||||
"红利自由现金流低波股债恒定比例20/80指数": "e638c5f176c772ddaf59e947af2d052e",
|
||||
"金融机构科技创新债券指数": "ecac759d61e1c09314d6f2577c20ce6c",
|
||||
"中豫信增河南省信用债指数": "f7948f9be0732d45e18f1d5c8190757f",
|
||||
"红利现金流中高等级股债金波动率控制1%指数": "8a9ab2cac146e25febba515cfa08d8cc",
|
||||
"电力行业优质转型企业信用债指数": "947d07b68357a6e40c93bf839efc2187",
|
||||
"工行熊猫债30指数": "9eee3a194d1f035ce0cf4307a5b9b69f",
|
||||
"申万宏源ESG绿色信用债精选指数": "a3dc0ed6ba8ab442783109d769baed5e",
|
||||
"天府信用增进公司增信债券指数": "aa0b6304e290a57bcda90e1358e13de9",
|
||||
"京津冀绿色债券综合指数": "d0df76dc4485ecd520c870d81703645c",
|
||||
"高等级科技创新绿色普惠主题信用债指数": "61c04cb52c2decb1cbba80292ab46ccd",
|
||||
"高信用等级数字经济产业信用债指数": "373e09025763c56cf01201234a794658",
|
||||
"中银理财高等级乡村振兴债券指数": "398f40c1c8dd2081f6e1ee478b768dbb",
|
||||
"国有大型商业银行及股份制商业银行债券指数": "469f1601d2b76750b82945b145e90992",
|
||||
"民营企业公司信用类债券指数": "8a8b2cef6b4dec2d016b4ebb4ec36c3f",
|
||||
"湖南省地方政府债指数": "8a8b2cef7132d3800171333ba262010c",
|
||||
"贵州省地方政府债指数": "8a8b2cef730c9c8f01730e79bade0185",
|
||||
"新疆维吾尔自治区(新疆生产建设兵团)地方政府债指数": "8a8b2cef7465a6a201746603d1a1005d",
|
||||
"国寿资产ESG信用债精选指数": "8a8b2cef7a11e7fc017a13fe7446002a",
|
||||
"中邮理财高等级科技创新债券精选指数": "773ade3d59c36dc1e13146c1866a8ccb",
|
||||
"平安理财ESG优选绿色债券指数": "89019c1cbbe64a34698165eecc7e7417",
|
||||
"中高等级公司债利差因子指数": "8a8b2c836393f4480163950643d92795",
|
||||
"长三角公司信用类债券指数": "8a8b2c83649fbee90164a24dbbc00013",
|
||||
"中信证券精选高等级资产支持证券指数": "8a8b2c83689643bc0168985a433e000e",
|
||||
"交易所科技创新债券指数": "963fc157a1f34898dd4071a355ea13bd",
|
||||
"中银理财高信用等级同业存单指数": "987527eff930a4986a5044a80cadae9e",
|
||||
"中银绿色债券指数": "abea1402e6dd628d02118bca571783cb",
|
||||
"国有大型商业银行同业存单指数": "af109288145de0c9a36332a4fb3d06c1",
|
||||
"中高等级长江经济带绿色债券指数": "d3c82122ac871f08eb5bf877065e5377",
|
||||
"AAA信用债综合指数": "05d235f4268241c25e36b27e13b13023",
|
||||
"红利自由现金流低波股债金恒定比例指数": "0ff243f048cbd219f59fb92ab8ae4941",
|
||||
"申万宏源中小微企业主题优选信用债指数": "1997fbc5e0a91db36e53c4540ae51cdd",
|
||||
"企业债总指数": "2c90818811d3f4fa01123837e6b30d4a",
|
||||
"商业银行债券指数": "2c9081e918ad26f401195c3a76a7210f",
|
||||
"公司债总指数": "8a8b2ca050d9e35d0150da6758462c78",
|
||||
"长江经济带债券综合指数": "8a8b2cef709854b501709a027fe4002f",
|
||||
"信用债价值因子权重调整策略指数": "8a8b2cef7422b3f30174234f30fd0005",
|
||||
"黑龙江省地方政府债指数": "8a8b2cef7456338c017457a55ccc07cc",
|
||||
"碳中和绿色债券指数": "8a8b2cef7823857e01782469e9210080",
|
||||
"投资优选政策性金融债指数": "8a8b2cef7a404137017a424e54cb7859",
|
||||
"中金公司乡村振兴信用债精选指数": "8a8b2cef7a4fb448017a515401a53fc4",
|
||||
"高等级公司信用类债券指数": "6fb584528c4d4aad6194d5a39a3b93a1",
|
||||
"京津冀科技创新债券指数": "74bdb50a9cbf9a45903346968a951bd3",
|
||||
"渤海银行新质生产力主题科技创新债券指数": "81a92ec45e9d90aa8961e9ac278fc435",
|
||||
"长三角地方政府债指数": "8a8b2c836303c237016304feb2160006",
|
||||
"AAA科技创新债券指数": "dff644648a8a007efd6a5b94970c0b89",
|
||||
"投资级中资美元债指数": "8a962d8c69c31e1e016a0f26a9c0010a",
|
||||
"成渝地区双城经济圈国有企业信用债精选指数": "03ffb378810766ab90ec7e959fadc3c0",
|
||||
"投资优选活跃信用债指数": "103a161c9927a9ae41e38f0887bbd33e",
|
||||
"北银理财绿色发展风险平价指数": "2c666b22d481c7eadb52992baa62591c",
|
||||
"中高等级科技创新债券综合指数": "3b02fa47414f502add64f1e77e9e67b7",
|
||||
"个人住房抵押贷款资产支持证券精选指数": "3b824a1426bea356799ca15d730ad6d1",
|
||||
"红利自由现金流低波股债金恒定比例10/85/5指数": "48643ba4f9bd31f07ec8efdc44ebf761",
|
||||
"高信用等级同业存单指数": "48fc8dfb472c5498c6612cd5151647d8",
|
||||
"中国绿色债券精选指数": "8a8b2ca053fd435d0153fefc94100001",
|
||||
"长三角中高等级信用债指数": "8a8b2cef6b4dec2d016b4fc04e286e57",
|
||||
"江西省地方政府债指数": "8a8b2cef732135fd017321b8405e0005",
|
||||
"江苏省地方政府债指数": "8a8b2c8368a5b6da0168a6bd29e80017",
|
||||
"中信证券国债及地方政府债精选指数": "8a8b2c83694a824d01694c5d53d6000a",
|
||||
"国债及政策性银行债指数": "8a8b2c8f5a62e9ca015a645fe3b60001",
|
||||
"高信用等级公司信用类债券综合指数": "8a8b2ca038f905c70139b9b3ab9660bb",
|
||||
"银行间高等级科技创新债券指数": "e4498669d5496afed08bdf7ff8695681",
|
||||
"公路行业信用债指数": "e65b5cdf6e3e04c7892bdfd1ccc1e2dc",
|
||||
"投资优选国际信用评级投资级信用债分散指数": "f5517678561c457f03b6d74c06440a3d",
|
||||
"高信用等级农村商业银行债券优选指数": "f8cbf35f3095aa44006f7fc7c506176d",
|
||||
"科技创新债券指数": "a485ef64ce0ae0f1f5cc088671e87d8f",
|
||||
"科技创新债券综合指数": "afb3fe2d59b5165a0175bac95b8c3da0",
|
||||
"高等级信用债指数": "d04f2fb3e1012c78b8acdecf2c93979f",
|
||||
"中高等级公司信用类债券综合指数": "5911892524d8b384666a88d75200c9df",
|
||||
"中高等级京津冀绿色债券指数": "00474c7a00eb73ca32a23a6861b4a418",
|
||||
"城市商业银行及农村商业银行债券AAA指数": "13fe6e5cd6a84a3038b8a5d46c7a38cb",
|
||||
"浦发银行绿色低碳股债优选指数": "2bdda0eb4cac30c07217f95a25a7a85f",
|
||||
"金融债券总指数": "2c9081e50e8767dc010e87a9d5650060",
|
||||
"离岸人民币中国主权及政策性金融债指数": "8a8b2cef6dcc80c0016dcf2444650bb7",
|
||||
"安徽省地方政府债指数": "8a8b2cef7311c2e7017312b23a650130",
|
||||
"AA国有企业信用债优选指数": "6b0d067864ff1675e96f3c49652fb73e",
|
||||
"中高等级信用债指数": "6cdea6720316fd5d69494b4bc0f8129c",
|
||||
"工行熊猫债AAA指数": "738751b4c9e76c9b7701fb0c201b70f1",
|
||||
"国有大型商业银行及股份制商业银行同业存单指数": "78598fc1ac4a8f2d327577e0481b065c",
|
||||
"黄金保值国开行债券风险平价指数": "806f9278922270298ee3e12c6d624ee5",
|
||||
"交行长三角ESG优选信用债指数": "ebd9f5ac057709c3fe5a375773e0c62d",
|
||||
"中信证券ESG优选信用债指数": "ece99ed16ea8c4c9d59befed1175f823",
|
||||
"数字经济产业信用债指数": "fa87c88adac6b304de5654c29b1569e1",
|
||||
"投资级公司信用债精选指数": "8d397b018e0ce97d58dedc3ef41ddf36",
|
||||
"中信证券久期轮动政策性金融债指数": "9c6218292a77139d38f12ac6ef85d138",
|
||||
"红利自由现金流低波股债恒定比例30/70指数": "d33a29eb4d1e1111af1e4b7097cca597",
|
||||
"高等级信用债综合指数": "5b78d41604e06e90b720144a6a956c67",
|
||||
"投资级公司科技创新债券精选指数": "0572b7d527231c98e4fc0de8abe2c7c2",
|
||||
"交易所信用债AAA指数": "05f743ba6a11b907de8307b89c4fc618",
|
||||
"高信用等级城市商业银行及农村商业银行同业存单指数": "0bb01422038bb4086e8baa8f648574e8",
|
||||
"高信用等级商业银行债券指数": "1a985201e4c5ceecdde9610e43a0fd35",
|
||||
"投资优选科技创新债券指数": "2ac380e3d3d941de8351f1fff8e6bda5",
|
||||
"固定利率金融债指数": "2c9081e50e8767dc010e87ad08140068",
|
||||
"银行间高等级碳中和债券指数": "37a60515edb02fe8dab961d9c7035a95",
|
||||
"同业存单AA+指数": "429c1ff7661c2abacdbcb5718a3cb5f6",
|
||||
"平安-可投资级信用债指数": "8a8b2ca0515fc8a60151618b84483c9a",
|
||||
"农发行债券总指数": "8a8b2ca0540790160154091b513d370e",
|
||||
"浙江省地方政府债指数": "8a8b2cef7109a09c01710c1c2d04478e",
|
||||
"上海市地方政府债指数": "8a8b2cef7408f4280174096a89a04112",
|
||||
"陕西省地方政府债指数": "8a8b2cef74510d2f01745168e5670004",
|
||||
"资产支持证券指数": "8a8b2cef74510d2f0174529d5a9f35b4",
|
||||
"吉林省地方政府债指数": "8a8b2cef74608045017461ccceff0073",
|
||||
"海南省地方政府债指数": "8a8b2cef74608045017461fe1768015f",
|
||||
"ESG优选信用债指数": "8a8b2cef75860ac0017587c644a02fde",
|
||||
"中金公司绿色资产支持证券指数": "8a8b2cef783d454901783f2c468307ec",
|
||||
"市场隐含评级AA+信用债指数": "8a8b2c836775df980167784a77520d4b",
|
||||
"同业存单总指数": "8a8b2c8f611af5db01611cb3586c00f0",
|
||||
"公司信用类债券指数": "8a8b2ca03a59370a013a676d717923da",
|
||||
"高收益企业债指数": "8a8b2ca03e88932b013e88b9d6290001",
|
||||
"企业债AAA指数": "8a8b2ca0408e9fa7014094a20f21001f",
|
||||
"AAA公司信用类债券综合指数": "e6b1e2fc01692f8fcd22ba50e501231a",
|
||||
"AAA公司信用类债券指数": "96377056fc894287b4a76ceebaca2808",
|
||||
"投资优选绿色债券指数": "984c68bfc0b9263aaad7bd9af36888a3",
|
||||
"系统重要性银行同业存单指数": "a08e1c9454a616491f5bf6431f2591b0",
|
||||
"投资级主题绿色债券优选指数": "be73e8263fc20359521707abd6db45b3",
|
||||
"高等级央企信用债精选指数": "cbfd21590b4805df8df7d9de222f8f7d",
|
||||
"红利现金流中高等级股债波动率控制1.5%指数": "d31602c38de87265603df05d6cf9dd59",
|
||||
"中高等级科技创新及绿色债券指数": "5ec55de5ac980c543c2d9bf25d6e423b",
|
||||
"金融高质量发展主题债券综合指数": "60bb107af9b99b8fb7c6a28ef4b171da",
|
||||
"商业银行无固定期限及二级资本债券指数": "0b96ff2a2948a75625e2319b49446633",
|
||||
"国开行债券总指数": "2c908188111fac07011125068f91044d",
|
||||
"综合指数": "2c90818811afed8d0111c0c672b31578",
|
||||
"固定利率企业债指数": "2c9081e918ad26f40118adb5d6910004",
|
||||
"中期票据总指数": "2c9081e91ebc9e41011ec8c7c0440001",
|
||||
"黄金保值债券风险平价指数": "3b9c19a3dd638fd2672c0728fce892a0",
|
||||
"广西壮族自治区地方政府债指数": "8a8b2cef7311c2e7017313a860bb03dc",
|
||||
"新疆维吾尔自治区地方政府债指数": "8a8b2cef74510d2f017453365ea0367c",
|
||||
"天津市地方政府债指数": "8a8b2cef7456338c017458e2e0da3e33",
|
||||
"投资优选综合指数": "8a8b2cef7682625f0176835c7a840070",
|
||||
"绿色债券综合指数": "85f86947411dd367018d7f8fde1dc295",
|
||||
"市场隐含评级AAA信用债指数": "8a8b2c836775df980167785153790d6b",
|
||||
"中国铁路债券指数": "8a8b2c8f5bea4d1b015bebe640530038",
|
||||
"企业债AA指数": "8a8b2ca0408e9fa70140949f012d0002",
|
||||
"地方政府债指数": "8a8b2ca0447ffe14014486b77f2a0002",
|
||||
"国泰海通陕川渝国企信用增强债券精选指数": "de861828ae11bc5f498a330c650fdf5a",
|
||||
"银行间高等级绿色债券指数": "9fa9718155dceab39e5149af665f68a7",
|
||||
"红利现金流高等级股债波动率控制1.5%指数": "a7f952e6f6ad14b1c66f5f950ed476de",
|
||||
"红利自由现金流低波股债恒定比例5/95指数": "c3bb7afced9999ce291380c0fc4dbca5",
|
||||
"绿色普惠主题金融债券优选指数": "d69df7413ed6e76fa5b9b20ba9e7c0ec",
|
||||
"建筑工程行业信用债指数": "0af700ba10feefc9a5191983eaadfc51",
|
||||
"长三角绿色债券综合指数": "2551cfa3eea577a3ca71d51bceca6f8f",
|
||||
"银行间债券总指数": "2c9081e50e8767dc010e87a3326c0039",
|
||||
"交易所AAA科技创新债券指数": "2d90f08c90b2e886bf6f6df549af950c",
|
||||
"AAA信用债指数": "3a2e8c74d7265e3e9aedfd8d1681836b",
|
||||
"银行间市场信用债AAA指数": "3c94ebab97ab6edf12ca14e452977115",
|
||||
"共同富裕主题债券指数": "430a7631f7ea66036a91f37e8b4b1c9c",
|
||||
"中国绿色债券指数": "8a8b2ca054079016015408674cce0017",
|
||||
"优选投资级信用债指数": "8a8b2cef771294700177144288381a6c",
|
||||
"投资优选地方政府债指数": "8a8b2cef7a404137017a4245018a7011",
|
||||
"湖北省地方政府债指数": "8a8b2c8368e383220168e4bae68500c9",
|
||||
"兴业绿色债券指数": "8a8b2c8f57df2edc0157e1163014176e",
|
||||
"银行普通债券AAA指数": "e36b9dc1620a0dc7ee027cca1663c526",
|
||||
"中期票据AAA指数": "9ced53d3f93b8cb9509a80d294086876",
|
||||
"黄金保值信用债风险平价指数": "b099abb287eebad09994ab481fe67f24",
|
||||
"浦发银行ESG精选债券指数": "6357eef4131197707f812ea9a7530a53",
|
||||
"北银理财京津冀企业高质量发展多元投资指数": "25895ebd4694c235a33aa9d360b04764",
|
||||
"固定利率国债指数": "2c9081e50e8767dc010e87a6a60b0050",
|
||||
"浮动利率金融债指数": "2c9081e50e8767dc010e87b3b1d60070",
|
||||
"AAA公司信用类科技创新债券指数": "3279a06da6f3a8e8a6429d32b0917cb7",
|
||||
"云南省地方政府债指数": "8a8b2cef7132d3800171330128ec0002",
|
||||
"辽宁省地方政府债指数": "8a8b2cef73265c58017326e66e310005",
|
||||
"长江经济带绿色债券综合指数": "7ebdf1292c65a1bcfcdab7546919312c",
|
||||
"关键期限国债指数": "8a8b2ca04b1e4a5b014b2a23197c72c5",
|
||||
"红利现金流中高等级股债波动率控制1%指数": "982441730a41cb3f45cf58bf0a21f2ee",
|
||||
"北京银行高信用等级城市商业银行债券指数": "b9a6d06e9b6458c9062f08a1dc75fd30",
|
||||
"中信证券个人汽车抵押贷款资产支持证券指数": "5cb7d4be4facd5353ac243620ebf2bde",
|
||||
"中高等级长三角绿色债券指数": "1432826c10c29fdd3b75258378e45aa1",
|
||||
"天风国际ESG优选中资美元债指数": "2d3ac1a7ccda4e7aadc605e2b1ca0c9b",
|
||||
"工行绿色债券指数": "31d4a4934ca82e11892f6bbb9be0ea04",
|
||||
"红利现金流中高等级股债金波动率控制1.5%指数": "47a631e45ce8b99708de3ecd775b64b7",
|
||||
"京津冀绿色债券指数": "8a8b2cef6db2c0f4016db432c17f0667",
|
||||
"河南省地方政府债指数": "8a8b2cef730c9c8f01730d1816ce0066",
|
||||
"内蒙古自治区地方政府债指数": "8a8b2cef7311c2e701731364881d032a",
|
||||
"制造行业信用债指数": "8a8b2cef73c6017e0173c882dd1c7801",
|
||||
"粤港澳大湾区绿色债券指数": "8a8b2cef747519b5017476a72ce653a2",
|
||||
"科技创新及绿色债券指数": "7dc84c0f21a71b97931fd7abadc78433",
|
||||
"投资级公司绿色债券精选指数": "80e6aa811418a5b9ac810c93ac381fed",
|
||||
"市场隐含评级AAA+信用债指数": "8a8b2c836775df9801677851e4360d74",
|
||||
"高等级公司信用类科技创新债券指数": "eba5e43f73c9d877657d88d3e00ad90c",
|
||||
"银行间绿色债券指数": "9da7e47f35b11c98cced95e4fb71b596",
|
||||
"高等级战略性新兴产业信用债指数": "adf7158832226e8e7361b78d0f5e4798",
|
||||
"红利自由现金流低波股债恒定比例15/85指数": "d0203aedec448bec95845ba349cc9e78",
|
||||
"电力行业信用债指数": "5cc7a4278c0c1cc0f82dc018c3c15fd1",
|
||||
"科技创新绿色普惠主题债券综合指数": "5e21777b1e179d595ebd9a78a6b89bf7",
|
||||
"中高等级战略性新兴产业信用债指数": "05b2d2e9b40a7f2324774c0b32f8cd70",
|
||||
"浮动利率债券指数": "2c9081e50e8767dc010e8797a5d70019",
|
||||
"京津冀地方政府债指数": "8a8b2cef6d4bc1c2016d4c96069c24fb",
|
||||
"宁波市地方政府债指数": "8a8b2cef73077630017307dc4339007c",
|
||||
"钢铁行业信用债指数": "8a8b2cef73c0db220173c140495c0058",
|
||||
"北京市地方政府债指数": "8a8b2cef7456338c017456818eba000a",
|
||||
"山西省地方政府债指数": "8a8b2cef746080450174619484ea000c",
|
||||
"宁夏回族自治区地方政府债指数": "8a8b2cef7460804501746219b518020a",
|
||||
"西藏自治区地方政府债指数": "8a8b2cef7465a6a2017465f9dc55000a",
|
||||
"投资优选国债指数": "8a8b2cef7a35f47f017a37c76654232d",
|
||||
"挂钩LPR浮动利率政策性银行债指数": "678165887609e2cb84fa87251c33fc08",
|
||||
"银行金融债券AAA指数": "81d917dad85d7ce95f51bc644484e1ff",
|
||||
"市场隐含评级AAA-信用债指数": "8a8b2c836775df980167785085850d62",
|
||||
"国有大型商业银行及股份制商业银行二级资本债券指数": "8a8b2c8367f69e950167f7b549f00005",
|
||||
"高信用等级中期票据指数": "8a8b2ca03d393e7c013d39c667963351",
|
||||
"高信用等级银行金融债券指数": "f187fd9f8ee0d88f9a59323d6a709e34",
|
||||
"同业存单AAA指数": "b15ef8073f38d8962cd7728a857f5cc8",
|
||||
"中高等级科技创新债券指数": "b7c74a6569cb5a38d7f1ab3ed20ca62b",
|
||||
"商业银行二级资本债券市场隐含评级AA指数": "c511c7a1a872fb2ca258474e95a45ab8",
|
||||
"高等级绿色公司信用类债券指数": "d8fbee7a51ae5901ea48aa7948bda83f",
|
||||
"银行间AAA科技创新债券指数": "571d2417bcf35b5dc808f3c480349090",
|
||||
"黄河流域绿色债券综合指数": "608e6e23ec091fdc8c879481ac979b19",
|
||||
"国债总指数": "2c9081e50e8767dc010e879acb220021",
|
||||
"长江经济带地方政府债指数": "8a8b2cef709d7b1201709f29b09f0084",
|
||||
"山东省地方政府债指数": "8a8b2cef70eaba740170ed2c79b44c04",
|
||||
"四川省地方政府债指数": "8a8b2cef7109a09c01710c04f8bb41fd",
|
||||
"深圳市地方政府债指数": "8a8b2cef7224de5f0172265a948a0089",
|
||||
"河北省地方政府债指数": "8a8b2cef730c9c8f01730d8ca18b00ee",
|
||||
"大连市地方政府债指数": "8a8b2cef73265c580173273fe9e2008d",
|
||||
"信用债价值因子精选策略指数": "8a8b2cef73a1f4f80173a2c0b2a4000e",
|
||||
"粤港澳大湾区债券综合指数": "8a8b2cef74adbfab0174afbea5434943",
|
||||
"利差驱动股债稳健指数": "890fcfb97ea76876563dfc1771652a22",
|
||||
"中债信用增进公司增信债券指数": "8a8b2ca03de1b1db013de91f3a6f2aee",
|
||||
"银行金融债券指数": "eae41b72f13a22c9b24a0a5887789000",
|
||||
"乡村振兴债券综合指数": "cec6a61bd8827e306fcba8f195a4903f",
|
||||
}
|
||||
|
||||
INDICATOR_MAPPING = {
|
||||
"全价": "QJZS",
|
||||
"净价": "JJZS",
|
||||
"财富": "CFZS",
|
||||
"平均市值法久期": "PJSZFJQ",
|
||||
"平均现金流法久期": "PJXJLFJQ",
|
||||
"平均市值法凸性": "PJSZFTX",
|
||||
"平均现金流法凸性": "PJXJLFTX",
|
||||
"平均现金流法到期收益率": "PJDQSYL",
|
||||
"平均市值法到期收益率": "PJSZFDQSYL",
|
||||
"平均基点价值": "PJJDJZ",
|
||||
"平均待偿期": "PJDCQ",
|
||||
"平均派息率": "PJPXL",
|
||||
"指数上日总市值": "ZSZSZ",
|
||||
"财富指数涨跌幅": "CFZSZDF",
|
||||
"全价指数涨跌幅": "QJZSZDF",
|
||||
"净价指数涨跌幅": "JJZSZDF",
|
||||
"现券结算量": "XQJSL",
|
||||
}
|
||||
|
||||
PERIOD_MAPPING = {
|
||||
"总值": "00",
|
||||
"1年以下": "01",
|
||||
"1-3年": "02",
|
||||
"3-5年": "03",
|
||||
"5-7年": "04",
|
||||
"7-10年": "05",
|
||||
"10年以上": "06",
|
||||
"0-3个月": "07",
|
||||
"3-6个月": "08",
|
||||
"6-9个月": "09",
|
||||
"9-12个月": "10",
|
||||
"0-6个月": "11",
|
||||
"6-12个月": "12",
|
||||
}
|
||||
|
||||
# bond-cov-sina
|
||||
zh_sina_bond_hs_cov_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple"
|
||||
zh_sina_bond_hs_cov_count_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple"
|
||||
zh_sina_bond_hs_cov_hist_url = (
|
||||
"https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}"
|
||||
)
|
||||
zh_sina_bond_hs_cov_payload = {
|
||||
"page": "1",
|
||||
"num": "80",
|
||||
"sort": "symbol",
|
||||
"asc": "1",
|
||||
"node": "hskzz_z",
|
||||
"_s_r_a": "page",
|
||||
}
|
||||
|
||||
# bond-sina
|
||||
zh_sina_bond_hs_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData"
|
||||
zh_sina_bond_hs_count_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple"
|
||||
zh_sina_bond_hs_hist_url = (
|
||||
"https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}"
|
||||
)
|
||||
zh_sina_bond_hs_payload = {
|
||||
"page": "1",
|
||||
"num": "80",
|
||||
"sort": "symbol",
|
||||
"asc": "1",
|
||||
"node": "hs_z",
|
||||
"_s_r_a": "page",
|
||||
}
|
||||
|
||||
# headers
|
||||
SHORT_HEADERS = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
|
||||
}
|
||||
|
||||
# quote
|
||||
MARKET_QUOTE_URL = "http://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbMktMakQuot?flag=1&lang=cn&abdAssetEncdShrtDesc=&emaEntyEncdShrtDesc="
|
||||
MARKET_QUOTE_PAYLOAD = {
|
||||
"flag": "1",
|
||||
"lang": "cn",
|
||||
"abdAssetEncdShrtDesc": "",
|
||||
"emaEntyEncdShrtDesc": "",
|
||||
}
|
||||
|
||||
# trade
|
||||
MARKET_TRADE_URL = (
|
||||
"http://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri?lang=cn&flag=1&bondName="
|
||||
)
|
||||
MARKET_TRADE_PAYLOAD = {"lang": "cn", "flag": "1", "bondName": ""}
|
||||
@@ -0,0 +1,173 @@
|
||||
"""
|
||||
Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
|
||||
https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
|
||||
论文地址:https://www.jstor.org/stable/10.1086/209650
|
||||
"""
|
||||
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def rv_from_stock_zh_a_hist_min_em(
|
||||
symbol="000001",
|
||||
start_date="2021-10-20 09:30:00",
|
||||
end_date="2024-11-01 15:00:00",
|
||||
period="1",
|
||||
adjust="hfq",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
从东方财富网获取股票的分钟级历史行情数据,并进行数据清洗和格式化为计算 yz 已实现波动率所需的数据格式
|
||||
https://quote.eastmoney.com/concept/sh603777.html?from=classic
|
||||
:param symbol: 股票代码,如"000001"
|
||||
:type symbol: str
|
||||
:param start_date: 开始日期时间,格式"YYYY-MM-DD HH:MM:SS"
|
||||
:type start_date: str
|
||||
:param end_date: 结束日期时间,格式"YYYY-MM-DD HH:MM:SS"
|
||||
:type end_date: str
|
||||
:param period: 时间周期,可选{'1','5','15','30','60'}分钟
|
||||
:type period: str
|
||||
:param adjust: 复权方式,可选{'','qfq'(前复权),'hfq'(后复权)}
|
||||
:type adjust: str
|
||||
:return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
from akshare.stock_feature.stock_hist_em import stock_zh_a_hist_min_em
|
||||
|
||||
temp_df = stock_zh_a_hist_min_em(
|
||||
symbol=symbol,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
period=period,
|
||||
adjust=adjust,
|
||||
)
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"时间": "Date",
|
||||
"开盘": "Open",
|
||||
"最高": "High",
|
||||
"最低": "Low",
|
||||
"收盘": "Close",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[temp_df["Open"] != 0]
|
||||
temp_df["Date"] = pd.to_datetime(temp_df["Date"])
|
||||
temp_df.set_index(keys="Date", inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
def rv_from_futures_zh_minute_sina(
|
||||
symbol: str = "IF2008", period: str = "5"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
从新浪财经获取期货的分钟级历史行情数据,并进行数据清洗和格式化
|
||||
https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
|
||||
:param symbol: 期货合约代码,如"IF2008"代表沪深300期货2020年8月合约
|
||||
:type symbol: str
|
||||
:param period: 时间周期,可选{'1','5','15','30','60'}分钟
|
||||
:type period: str
|
||||
:return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
from akshare.futures.futures_zh_sina import futures_zh_minute_sina
|
||||
|
||||
temp_df = futures_zh_minute_sina(symbol=symbol, period=period)
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"datetime": "Date",
|
||||
"open": "Open",
|
||||
"high": "High",
|
||||
"low": "Low",
|
||||
"close": "Close",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df["Date"] = pd.to_datetime(temp_df["Date"])
|
||||
temp_df.set_index(keys="Date", inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
def volatility_yz_rv(data: pd.DataFrame) -> pd.DataFrame:
|
||||
(
|
||||
"""
|
||||
波动率-已实现波动率-Yang-Zhang 已实现波动率(Yang-Zhang Realized Volatility)
|
||||
https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
|
||||
论文地址:https://www.jstor.org/stable/10.1086/209650
|
||||
基于以下公式计算:
|
||||
RV^2 = Vo + k*Vc + (1-k)*Vrs
|
||||
其中:
|
||||
- Vo: 隔夜波动率, Vo = 1/(n-1)*sum(Oi-Obar)^2
|
||||
Oi为标准化开盘价, Obar为标准化开盘价均值
|
||||
- Vc: 收盘波动率, Vc = 1/(n-1)*sum(ci-Cbar)^2
|
||||
ci为标准化收盘价, Cbar为标准化收盘价均值
|
||||
- k: 权重系数, k = 0.34/(1.34+(n+1)/(n-1))
|
||||
n为样本数量
|
||||
- Vrs: Rogers-Satchell波动率代理, Vrs = ui(ui-ci)+di(di-ci)
|
||||
ui = ln(Hi/Oi), ci = ln(Ci/Oi), di = ln(Li/Oi), oi = ln(Oi/Ci-1)
|
||||
Hi/Li/Ci/Oi分别为最高价/最低价/收盘价/开盘价
|
||||
|
||||
:param data: 包含 OHLC(开高低收) 价格的 pandas.DataFrame
|
||||
:type data: pandas.DataFrame
|
||||
:return: 包含 Yang-Zhang 实现波动率的 pandas.DataFrame
|
||||
:rtype: pandas.DataFrame
|
||||
|
||||
要求输入数据包含以下列:
|
||||
- Open: 开盘价
|
||||
- High: 最高价
|
||||
- Low: 最低价
|
||||
- Close: 收盘价
|
||||
# yang_zhang_rv formula is give as:
|
||||
# RV^2 = Vo + k*Vc + (1-k)*Vrs
|
||||
# where Vo = 1/(n-1)*sum(Oi-Obar)^2
|
||||
# with oi = normalized opening price at time t and Obar = mean of normalized opening prices
|
||||
# Vc = = 1/(n-1)*sum(ci-Cbar)^2
|
||||
# with ci = normalized close price at time t and Cbar = mean of normalized close prices
|
||||
# k = 0.34/(1.34+(n+1)/(n-1))
|
||||
# with n = total number of days or time periods considered
|
||||
# Vrs (Rogers & Satchell RV proxy) = ui(ui-ci)+di(di-ci)
|
||||
# with ui = ln(Hi/Oi), ci = ln(Ci/Oi), di=(Li/Oi), oi = ln(Oi/Ci-1)
|
||||
# where Hi = high price at time t and Li = low price at time t
|
||||
"""
|
||||
""
|
||||
)
|
||||
warnings.filterwarnings("ignore")
|
||||
|
||||
data["ui"] = np.log(np.divide(data["High"][1:], data["Open"][1:]))
|
||||
data["ci"] = np.log(np.divide(data["Close"][1:], data["Open"][1:]))
|
||||
data["di"] = np.log(np.divide(data["Low"][1:], data["Open"][1:]))
|
||||
data["oi"] = np.log(np.divide(data["Open"][1:], data["Close"][: len(data) - 1]))
|
||||
data = data[1:]
|
||||
data["RS"] = data["ui"] * (data["ui"] - data["ci"]) + data["di"] * (
|
||||
data["di"] - data["ci"]
|
||||
)
|
||||
rs_var = data["RS"].groupby(pd.Grouper(freq="1D")).mean().dropna()
|
||||
vc_and_vo = data[["oi", "ci"]].groupby(pd.Grouper(freq="1D")).var().dropna()
|
||||
n = int(len(data) / len(rs_var))
|
||||
k = 0.34 / (1.34 + (n + 1) / (n - 1))
|
||||
yang_zhang_rv = np.sqrt((1 - k) * rs_var + vc_and_vo["oi"] + vc_and_vo["ci"] * k)
|
||||
yang_zhang_rv_df = pd.DataFrame(yang_zhang_rv)
|
||||
yang_zhang_rv_df.rename(columns={0: "yz_rv"}, inplace=True)
|
||||
yang_zhang_rv_df.reset_index(inplace=True)
|
||||
yang_zhang_rv_df.columns = ["date", "rv"]
|
||||
yang_zhang_rv_df["date"] = pd.to_datetime(
|
||||
yang_zhang_rv_df["date"], errors="coerce"
|
||||
).dt.date
|
||||
return yang_zhang_rv_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
futures_df = rv_from_futures_zh_minute_sina(symbol="IF2008", period="1")
|
||||
volatility_yz_rv_df = volatility_yz_rv(data=futures_df)
|
||||
print(volatility_yz_rv_df)
|
||||
|
||||
stock_df = rv_from_stock_zh_a_hist_min_em(
|
||||
symbol="000001",
|
||||
start_date="2021-10-20 09:30:00",
|
||||
end_date="2024-11-01 15:00:00",
|
||||
period="5",
|
||||
adjust="",
|
||||
)
|
||||
volatility_yz_rv_df = volatility_yz_rv(data=stock_df)
|
||||
print(volatility_yz_rv_df)
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2020/10/23 13:51
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2023/9/5 15:41
|
||||
Desc: 芝加哥商业交易所-比特币成交量报告
|
||||
https://datacenter.jin10.com/reportType/dc_cme_btc_report
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def crypto_bitcoin_cme(date: str = "20230830") -> pd.DataFrame:
|
||||
"""
|
||||
芝加哥商业交易所-比特币成交量报告
|
||||
https://datacenter.jin10.com/reportType/dc_cme_btc_report
|
||||
:param date: Specific date, e.g., "20230830"
|
||||
:type date: str
|
||||
:return: 比特币成交量报告
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-api.jin10.com/reports/list"
|
||||
params = {
|
||||
"category": "cme",
|
||||
"date": "-".join([date[:4], date[4:6], date[6:]]),
|
||||
"attr_id": "4",
|
||||
}
|
||||
headers = {
|
||||
"accept": "*/*",
|
||||
"accept-encoding": "gzip, deflate, br",
|
||||
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"cache-control": "no-cache",
|
||||
"origin": "https://datacenter.jin10.com",
|
||||
"pragma": "no-cache",
|
||||
"referer": "https://datacenter.jin10.com/",
|
||||
"sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "same-site",
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36",
|
||||
"x-app-id": "rU6QIu7JHe2gOUeR",
|
||||
"x-csrf-token": "",
|
||||
"x-version": "1.0.0",
|
||||
}
|
||||
r = requests.get(url, params=params, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(
|
||||
[item for item in data_json["data"]["values"]],
|
||||
columns=[item["name"] for item in data_json["data"]["keys"]],
|
||||
)
|
||||
temp_df["电子交易合约"] = pd.to_numeric(temp_df["电子交易合约"], errors="coerce")
|
||||
temp_df["场内成交合约"] = pd.to_numeric(temp_df["场内成交合约"], errors="coerce")
|
||||
temp_df["场外成交合约"] = pd.to_numeric(temp_df["场外成交合约"], errors="coerce")
|
||||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||||
temp_df["未平仓合约"] = pd.to_numeric(temp_df["未平仓合约"], errors="coerce")
|
||||
temp_df["持仓变化"] = pd.to_numeric(temp_df["持仓变化"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
crypto_bitcoin_cme_df = crypto_bitcoin_cme(date="20230830")
|
||||
print(crypto_bitcoin_cme_df)
|
||||
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2023/8/31 23:00
|
||||
Desc: 金十数据-比特币持仓报告
|
||||
https://datacenter.jin10.com/dc_report?name=bitcoint
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def crypto_bitcoin_hold_report():
|
||||
"""
|
||||
金十数据-比特币持仓报告
|
||||
https://datacenter.jin10.com/dc_report?name=bitcoint
|
||||
:return: 比特币持仓报告
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-api.jin10.com/bitcoin_treasuries/list"
|
||||
headers = {
|
||||
"X-App-Id": "lnFP5lxse24wPgtY",
|
||||
"X-Version": "1.0.0",
|
||||
}
|
||||
r = requests.get(url, headers=headers)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["data"]["values"])
|
||||
temp_df.columns = [
|
||||
"代码",
|
||||
"公司名称-英文",
|
||||
"国家/地区",
|
||||
"市值",
|
||||
"比特币占市值比重",
|
||||
"持仓成本",
|
||||
"持仓占比",
|
||||
"持仓量",
|
||||
"当日持仓市值",
|
||||
"查询日期",
|
||||
"公告链接",
|
||||
"_",
|
||||
"分类",
|
||||
"倍数",
|
||||
"_",
|
||||
"公司名称-中文",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"代码",
|
||||
"公司名称-英文",
|
||||
"公司名称-中文",
|
||||
"国家/地区",
|
||||
"市值",
|
||||
"比特币占市值比重",
|
||||
"持仓成本",
|
||||
"持仓占比",
|
||||
"持仓量",
|
||||
"当日持仓市值",
|
||||
"查询日期",
|
||||
"公告链接",
|
||||
"分类",
|
||||
"倍数",
|
||||
]
|
||||
]
|
||||
temp_df["市值"] = pd.to_numeric(temp_df["市值"], errors="coerce")
|
||||
temp_df["比特币占市值比重"] = pd.to_numeric(
|
||||
temp_df["比特币占市值比重"], errors="coerce"
|
||||
)
|
||||
temp_df["持仓成本"] = pd.to_numeric(temp_df["持仓成本"], errors="coerce")
|
||||
temp_df["持仓占比"] = pd.to_numeric(temp_df["持仓占比"], errors="coerce")
|
||||
temp_df["持仓量"] = pd.to_numeric(temp_df["持仓量"], errors="coerce")
|
||||
temp_df["当日持仓市值"] = pd.to_numeric(temp_df["当日持仓市值"], errors="coerce")
|
||||
temp_df["倍数"] = pd.to_numeric(temp_df["倍数"], errors="coerce")
|
||||
temp_df["查询日期"] = pd.to_datetime(temp_df["查询日期"], errors="coerce").dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
crypto_bitcoin_hold_report_df = crypto_bitcoin_hold_report()
|
||||
print(crypto_bitcoin_hold_report_df)
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2020/3/6 16:40
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,184 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2023/7/24 18:30
|
||||
Desc: currencybeacon 提供的外汇数据
|
||||
该网站需要先注册后获取 API 使用
|
||||
https://currencyscoop.com/
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def currency_latest(
|
||||
base: str = "USD", symbols: str = "", api_key: str = ""
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Latest data from currencyscoop.com
|
||||
https://currencyscoop.com/api-documentation
|
||||
:param base: The base currency you would like to use for your rates
|
||||
:type base: str
|
||||
:param symbols: A list of currencies you will like to see the rates for. You can refer to a list all supported currencies here
|
||||
:type symbols: str
|
||||
:param api_key: Account -> Account Details -> API KEY (use as password in external tools)
|
||||
:type api_key: str
|
||||
:return: Latest data of base currency
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
params = {"base": base, "symbols": symbols, "api_key": api_key}
|
||||
url = "https://api.currencyscoop.com/v1/latest"
|
||||
r = requests.get(url, params=params)
|
||||
temp_df = pd.DataFrame.from_dict(r.json()["response"])
|
||||
temp_df["date"] = pd.to_datetime(temp_df["date"])
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.rename(columns={"index": "currency"}, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
def currency_history(
|
||||
base: str = "USD", date: str = "2023-02-03", symbols: str = "", api_key: str = ""
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Latest data from currencyscoop.com
|
||||
https://currencyscoop.com/api-documentation
|
||||
:param base: The base currency you would like to use for your rates
|
||||
:type base: str
|
||||
:param date: Specific date, e.g., "2020-02-03"
|
||||
:type date: str
|
||||
:param symbols: A list of currencies you will like to see the rates for. You can refer to a list all supported currencies here
|
||||
:type symbols: str
|
||||
:param api_key: Account -> Account Details -> API KEY (use as password in external tools)
|
||||
:type api_key: str
|
||||
:return: Latest data of base currency
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
params = {"base": base, "date": date, "symbols": symbols, "api_key": api_key}
|
||||
url = "https://api.currencyscoop.com/v1/historical"
|
||||
r = requests.get(url, params=params)
|
||||
temp_df = pd.DataFrame.from_dict(r.json()["response"])
|
||||
temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.rename(columns={"index": "currency"}, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
def currency_time_series(
|
||||
base: str = "USD",
|
||||
start_date: str = "2023-02-03",
|
||||
end_date: str = "2023-03-04",
|
||||
symbols: str = "",
|
||||
api_key: str = "",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Time-series data from currencyscoop.com
|
||||
P.S. need special authority
|
||||
https://currencyscoop.com/api-documentation
|
||||
:param base: The base currency you would like to use for your rates
|
||||
:type base: str
|
||||
:param start_date: Specific date, e.g., "2020-02-03"
|
||||
:type start_date: str
|
||||
:param end_date: Specific date, e.g., "2020-02-03"
|
||||
:type end_date: str
|
||||
:param symbols: A list of currencies you will like to see the rates for. You can refer to a list all supported currencies here
|
||||
:type symbols: str
|
||||
:param api_key: Account -> Account Details -> API KEY (use as password in external tools)
|
||||
:type api_key: str
|
||||
:return: Latest data of base currency
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
params = {
|
||||
"base": base,
|
||||
"api_key": api_key,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"symbols": symbols,
|
||||
}
|
||||
url = "https://api.currencyscoop.com/v1/timeseries"
|
||||
r = requests.get(url, params=params)
|
||||
temp_df = pd.DataFrame.from_dict(r.json()["response"])
|
||||
temp_df = temp_df.T
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.rename(columns={"index": "date"}, inplace=True)
|
||||
temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
def currency_currencies(c_type: str = "fiat", api_key: str = "") -> pd.DataFrame:
|
||||
"""
|
||||
currencies data from currencyscoop.com
|
||||
https://currencyscoop.com/api-documentation
|
||||
:param c_type: now only "fiat" can return data
|
||||
:type c_type: str
|
||||
:param api_key: Account -> Account Details -> API KEY (use as password in external tools)
|
||||
:type api_key: str
|
||||
:return: Latest data of base currency
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
params = {"type": c_type, "api_key": api_key}
|
||||
url = "https://api.currencyscoop.com/v1/currencies"
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["response"])
|
||||
return temp_df
|
||||
|
||||
|
||||
def currency_convert(
|
||||
base: str = "USD",
|
||||
to: str = "CNY",
|
||||
amount: str = "10000",
|
||||
api_key: str = "",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
currencies data from currencyscoop.com
|
||||
https://currencyscoop.com/api-documentation
|
||||
:param base: The base currency you would like to use for your rates
|
||||
:type base: str
|
||||
:param to: The currency you would like to use for your rates
|
||||
:type to: str
|
||||
:param amount: The amount of base currency
|
||||
:type amount: str
|
||||
:param api_key: Account -> Account Details -> API KEY (use as password in external tools)
|
||||
:type api_key: str
|
||||
:return: Latest data of base currency
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
params = {
|
||||
"from": base,
|
||||
"to": to,
|
||||
"amount": amount,
|
||||
"api_key": api_key,
|
||||
}
|
||||
url = "https://api.currencyscoop.com/v1/convert"
|
||||
r = requests.get(url, params=params)
|
||||
temp_se = pd.Series(r.json()["response"])
|
||||
temp_se["timestamp"] = pd.to_datetime(temp_se["timestamp"], unit="s")
|
||||
temp_df = temp_se.to_frame()
|
||||
temp_df.reset_index(inplace=True)
|
||||
temp_df.columns = ["item", "value"]
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
currency_latest_df = currency_latest(base="USD", api_key="")
|
||||
print(currency_latest_df)
|
||||
|
||||
currency_history_df = currency_history(base="USD", date="2023-02-03", api_key="")
|
||||
print(currency_history_df)
|
||||
|
||||
currency_time_series_df = currency_time_series(
|
||||
base="USD",
|
||||
start_date="2023-02-03",
|
||||
end_date="2023-03-04",
|
||||
symbols="",
|
||||
api_key="",
|
||||
)
|
||||
print(currency_time_series_df)
|
||||
|
||||
currency_currencies_df = currency_currencies(c_type="fiat", api_key="")
|
||||
print(currency_currencies_df)
|
||||
|
||||
currency_convert_se = currency_convert(
|
||||
base="USD", to="CNY", amount="10000", api_key=""
|
||||
)
|
||||
print(currency_convert_se)
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/12/8 17:20
|
||||
Desc: 新浪财经-中行人民币牌价历史数据查询
|
||||
https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0
|
||||
"""
|
||||
|
||||
from functools import lru_cache
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from tqdm import tqdm
|
||||
|
||||
|
||||
@lru_cache()
|
||||
def _currency_boc_sina_map(
|
||||
start_date: str = "20210614", end_date: str = "20230810"
|
||||
) -> dict:
|
||||
"""
|
||||
外汇 symbol 和代码映射
|
||||
https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0
|
||||
:param start_date: 开始交易日
|
||||
:type start_date: str
|
||||
:param end_date: 结束交易日
|
||||
:type end_date: str
|
||||
:return: 外汇 symbol 和代码映射
|
||||
:rtype: dict
|
||||
"""
|
||||
url = "http://biz.finance.sina.com.cn/forex/forex.php"
|
||||
params = {
|
||||
"startdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"enddate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
"money_code": "EUR",
|
||||
"type": "0",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
r.encoding = "gbk"
|
||||
soup = BeautifulSoup(r.text, "lxml")
|
||||
data_dict = dict(
|
||||
zip(
|
||||
[
|
||||
item.text
|
||||
for item in soup.find(attrs={"id": "money_code"}).find_all("option")
|
||||
],
|
||||
[
|
||||
item["value"]
|
||||
for item in soup.find(attrs={"id": "money_code"}).find_all("option")
|
||||
],
|
||||
)
|
||||
)
|
||||
return data_dict
|
||||
|
||||
|
||||
def currency_boc_sina(
|
||||
symbol: str = "美元", start_date: str = "20230304", end_date: str = "20231110"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
新浪财经-中行人民币牌价历史数据查询
|
||||
https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0
|
||||
:param symbol: choice of {'美元', '英镑', '欧元', '澳门元', '泰国铢', '菲律宾比索', '港币', '瑞士法郎', '新加坡元', '瑞典克朗', '丹麦克朗', '挪威克朗', '日元', '加拿大元', '澳大利亚元', '新西兰元', '韩国元'}
|
||||
:type symbol: str
|
||||
:param start_date: 开始交易日
|
||||
:type start_date: str
|
||||
:param end_date: 结束交易日
|
||||
:type end_date: str
|
||||
:return: 中行人民币牌价历史数据查询
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
data_dict = _currency_boc_sina_map(start_date=start_date, end_date=end_date)
|
||||
url = "http://biz.finance.sina.com.cn/forex/forex.php"
|
||||
params = {
|
||||
"money_code": data_dict[symbol],
|
||||
"type": "0",
|
||||
"startdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
||||
"enddate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
||||
"page": "1",
|
||||
"call_type": "ajax",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
soup = BeautifulSoup(r.text, features="lxml")
|
||||
soup.find(attrs={"id": "money_code"})
|
||||
page_element_list = soup.find_all("a", attrs={"class": "page"})
|
||||
page_num = int(page_element_list[-2].text) if len(page_element_list) != 0 else 1
|
||||
big_df = pd.DataFrame()
|
||||
for page in tqdm(range(1, page_num + 1), leave=False):
|
||||
params.update({"page": page})
|
||||
r = requests.get(url, params=params)
|
||||
temp_df = pd.read_html(StringIO(r.text), header=0)[0]
|
||||
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
||||
big_df.columns = [
|
||||
"日期",
|
||||
"中行汇买价",
|
||||
"中行钞买价",
|
||||
"中行钞卖价/汇卖价",
|
||||
"央行中间价",
|
||||
"中行折算价",
|
||||
]
|
||||
big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce").dt.date
|
||||
big_df["中行汇买价"] = pd.to_numeric(big_df["中行汇买价"], errors="coerce")
|
||||
big_df["中行钞买价"] = pd.to_numeric(big_df["中行钞买价"], errors="coerce")
|
||||
big_df["中行钞卖价/汇卖价"] = pd.to_numeric(
|
||||
big_df["中行钞卖价/汇卖价"], errors="coerce"
|
||||
)
|
||||
big_df["央行中间价"] = pd.to_numeric(big_df["央行中间价"], errors="coerce")
|
||||
big_df["中行折算价"] = pd.to_numeric(big_df["中行折算价"], errors="coerce")
|
||||
big_df.sort_values(by=["日期"], inplace=True, ignore_index=True)
|
||||
return big_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
currency_boc_sina_df = currency_boc_sina(
|
||||
symbol="美元", start_date="20230304", end_date="20231110"
|
||||
)
|
||||
print(currency_boc_sina_df)
|
||||
@@ -0,0 +1,60 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2024/4/29 17:00
|
||||
Desc: 人民币汇率中间价
|
||||
https://www.safe.gov.cn/safe/rmbhlzjj/index.html
|
||||
"""
|
||||
|
||||
import re
|
||||
from datetime import datetime
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
|
||||
def currency_boc_safe() -> pd.DataFrame:
|
||||
"""
|
||||
人民币汇率中间价
|
||||
https://www.safe.gov.cn/safe/rmbhlzjj/index.html
|
||||
:return: 人民币汇率中间价
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://www.safe.gov.cn/safe/2020/1218/17833.html"
|
||||
r = requests.get(url)
|
||||
r.encoding = "utf8"
|
||||
soup = BeautifulSoup(r.text, features="lxml")
|
||||
content = soup.find(name="a", string=re.compile("人民币汇率"))["href"]
|
||||
url = f"https://www.safe.gov.cn{content}"
|
||||
temp_df = pd.read_excel(url)
|
||||
temp_df.sort_values(by=["日期"], inplace=True)
|
||||
temp_df.reset_index(inplace=True, drop=True)
|
||||
start_date = (
|
||||
(pd.Timestamp(temp_df["日期"].tolist()[-1]) + pd.Timedelta(days=1))
|
||||
.isoformat()
|
||||
.split("T")[0]
|
||||
)
|
||||
end_date = datetime.now().isoformat().split("T")[0]
|
||||
url = "https://www.safe.gov.cn/AppStructured/hlw/RMBQuery.do"
|
||||
payload = {
|
||||
"startDate": start_date,
|
||||
"endDate": end_date,
|
||||
"queryYN": "true",
|
||||
}
|
||||
r = requests.post(url, data=payload)
|
||||
current_temp_df = pd.read_html(StringIO(r.text))[-1]
|
||||
current_temp_df.sort_values(by=["日期"], inplace=True)
|
||||
current_temp_df.reset_index(inplace=True, drop=True)
|
||||
big_df = pd.concat(objs=[temp_df, current_temp_df], ignore_index=True)
|
||||
column_name_list = big_df.columns[1:]
|
||||
for item in column_name_list:
|
||||
big_df[item] = pd.to_numeric(big_df[item], errors="coerce")
|
||||
big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce").dt.date
|
||||
return big_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
currency_boc_safe_df = currency_boc_safe()
|
||||
print(currency_boc_safe_df)
|
||||
@@ -0,0 +1,6 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2022/5/9 18:08
|
||||
Desc:
|
||||
"""
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,989 @@
|
||||
var TOKEN_SERVER_TIME = 1572845499.629;
|
||||
function v_cookie (r, n, t, e, a) {
|
||||
var u = n[0],
|
||||
c = n[1],
|
||||
v = a[0],
|
||||
s = t[0],
|
||||
f = t[1],
|
||||
l = r[0],
|
||||
d = hr(a[1], e[0], t[2]),
|
||||
p = t[3],
|
||||
h = e[1],
|
||||
g = yr(a[2], a[3], e[2]),
|
||||
m = yr(a[4], r[1], t[4]),
|
||||
w = r[2],
|
||||
I = a[5],
|
||||
_ = a[6],
|
||||
y = a[7],
|
||||
E = hr(n[2], r[3], r[4]),
|
||||
A = t[5],
|
||||
C = e[3],
|
||||
b = e[4],
|
||||
B = t[6],
|
||||
R = a[8],
|
||||
T = a[9],
|
||||
S = n[3],
|
||||
k = t[7],
|
||||
x = t[8],
|
||||
O = a[10],
|
||||
L = n[4],
|
||||
M = n[5],
|
||||
N = a[11],
|
||||
P = e[5],
|
||||
j = hr(n[6], e[6], t[9], r[5]),
|
||||
D = t[10],
|
||||
W = e[7],
|
||||
$ = r[6],
|
||||
F = yr(r[7], t[11], e[8], n[7]),
|
||||
X = r[8],
|
||||
H = t[12],
|
||||
K = r[9],
|
||||
U = n[8],
|
||||
V = e[9],
|
||||
Y = r[10],
|
||||
J = e[10],
|
||||
q = r[11],
|
||||
Q = a[12],
|
||||
Z = n[9],
|
||||
G = t[13],
|
||||
z = t[14],
|
||||
rr = t[15],
|
||||
nr = n[10],
|
||||
tr = a[13],
|
||||
er = a[14],
|
||||
ar = e[11],
|
||||
or = r[12],
|
||||
ir = yr(t[16], r[13], r[14], r[15]),
|
||||
ur = t[17],
|
||||
cr = t[18];
|
||||
function vr () {
|
||||
var r = arguments[n[11]];
|
||||
return r.split(n[12]).reverse().join(e[12])
|
||||
}
|
||||
var sr = [new e[13](hr(a[15], n[13], a[16])), new e[13](a[17])];
|
||||
function fr () {
|
||||
var n = arguments[a[18]];
|
||||
if (!n) return a[19];
|
||||
for (var o = t[19], i = e[14], u = e[15]; u < n.length; u++)
|
||||
{
|
||||
var c = n.charCodeAt(u),
|
||||
v = c ^ i;
|
||||
i = c,
|
||||
o += r[16].fromCharCode(v)
|
||||
}
|
||||
return o
|
||||
}
|
||||
var lr = '',
|
||||
dr; !
|
||||
function (o) {
|
||||
var i = e[18],
|
||||
c = e[19];
|
||||
o[e[20]] = a[21];
|
||||
function v (t, a, o, i, u) {
|
||||
var c, v, s;
|
||||
c = v = s = r;
|
||||
var f, l, d;
|
||||
f = l = d = n;
|
||||
var p, h, g;
|
||||
p = h = g = e;
|
||||
var m = t + g[21] + a;
|
||||
i && (m += l[15] + i),
|
||||
u && (m += h[22] + u),
|
||||
o && (m += v[17] + o),
|
||||
l[14][g[23]] = m
|
||||
}
|
||||
o[e[24]] = l;
|
||||
function s (t, e, a) {
|
||||
var o = n[16];
|
||||
this.setCookie(t, r[18], i + o + c, e, a)
|
||||
}
|
||||
o[t[22]] = f;
|
||||
function f (o) {
|
||||
var i = vr(e[25], a[22]),
|
||||
c = a[23][n[17]],
|
||||
v = u + i + o + t[23],
|
||||
s = '';
|
||||
if (s == -r[19])
|
||||
{
|
||||
if (v = o + t[23], c.substr(a[24], v.length) != v) return;
|
||||
s = a[24]
|
||||
}
|
||||
var f = s + v[r[20]],
|
||||
l = '';
|
||||
return l == -e[26] && (l = c[t[24]])
|
||||
|
||||
}
|
||||
o[e[27]] = v;
|
||||
function l () {
|
||||
var r, t, a;
|
||||
r = t = a = e;
|
||||
var i, u, c;
|
||||
i = u = c = n;
|
||||
var v = u[18];
|
||||
this.setCookie(v, a[28]),
|
||||
this.getCookie(v) || (o[i[19]] = u[20]),
|
||||
this.delCookie(v)
|
||||
}
|
||||
o[n[21]] = s
|
||||
}(dr || (dr = {}));
|
||||
var pr;
|
||||
function hr () {
|
||||
var r = arguments[a[25]];
|
||||
if (!r) return a[19];
|
||||
for (var e = a[19], o = t[25], i = n[22], u = t[18]; u < r.length; u++)
|
||||
{
|
||||
var c = r.charCodeAt(u);
|
||||
i = (i + t[26]) % o.length,
|
||||
c ^= o.charCodeAt(i),
|
||||
e += String.fromCharCode(c)
|
||||
}
|
||||
return e
|
||||
} !
|
||||
function (o) {
|
||||
var i, u, d;
|
||||
i = u = d = a;
|
||||
var p, h, g;
|
||||
p = h = g = t;
|
||||
var m, w, I;
|
||||
m = w = I = r;
|
||||
var _, y, E;
|
||||
_ = y = E = n;
|
||||
var b, B, R;
|
||||
b = B = R = e;
|
||||
var T = B[29],
|
||||
S = y[23],
|
||||
k = m[22],
|
||||
x = w[0],
|
||||
O = E[24],
|
||||
L = (C, Ar, R[30]),
|
||||
M = b[31],
|
||||
N = T + S,
|
||||
P = p[28],
|
||||
j,
|
||||
W = m[23][y[25]],
|
||||
$,
|
||||
F;
|
||||
function X (r) {
|
||||
return function () {
|
||||
F.appendChild(j),
|
||||
j.addBehavior(u[26]),
|
||||
j.load(N);
|
||||
var n = r();
|
||||
return F.removeChild(j),
|
||||
n
|
||||
}
|
||||
}
|
||||
function H () {
|
||||
var r = A;
|
||||
r = D;
|
||||
try
|
||||
{
|
||||
return !!(N in B[32] && b[32][N])
|
||||
} catch (n)
|
||||
{
|
||||
return void B[15]
|
||||
}
|
||||
}
|
||||
function K (r) {
|
||||
return P ? G(r) : j ? Y(r) : void _[26]
|
||||
}
|
||||
function U () {
|
||||
if (P = H(), P) j = _[27][N];
|
||||
else if (W[k + c][I[24]]) try
|
||||
{
|
||||
$ = new ActiveXObject(vr(I[25], y[28], w[26])),
|
||||
$.open(),
|
||||
$.write(y[29]),
|
||||
$.close(),
|
||||
F = $.w[B[33]][I[27]][_[30]],
|
||||
j = F.createElement(I[28])
|
||||
} catch (r)
|
||||
{
|
||||
j = W.createElement(N),
|
||||
F = W[vr(I[29], d[27])] || W.getElementsByTagName(b[17])[I[27]] || W[m[30]]
|
||||
}
|
||||
}
|
||||
o[w[31]] = U;
|
||||
function V (r, n) {
|
||||
var t = J;
|
||||
if (void 0 === n) return Z(r);
|
||||
if (t = sr, P) z(r, n);
|
||||
else
|
||||
{
|
||||
if (!j) return void B[15];
|
||||
Q(r, n)
|
||||
}
|
||||
}
|
||||
o[v + x] = V;
|
||||
function Y (r) {
|
||||
X(function () {
|
||||
return r = J(r),
|
||||
j.getAttribute(r)
|
||||
})()
|
||||
}
|
||||
function J (r) {
|
||||
var n = z;
|
||||
n = v;
|
||||
var t = vr(Ir, w[32]),
|
||||
e = new y[31](t + O + s + L, b[31]);
|
||||
return r.replace(new B[13](d[28]), b[34]).replace(e, p[29])
|
||||
}
|
||||
function q (r) {
|
||||
try
|
||||
{
|
||||
j.removeItem(r)
|
||||
} catch (n) { }
|
||||
}
|
||||
o[M + f + l] = K;
|
||||
function Q (r, n) {
|
||||
var t = G;
|
||||
t = cr,
|
||||
X(function () {
|
||||
var t = M;
|
||||
r = J(r),
|
||||
t = K;
|
||||
try
|
||||
{
|
||||
j.setAttribute(r, n),
|
||||
j.save(N)
|
||||
} catch (e) { }
|
||||
})()
|
||||
}
|
||||
function Z (r) {
|
||||
var n, t, e;
|
||||
if (n = t = e = g, P) q(r);
|
||||
else
|
||||
{
|
||||
if (!j) return void t[18];
|
||||
rr(r)
|
||||
}
|
||||
}
|
||||
function G (r) {
|
||||
try
|
||||
{
|
||||
return j.getItem(r)
|
||||
} catch (n)
|
||||
{
|
||||
return y[20]
|
||||
}
|
||||
}
|
||||
o[fr(w[33], p[30], R[35])] = Z;
|
||||
function z (r, n) {
|
||||
try
|
||||
{
|
||||
j.setItem(r, n)
|
||||
} catch (t) { }
|
||||
}
|
||||
function rr (r) {
|
||||
X(function () {
|
||||
r = J(r),
|
||||
j.removeAttribute(r),
|
||||
j.save(N)
|
||||
})()
|
||||
}
|
||||
}(pr || (pr = {}));
|
||||
var gr = function () {
|
||||
var o, i, u;
|
||||
o = i = u = e;
|
||||
var c, v, s;
|
||||
c = v = s = a;
|
||||
var f, l, g;
|
||||
f = l = g = n;
|
||||
var m, w, I;
|
||||
m = w = I = t;
|
||||
var _, E, A;
|
||||
_ = E = A = r;
|
||||
var C = yr(Cr, U, _[34]),
|
||||
b = vr(A[35], m[31]),
|
||||
R = hr(g[32], c[29], i[36]),
|
||||
T = hr(l[33], g[34], i[37], tr);
|
||||
function S (r) {
|
||||
this[m[32]] = r;
|
||||
for (var n = o[15], t = r[i[38]]; t > n; n++) this[n] = i[15]
|
||||
}
|
||||
return S[d + p + C][b + h] = function () {
|
||||
for (var r = this[vr(h, E[36], E[37])], n = [], t = -I[26], e = o[15], a = r[A[20]]; a > e; e++) for (var u = this[e], f = r[e], d = t += f; n[d] = u & parseInt(v[30], l[35]), --f != s[24];)--d,
|
||||
u >>= parseInt(i[39], c[31]);
|
||||
return n
|
||||
},
|
||||
S[vr(w[33], v[32])][_[38]] = function (r) {
|
||||
var n = dr,
|
||||
t = this[vr(y, l[36], A[39])],
|
||||
e = f[26];
|
||||
n = B;
|
||||
for (var a = v[24], o = t[l[37]]; o > a; a++)
|
||||
{
|
||||
var i = t[a],
|
||||
u = l[26];
|
||||
do u = (u << parseInt(R + T, g[35])) + r[e++];
|
||||
while (--i > w[18]);
|
||||
this[a] = u >>> w[18]
|
||||
}
|
||||
},
|
||||
S
|
||||
}(),
|
||||
mr; !
|
||||
function (o) {
|
||||
var i, u, c;
|
||||
i = u = c = n;
|
||||
var v, s, f;
|
||||
v = s = f = e;
|
||||
var l, d, p;
|
||||
l = d = p = a;
|
||||
var h, w, I;
|
||||
h = w = I = r;
|
||||
var _, y, E;
|
||||
_ = y = E = t;
|
||||
var A = y[34],
|
||||
C = (nr, U, h[40]),
|
||||
b = p[25];
|
||||
function B (r) {
|
||||
for (var n = y[35], t = f[15], e = r[vr(c[38], I[41], H)], a = []; e > t;)
|
||||
{
|
||||
var o = k[r.charAt(t++)] << parseInt(g + A, d[31]) | k[r.charAt(t++)] << parseInt(n + m, h[42]) | k[r.charAt(t++)] << parseInt(I[43], i[35]) | k[r.charAt(t++)];
|
||||
a.push(o >> parseInt(_[36], h[42]), o >> l[31] & parseInt(u[39], i[40]), o & parseInt(d[30], c[35]))
|
||||
}
|
||||
return a
|
||||
}
|
||||
function T (r) {
|
||||
for (var n = (O, R, p[24]), t = I[27], e = r[E[24]]; e > t; t++) n = (n << E[37]) - n + r[t];
|
||||
return n & parseInt(E[38], p[33])
|
||||
}
|
||||
for (var S = s[40], k = {},
|
||||
x = s[15]; x < parseInt(I[44], l[34]); x++) k[S.charAt(x)] = x;
|
||||
function L (r) {
|
||||
var n = B(r),
|
||||
t = n[u[26]];
|
||||
if (t != b) return error = yr(V, u[41], s[41], v[42]),
|
||||
void 0;
|
||||
var e = n[s[26]],
|
||||
a = [];
|
||||
return P(n, +_[39], a, +_[18], e),
|
||||
T(a) == e ? a : void 0
|
||||
}
|
||||
function M (r) {
|
||||
var n = T(r),
|
||||
t = [b, n];
|
||||
return P(r, +l[24], t, +p[25], n),
|
||||
N(t)
|
||||
}
|
||||
function N (r) {
|
||||
var n, t, e;
|
||||
n = t = e = f;
|
||||
var a, o, u;
|
||||
a = o = u = y;
|
||||
var c, v, s;
|
||||
c = v = s = h;
|
||||
var d, p, g;
|
||||
d = p = g = l;
|
||||
var m, w, I;
|
||||
m = w = I = i;
|
||||
for (var _ = m[42], E = d[24], A = r[c[20]], b = []; A > E;)
|
||||
{
|
||||
var B = r[E++] << parseInt(fr(Z, d[35]), o[39]) | r[E++] << g[31] | r[E++];
|
||||
b.push(S.charAt(B >> parseInt(m[43], t[43])), S.charAt(B >> parseInt(p[36], o[40]) & parseInt(I[44], I[45])), S.charAt(B >> n[44] & parseInt(_ + C, n[42])), S.charAt(B & parseInt(fr(d[37], c[45], or), a[41])))
|
||||
}
|
||||
return b.join(o[19])
|
||||
}
|
||||
function P (r, n, t, e, a) {
|
||||
var o, i, u;
|
||||
o = i = u = w;
|
||||
var c, v, s;
|
||||
c = v = s = E;
|
||||
for (var f = r[v[24]]; f > n;) t[e++] = r[n++] ^ a & parseInt(u[46], s[42]),
|
||||
a = ~(a * parseInt(v[43], v[40]))
|
||||
}
|
||||
o[E[44]] = N,
|
||||
o[_[45]] = B,
|
||||
o[v[45]] = M,
|
||||
o[y[46]] = L
|
||||
}(mr || (mr = {}));
|
||||
var wr; !
|
||||
function (o) {
|
||||
var i = a[38],
|
||||
u = r[47],
|
||||
c = t[47],
|
||||
v = vr(n[46], a[39], a[40]),
|
||||
s = e[46],
|
||||
f = e[47],
|
||||
l = a[41],
|
||||
d = a[42];
|
||||
function p (o) {
|
||||
var i = a[43],
|
||||
u = vr(n[47], e[48], n[48]),
|
||||
c = {},
|
||||
v = function (o, c) {
|
||||
var s, f, l, d;
|
||||
for (c = c.replace(n[49], n[12]), c = c.substring(e[26], c[e[38]] - e[26]), s = c.split(e[49]), l = a[24]; l < s[yr(v, sr, t[48])]; l++) if (f = s[l].split(n[50]), f && !(f[a[44]] < t[39]))
|
||||
{
|
||||
for (d = n[35]; d < f[r[20]]; d++) f[n[11]] = f[n[11]] + r[48] + f[d];
|
||||
f[n[26]] = new a[45](r[49]).test(f[n[26]]) ? f[e[15]].substring(r[19], f[e[15]][a[44]] - n[11]) : f[n[26]],
|
||||
f[n[11]] = new r[50](i + u + w).test(f[n[11]]) ? f[e[26]].substring(t[26], f[r[19]][n[37]] - t[26]) : f[a[18]],
|
||||
o[f[r[27]]] = f[n[11]]
|
||||
}
|
||||
return o
|
||||
};
|
||||
return new a[45](I + _).test(o) && (c = v(c, o)),
|
||||
c
|
||||
}
|
||||
function h (n) {
|
||||
for (var t = [], e = a[24]; e < n[r[20]]; e++) t.push(n.charCodeAt(e));
|
||||
return t
|
||||
}
|
||||
function g (o) {
|
||||
var u = a[46];
|
||||
if (typeof o === vr(O, a[47], or) && o[a[48]]) try
|
||||
{
|
||||
var c = parseInt(o[a[48]]);
|
||||
switch (c)
|
||||
{
|
||||
case parseInt(i + u, t[42]): break;
|
||||
case parseInt(yr(t[49], r[51], e[50]), e[43]): top[t[50]][n[51]] = o[e[51]];
|
||||
break;
|
||||
case parseInt(yr(a[25], j, e[52]), n[52]): top[n[53]][t[51]] = o[t[52]]
|
||||
}
|
||||
} catch (v) { }
|
||||
}
|
||||
function m (r, n, t) {
|
||||
|
||||
}
|
||||
function L () {
|
||||
var e, a, o;
|
||||
e = a = o = r;
|
||||
var i, u, c;
|
||||
i = u = c = n;
|
||||
var v, s, f;
|
||||
v = s = f = t;
|
||||
var l = f[53],
|
||||
d = c[54],
|
||||
p = new e[52];
|
||||
return typeof TOKEN_SERVER_TIME == y + l + d ? s[18] : (time = parseInt(TOKEN_SERVER_TIME), time)
|
||||
}
|
||||
function M () {
|
||||
var o = new t[54];
|
||||
try
|
||||
{
|
||||
return time = n[2].now(),
|
||||
time / parseInt(fr(a[50], a[51], r[53]), t[40]) >>> e[15]
|
||||
} catch (i)
|
||||
{
|
||||
return time = o.getTime(),
|
||||
time / parseInt(e[53], a[25]) >>> r[27]
|
||||
}
|
||||
}
|
||||
function N (r) {
|
||||
for (var a = t[18], o = r[t[24]] - n[11]; o >= e[15]; o--) a = a << e[26] | +r[o];
|
||||
return a
|
||||
}
|
||||
function P (a) {
|
||||
var o = new r[50](n[55]);
|
||||
if (K(a)) return a;
|
||||
var i = o.test(a) ? -e[54] : -t[39],
|
||||
u = a.split(r[54]);
|
||||
return u.slice(i).join(fr(n[56], t[55], E))
|
||||
}
|
||||
function j (t) {
|
||||
for (var o = n[26], i = e[15], u = t[vr(r[55], a[52], D)]; u > i; i++) o = (o << r[56]) - o + t.charCodeAt(i),
|
||||
o >>>= n[26];
|
||||
return o
|
||||
}
|
||||
function W (n, o) {
|
||||
var i = new a[45](t[56], yr(r[57], $, t[57], r[58])),
|
||||
u = new a[45](t[58]);
|
||||
if (n)
|
||||
{
|
||||
var c = n.match(i);
|
||||
if (c)
|
||||
{
|
||||
var v = c[e[26]];
|
||||
return o && u.test(v) && (v = v.split(t[59]).pop().split(r[48])[e[15]]),
|
||||
v
|
||||
}
|
||||
}
|
||||
}
|
||||
function $ (o) {
|
||||
var i = n[57],
|
||||
u = vr(e[55], e[56]),
|
||||
f = e[4];
|
||||
if (!(o > t[60]))
|
||||
{
|
||||
o = o || a[24];
|
||||
var l = parseInt(E + c + A, r[42]),
|
||||
d = n[14].createElement(e[57]);
|
||||
d[r[59]] = n[58] + parseInt((new a[53]).getTime() / l) + r[60],
|
||||
d[r[61]] = function () {
|
||||
var n = a[46];
|
||||
cr = r[19],
|
||||
setTimeout(function () {
|
||||
$(++o)
|
||||
},
|
||||
o * parseInt(C + n, a[33]))
|
||||
},
|
||||
d[t[61]] = d[hr(a[54], a[55], t[62])] = function () {
|
||||
var a = n[59];
|
||||
this[i + v + u + b] && this[e[58]] !== n[60] && this[s + B + a + f] !== e[59] && this[t[63]] !== n[61] || (cr = e[15], d[hr(N, r[62], n[62], e[25])] = d[t[64]] = r[63])
|
||||
},
|
||||
e[60][e[61]].appendChild(d)
|
||||
}
|
||||
}
|
||||
function F () {
|
||||
var r = a[56];
|
||||
return Math.random() * parseInt(R + T + f + r, t[42]) >>> n[26]
|
||||
}
|
||||
function X (r) {
|
||||
var e = new n[31](fr(t[65], t[66], a[57]), yr(c, n[63], t[57]));
|
||||
if (r)
|
||||
{
|
||||
var o = r.match(e);
|
||||
return o
|
||||
}
|
||||
}
|
||||
o[S + k] = p,
|
||||
o[r[64]] = $,
|
||||
o[t[67]] = g,
|
||||
o[t[68]] = h,
|
||||
o[t[69]] = j,
|
||||
o[t[70]] = F,
|
||||
o[r[65]] = K,
|
||||
o[x + l] = P,
|
||||
o[t[71]] = W,
|
||||
o[t[72]] = X,
|
||||
o[hr(r[66], t[73], r[67], C)] = N,
|
||||
o[t[74]] = M,
|
||||
o[d + O] = L;
|
||||
function K (n) {
|
||||
return new r[50](t[75]).test(n)
|
||||
}
|
||||
o[r[68]] = m
|
||||
}(wr || (wr = {}));
|
||||
var Ir; !
|
||||
function (o) {
|
||||
var i = t[76],
|
||||
u = t[77],
|
||||
c = n[65],
|
||||
v = t[78],
|
||||
s = a[24],
|
||||
f = n[26],
|
||||
l = t[18],
|
||||
d = t[18],
|
||||
p = e[15],
|
||||
h = a[24],
|
||||
g = r[69],
|
||||
m = '';
|
||||
wr.eventBind(e[60], n[67], E),
|
||||
wr.eventBind(r[71], t[79], E),
|
||||
wr.eventBind(t[20], hr(e[64], A, a[59]), b),
|
||||
wr.eventBind(e[60], r[72], y);
|
||||
function w () {
|
||||
return f
|
||||
}
|
||||
function I (r) {
|
||||
f++
|
||||
}
|
||||
function _ () {
|
||||
return {
|
||||
x: p,
|
||||
y: h,
|
||||
trusted: g
|
||||
}
|
||||
}
|
||||
function y (r) {
|
||||
d++
|
||||
}
|
||||
function E (r) {
|
||||
s++
|
||||
}
|
||||
function C () {
|
||||
return l
|
||||
}
|
||||
function b (r) {
|
||||
var o, i, u;
|
||||
o = i = u = n;
|
||||
var c, s, f;
|
||||
c = s = f = t;
|
||||
var d, m, w;
|
||||
d = m = w = e;
|
||||
var I, _, y;
|
||||
I = _ = y = a;
|
||||
var E = I[60],
|
||||
A = d[65];
|
||||
l++ ,
|
||||
g = void 0 == r[E + A + v] || r[yr(f[80], s[81], i[68])],
|
||||
p = r[s[82]],
|
||||
h = r[c[83]]
|
||||
}
|
||||
function B () {
|
||||
return d
|
||||
}
|
||||
function R () {
|
||||
return s
|
||||
}
|
||||
o[r[73]] = R,
|
||||
o[a[61]] = w,
|
||||
o[fr(a[62], n[69])] = C,
|
||||
o[n[70]] = B,
|
||||
o[r[74]] = _
|
||||
}(Ir || (Ir = {}));
|
||||
var _r; !
|
||||
function (u) {
|
||||
var v = fr(n[71], t[84]),
|
||||
s = r[75],
|
||||
f = yr(dr, n[72], e[66], $),
|
||||
l = r[76],
|
||||
d = e[67],
|
||||
p = r[77],
|
||||
h = hr(dr, r[78], a[63], n[73]),
|
||||
g = r[79],
|
||||
m = n[74];
|
||||
BROWSER_LIST = {
|
||||
|
||||
};
|
||||
function w () {
|
||||
var t, e, a;
|
||||
t = e = a = r;
|
||||
var o, i, u;
|
||||
o = i = u = n;
|
||||
return wr.booleanToDecimal(c)
|
||||
}
|
||||
function I (t) {
|
||||
for (var o = n[26]; o < y[e[38]]; o++)
|
||||
{
|
||||
var i = y[o][r[94]];
|
||||
if (t.test(i)) return !a[24]
|
||||
}
|
||||
return !a[18]
|
||||
}
|
||||
function E (t) {
|
||||
|
||||
}
|
||||
function A () {
|
||||
return a[73]
|
||||
}
|
||||
|
||||
function B () {
|
||||
return n[20]
|
||||
}
|
||||
|
||||
function T () {
|
||||
return I(new t[93](r[96]))
|
||||
}
|
||||
function S () {
|
||||
return I(new a[45](t[98], r[97]))
|
||||
}
|
||||
function k () {
|
||||
for (var r in BROWSER_LIST) if (BROWSER_LIST.hasOwnProperty(r))
|
||||
{
|
||||
var n = BROWSER_LIST[r];
|
||||
if (n()) return + r.substr(a[18])
|
||||
}
|
||||
return e[15]
|
||||
}
|
||||
function x () {
|
||||
var n, a, o;
|
||||
n = a = o = r;
|
||||
var i, u, c;
|
||||
i = u = c = t;
|
||||
var v, s, f;
|
||||
v = s = f = e;
|
||||
var l = s[75],
|
||||
d = s[76];
|
||||
return I(new u[93](o[98], v[71])) || E(l + F + d + X)
|
||||
}
|
||||
function O () {
|
||||
|
||||
}
|
||||
function L () {
|
||||
var r, n, t;
|
||||
r = n = t = a;
|
||||
var o, i, u;
|
||||
o = i = u = e;
|
||||
var c = l;
|
||||
return c = p
|
||||
}
|
||||
function M () {
|
||||
var r, n, a;
|
||||
r = n = a = t;
|
||||
var o, i, u;
|
||||
o = i = u = e;
|
||||
var c;
|
||||
try
|
||||
{
|
||||
c = i[60].createElement(a[99]).getContext(i[78])
|
||||
} catch (v) { }
|
||||
return !!c
|
||||
}
|
||||
|
||||
|
||||
function J () {
|
||||
var t, e, o;
|
||||
t = e = o = n;
|
||||
var i, u, c;
|
||||
i = u = c = a;
|
||||
var v, s, f;
|
||||
return v = s = f = r,
|
||||
-parseInt(s[100], c[31]) === (new e[2]).getTimezoneOffset()
|
||||
}
|
||||
|
||||
function Q () {
|
||||
try
|
||||
{
|
||||
} catch (e)
|
||||
{
|
||||
return r[101]
|
||||
}
|
||||
}
|
||||
function Z () {
|
||||
var n, a, o;
|
||||
n = a = o = e;
|
||||
var i, u, c;
|
||||
i = u = c = r;
|
||||
var v, s, f;
|
||||
return v = s = f = t,
|
||||
plugin_num = s[18],
|
||||
plugin_num
|
||||
}
|
||||
var z = [R, x, S, T, L, Q, b, V, O, J, M, q, Y, B, tr, A];
|
||||
|
||||
var nr = [new e[13](n[85]), new n[31](e[82]), new r[50](e[83]), new r[50](t[102]), new n[31](e[84]), new a[45](a[78]), new a[45](e[85]), new e[13](t[103]), new a[45](r[103]), new t[93](r[104]), new a[45](r[105])];
|
||||
function tr () {
|
||||
return e[86]
|
||||
}
|
||||
u[e[87]] = rr,
|
||||
u[a[79]] = k,
|
||||
u[yr(c, e[88], r[106])] = Z,
|
||||
u[K + U + m] = w
|
||||
}(_r || (_r = {}));
|
||||
function yr () {
|
||||
var o = arguments[a[25]];
|
||||
if (!o) return t[19];
|
||||
for (var i = a[19], u = e[14], c = r[27]; c < o.length; c++)
|
||||
{
|
||||
var v = o.charCodeAt(c),
|
||||
s = v ^ u;
|
||||
u = u * c % a[80] + e[89],
|
||||
i += n[86].fromCharCode(s)
|
||||
}
|
||||
return i
|
||||
}
|
||||
var Er; !
|
||||
function (o) {
|
||||
var i = a[81],
|
||||
u = t[35],
|
||||
c = r[107],
|
||||
v = vr(S, a[56]),
|
||||
f = r[27],
|
||||
l = r[19],
|
||||
d = a[25],
|
||||
p = n[87],
|
||||
h = parseInt(e[90], r[108]),
|
||||
g = a[82],
|
||||
m = parseInt(vr(s, t[104]), t[39]),
|
||||
w = r[109],
|
||||
I = t[40],
|
||||
_ = parseInt(i + V, n[45]),
|
||||
y = parseInt(u + c, n[52]),
|
||||
E = parseInt(t[105], r[42]),
|
||||
A = e[91],
|
||||
C = parseInt(Y + v, r[42]),
|
||||
b = parseInt(e[92], e[93]),
|
||||
B = t[106],
|
||||
R = parseInt(vr(e[94], e[95]), t[41]),
|
||||
T = parseInt(a[83], e[93]),
|
||||
k;
|
||||
function x () {
|
||||
var r = M();
|
||||
return r
|
||||
}
|
||||
function O () {
|
||||
var r = t[26],
|
||||
a = n[35],
|
||||
o = e[54],
|
||||
i = n[88];
|
||||
k = new gr([i, i, i, i, r, r, r, o, a, a, a, a, a, a, a, i, a, r]),
|
||||
k[l] = wr.serverTimeNow(),
|
||||
L(),
|
||||
k[B] = cr,
|
||||
k[T] = ur,
|
||||
k[R] = e[15],
|
||||
k[C] = _r.getBrowserFeature(),
|
||||
k[g] = _r.getBrowserIndex(),
|
||||
k[m] = _r.getPluginNum()
|
||||
}
|
||||
function L () {
|
||||
var a = dr.getCookie(tr) || pr.get(ar);
|
||||
if (a && a[r[20]] == parseInt(e[96], n[52]))
|
||||
{
|
||||
var o = mr.decode(a);
|
||||
if (o && (k.decodeBuffer(o), k[f] != t[18])) return
|
||||
}
|
||||
k[f] = wr.random()
|
||||
}
|
||||
o[a[84]] = O;
|
||||
function M () {
|
||||
k[R]++ ,
|
||||
k[l] = wr.serverTimeNow(),
|
||||
k[d] = wr.timeNow(),
|
||||
k[B] = cr,
|
||||
k[w] = Ir.getMouseMove(),
|
||||
k[I] = Ir.getMouseClick(),
|
||||
k[_] = Ir.getMouseWhell(),
|
||||
k[y] = Ir.getKeyDown(),
|
||||
k[E] = Ir.getClickPos().x,
|
||||
k[A] = Ir.getClickPos().y;
|
||||
var r = k.toBuffer();
|
||||
return mr.encode(r)
|
||||
}
|
||||
o[yr(r[3], n[89], e[97])] = x
|
||||
}(Er || (Er = {}));
|
||||
var Ar; !
|
||||
function (o) {
|
||||
var i = n[90],
|
||||
u = a[85],
|
||||
v = r[110],
|
||||
s = a[86],
|
||||
f = t[107],
|
||||
p,
|
||||
h,
|
||||
m,
|
||||
w,
|
||||
I,
|
||||
_;
|
||||
function E (r) {
|
||||
return N(r) && dr[a[87]]
|
||||
}
|
||||
function A (o) {
|
||||
var i = wr.getOriginFromUrl(o);
|
||||
return i ? !new n[31](yr(r[42], c, t[110]) + w).test(i[r[108]]) || !new e[13](I).test(i[a[18]]) : t[111]
|
||||
}
|
||||
function C (e) {
|
||||
var o = (_r, g, Er.update());
|
||||
return e + (new r[50](vr(a[88], a[89])).test(e) ? n[91] : vr(P, a[90], t[112])) + er + t[23] + r[111](o)
|
||||
}
|
||||
function b (o, i, u) {
|
||||
if (r[112] in i) return i.apply(o, u);
|
||||
switch (u[n[37]])
|
||||
{
|
||||
case n[26]:
|
||||
return i();
|
||||
case a[18]:
|
||||
return i(u[n[26]]);
|
||||
case r[108]:
|
||||
return i(u[e[15]], u[r[19]]);
|
||||
default:
|
||||
return i(u[n[26]], u[r[108]], u[t[17]])
|
||||
}
|
||||
}
|
||||
function B () {
|
||||
var r = Er.update();
|
||||
return r
|
||||
}
|
||||
function k (r, e, o) {
|
||||
if (!r) return n[20];
|
||||
var i = r[e];
|
||||
if (!i) return t[111];
|
||||
var u = o(i);
|
||||
return d || (u[a[97]] = i + t[19]),
|
||||
u[n[97]] = i,
|
||||
r[e] = u,
|
||||
a[21]
|
||||
}
|
||||
function M (o) {
|
||||
var i, u, c;
|
||||
i = u = c = n;
|
||||
var v, s, l;
|
||||
v = s = l = r;
|
||||
var d, p, h;
|
||||
d = p = h = e;
|
||||
var g, m, w;
|
||||
g = m = w = a;
|
||||
var I, _, y;
|
||||
I = _ = y = t;
|
||||
var R = hr(I[121], w[106], d[109]),
|
||||
T;
|
||||
k(o, _[122],
|
||||
function (r) {
|
||||
var n = w[107];
|
||||
return function () {
|
||||
var t, e, a;
|
||||
t = e = a = _;
|
||||
var o, i, u;
|
||||
o = i = u = l;
|
||||
var c, v, s;
|
||||
c = v = s = w;
|
||||
var f = s[108];
|
||||
try
|
||||
{
|
||||
A(arguments[s[18]]) && !E(arguments[o[19]]) ? arguments[a[26]] = C(arguments[s[18]]) : T = B(),
|
||||
r.apply(this, arguments),
|
||||
A(arguments[i[19]]) || this.setRequestHeader(ar, T)
|
||||
} catch (d)
|
||||
{
|
||||
return n + f
|
||||
}
|
||||
}
|
||||
}),
|
||||
k(o, g[109],
|
||||
function (r) {
|
||||
var n = b;
|
||||
n = M;
|
||||
var t = vr(_[123], u[107]);
|
||||
return function () {
|
||||
var n = fr(f, c[108], I[124]),
|
||||
e = s[122];
|
||||
try
|
||||
{
|
||||
if (parseInt(this.status) === parseInt(h[110], v[123]))
|
||||
{
|
||||
for (var a = r.apply(this, arguments), o = new p[13](i[109], n + R), u, l, d = {}; u = o.exec(a);) d[u[m[18]].toLowerCase()] = u[v[108]];
|
||||
wr.analysisRst(wr.parse(d[ir.toLowerCase()]))
|
||||
}
|
||||
} catch (g)
|
||||
{
|
||||
return e + t
|
||||
}
|
||||
return r.apply(this, arguments)
|
||||
}
|
||||
})
|
||||
}
|
||||
function N (r) {
|
||||
var n = wr.getHostFromUrl(r, e[28]);
|
||||
return n ? _.test(n) : e[28]
|
||||
}
|
||||
function j () {
|
||||
var cookie_v;
|
||||
cookie_v = B()
|
||||
return cookie_v
|
||||
}
|
||||
o[n[111]] = j
|
||||
}(Ar || (Ar = {}));
|
||||
var Cr;
|
||||
var cookie = (function (a) {
|
||||
function _ () {
|
||||
var cookie_v;
|
||||
Er.Init();
|
||||
cookie_v = Ar.Init();
|
||||
return cookie_v
|
||||
}
|
||||
return function y () {
|
||||
try
|
||||
{
|
||||
return _()
|
||||
} catch (r)
|
||||
{
|
||||
return r
|
||||
}
|
||||
}
|
||||
})()
|
||||
return cookie()
|
||||
}
|
||||
function v () {
|
||||
var v;
|
||||
v = v_cookie(
|
||||
["t", 34, '"$', 36, "\fb", 55, "ure", "lJ#K", "Flash", "getBro", "1", "analys", "CHAMELEON_CALLBACK", 30, "\u256f\u0930\u097b\u09ff\u09a4\u0934\u099d\u09c1\u099d\u09d9\u09a7\u09c3\u0995\u09f0\u09d3\u0a62\u0a6f\u09bc\u09ad\u0934", "F,sp-", String, "; expires=", "", 1, "length", "; ", '', '', "addBehavior", ";^l", ">*]+", 0, "div", "&~!", "", "Init", "('&%$#\"![", ">NJ", "\u254e\u096d\u095f", "W$R", "sdelif_esab", "Or)E", "decodeBuffer", 84, "f", "htgnel", 8, "110", "40", "\u2504\u2562", "255", "o", ":", '^".*"$', RegExp, 40, Date, "e9", ".", 19, 5, "t8JOi", "}B", "src", ".js", "onerror", "*q:", null, "getServerTime", "isIPAddr", "8-", "ZX9Y]V8aWs3VQZ7Y", "eventBind", !0, "wheel", '', "keydown", "getMouseMove", "getClickPos", "vent", "me", "MSG", 41, "th", "safari", "ActiveXObject", "maxHeight", "head", "Google Inc.", "vendor", "sgAppName", "opr", 94, "tugw`pj", "chrome", "2345Explorer", "ome", "TheWorld", "name", "\u2553\u253c\u2572\u251d\u2569\u253d\u254f\u252e\u254d\u2526", "Native Client", "i", "Shockwave", "systemLanguage", "740", !1, "plugins", "^ARM", "^iPod", "^BlackBerry", "\u2550\u0978\u094e\u09c1\u09bc\u0928\u0989\u09d8\u099a\u09f3\u09b7\u09dc", "0", 2, 7, "c", encodeURIComponent, "apply", "headers", "8S:+", "\u2560\u2509\u2567\u2503\u256c\u251b", "\u255e\u2530\u2543\u2526\u2554\u2520\u2562\u2507\u2561\u250e\u257c\u2519", "a", 14, ":dB2", "href", "click", "err", 16, "hostname", "`60w", "\fbf", "&X "],
|
||||
[";", "Element", Date, "par", "i", "DOMMous", 21, "xmT", "wserFe", "h", !0, 1, "", Boolean, '', "; domain=", "n 1970 00:", "cookie", "checkcookie", "allow", !1, "delCookie", 2333, "torage", ")*+,/\\\\:;", '', 0, '', "eliflmth", '', "ducument", RegExp, "W", "qsU", 61, 2, "sdelif_esab", "length", "I", "ff", 16, 45, "3", "10010", "77", 8, "6e%d", "DT{e", "$", / /g, ":", "href", 10, "location", "ned", "\\.com\\.cn$|\\.com\\.hk$", 63, "rea", "https://s.thsi.cn/js/chameleon/time.1", "tat", "loaded", "interactive", "WY:ZYS", "E?`a", "addEventListener", "eScroll", "onmousewheel", "mousemove", "\u255e\u096e\u096e\u09e3\u09a5\u092e\u099a\u09d4\u0990", "\u2550\u2535\u2541\u250c\u2563\u2516\u2565\u2500\u2543\u252f\u2546\u2525\u254e", "getKeyDown", "H69<J", "v~g-", "", "ature", "callPhantom", "ActiveXObject", "Uint8Array", "WeakMap", "JX%<", "chrome", "@L:!", "20", "language", "localStorage", "^Win32", String, 3, 4, "=XAE", "hea", "&", "/", "\\R$", '^R"VP', "s", "include", "_raw", "x.", "isRst", "SCRIPT", "ta", "base", "$?", "^_self$", "#", "unload", "ro", "\u2550", "^(.*?):[ \\t]*([^\\r\\n]*)\\r?$", "g", "Init", "t6?x}", "\u2574\u0955\u097b\u09dc\u0995\u0911\u09ab\u09fe\u09ba\u09e2\u098e\u09fe\u09f9\u09f9\u09f3\u0a55", "=d' "],
|
||||
["<=>?@[\\]^", "e", "HE9", "tot", "\u2503", "0", "dyS", "se", "getRoot", "NR", "nd", 60, "ng", "s", "get", "mit", 13, 3, 0, "", '', "\u255f\u253a\u255b\u253f", "getCookie", "=", "length", "V587", 1, String, !0, "___", "\u2553\u2536\u255a", "uBot", "base_fileds", 32, "2", "1", "20", 5, "255", 2, 8, 16, 10, "203", "base64Encode", "base64Decode", "decode", "760", "\u255b\u0978\u0954\u09f6\u09a4\u0935", 70, "location", "href", "redirect_url", "efi", Date, "\u2519", "^\\s*(?:https?:)?\\/{2,}([^\\/\\?\\#\\\\]+)", "\u255e", "[@:]", "@", 7, "onload", 'WY$PYS/FLV"P[_7[_R', "readyState", "onreadystatechange", '"^w', "\u2569\u2535\u2546\u256c\u2544\u257b\u2541\u2569\u2501\u2575\u2501\u2571\u2502\u253d\u2507\u252e\u2507\u2538\u2564\u254b\u2530\u2502\u252e\u2553\u257b\u2520\u257e\u2522\u250d\u2551\u256e\u2532\u2511\u254d\u2511\u254c\u2567\u254e", "analysisRst", "strToBytes", "strhash", "random", "getHostFromUrl", "getOriginFromUrl", 83, "timeNow", "^(\\d+\\.)+\\d+$", "d", "v", "ted", "touchmove", 85, "F(K9i", "clientX", "clientY", "\u257a\u2515\u256f\u253c", "postMessage", '', "ActiveXObject", "Apple Computer, Inc.", "Q", "chr", "\u2558\u2535\u2550", "BIDUBrowser", RegExp, "QQBrowser", "ro", "aef", "msDoNotTrack", "PDF|Acrobat", "canvas", "yE", "\u255b\u253a\u2554\u2533\u2546\u2527\u2540\u2525\u2556", "^Android", "^Linux [ix]\\d+", "011", "13", 15, "sub", "addEventListener", "jsonp_ignore", "\u2569", !1, 'L"', "Sj", "T{_,", "q*", "i", "tagName", "et", "{'K", "Pp<", "#x'", "open", "rS", "KN3", "#", "protocol", "\\.", "DEDAOL_NOELEMAHC"],
|
||||
[83, "ffer", "\u2505", "20", "e", "ngsE", Error, "est", "\u2552\u095b\u0956\u09f0\u09a3\u0935\u09c0\u09e2", "1", "sr", "hexin-v", "", RegExp, 9527, 0, "**l>", "head", "Thu, 01 Ja", "00:00 GMT", "allow", "=", "; path=", "cookie", "Init", 33, 1, "setCookie", !0, "localS", "`{|}~]", "g", '', "frames", "___$&", 56, " ", "\b", "length", "10", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_", "\u2552\u096f\u0948\u09fe\u09a2", 16, 2, 6, "encode", "rea", "729", "*.", ",", "\u2506\u092c\u090b\u09a0\u09e1\u096d\u09df\u0981\u09c4\u098c", "redirect_url", "\u2506\u092d\u090a\u09a3", "1111101000", 3, 47, "tat", "script", "readyState", "complete", '', "body", "onwheel", "mousewheel", 37, "rus", "\u2554\u0975", "chr", "ActiveXObject", "WeakMap", "aT1Kg", "i", 24, "\u2554\u253c\u254e\u2521\u254c\u2529", "\u2547\u0971\u094f\u09f6\u09b9\u0933\u099d", "Shockwav", "hockwave", "$cdc_asdjflasutopfhvcZLmcfl_", "webgl2", "2>n|", "plugins", "platform", "^Win64", "^Linux armv|Android", "^iPhone", "^MacIntel", !1, "getPlatform", "6Y,", 2333, "100", 12, "14", 10, 36, "01", "60", "\u2542\u096d\u095e\u09f0\u09a4\u0938", "j", 17, "Request", "prototype", "`z}lc", "error", "s", "r", "target", "\u255e", "A", "U", "193", "host", "$"],
|
||||
["se", "g@g?", Array, "*Y", Number, "^{.", "*}$", "und", "429", "496", "imeNow", "etti", "rg", "v", "hexin-v", Error, "L_%\\T8", ".baidu.", 1, "", Function, !0, " ", '', 0, 2, "#default#userData", "ydob", "^d", 89, "11111111", 8, "epytotorp", 10, 16, "\u2506\u2536\u2506\u2536\u2506", "14", 13, "10", "Syd", 44, "Domain", "serverT", '^"', "length", RegExp, "00", "tcejbo", "status_code", "n", 66, "\u2506\u2531\u2504\u2534", "htgnel", Date, "L%", 67, "5", "?)'", '', "[[?VS", "isT", "getMouseWhell", "}}", "TR", "ActiveXObject", "WE", "python", "Maxthon", 97, "chrome", "Ryp", "UBrowser", 54, !1, "ontouchstart", "\u254d\u0975\u0917\u09f2\u09be", "iso-8859-1", "defaultCharset", "^iPad", "getBrowserIndex", 256, "1", 5, "17", "Init", "XMLHttp", "tar", "allow", "@*", "?\\", "?", "\u2571\u2503\u256a\u2546\u2566\u2556\u2567\u2547\u2501\u2564\u2506\u2526\u2514\u2524\u2511\u2521\u2501\u2531\u2501\u253b\u250b\u253b\u2501\u2531\u2501\u2521\u2566\u252b\u257f", "den", "tia", 94, "ls", "\u2554\u2526\u2543", "_str", 37, "append", "Child", "\u255f", "\u2569\u0975\u094e\u09e5\u09a0\u092e\u09d1\u09ed\u09ce", "srcElement", "parentNode", "\u2543\u2522\u2545\u250b\u256a\u2507\u2562", "}*", "err", "or", "getAllResponseHeaders", "\\.?", "\\."]
|
||||
);
|
||||
return v
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
# !/usr/bin/env python
|
||||
"""
|
||||
Date: 2024/12/30 15:30
|
||||
Desc: 导入文件工具,可以正确处理路径问题
|
||||
"""
|
||||
|
||||
import pathlib
|
||||
from importlib import resources
|
||||
|
||||
|
||||
def get_ths_js(file: str = "ths.js") -> pathlib.Path:
|
||||
"""
|
||||
get path to data "ths.js" text file.
|
||||
:return: 文件路径
|
||||
:rtype: pathlib.Path
|
||||
"""
|
||||
with resources.path("akshare.data", file) as f:
|
||||
data_file_path = f
|
||||
return data_file_path
|
||||
|
||||
|
||||
def get_crypto_info_csv(file: str = "crypto_info.zip") -> pathlib.Path:
|
||||
"""
|
||||
get path to data "ths.js" text file.
|
||||
:return: 文件路径
|
||||
:rtype: pathlib.Path
|
||||
"""
|
||||
with resources.path("akshare.data", file) as f:
|
||||
data_file_path = f
|
||||
return data_file_path
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
get_ths_js_path = get_ths_js(file="ths.js")
|
||||
print(get_ths_js_path)
|
||||
|
||||
get_crypto_info_csv_path = get_crypto_info_csv(file="crypto_info.zip")
|
||||
print(get_crypto_info_csv_path)
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/10/21 12:08
|
||||
Desc:
|
||||
"""
|
||||
@@ -0,0 +1,233 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2019/10/21 21:11
|
||||
Desc: 宏观经济配置文件
|
||||
"""
|
||||
|
||||
# urls-china
|
||||
JS_CHINA_CPI_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_cpi_yoy_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_CPI_MONTHLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_cpi_mom_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_M2_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_m2_money_supply_yoy_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_PPI_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_ppi_yoy_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_PMI_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_manufacturing_pmi_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_GDP_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_gdp_yoy_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_CX_PMI_YEARLY_URL = "https://cdn.jin10.com/dc/reports/dc_chinese_caixin_manufacturing_pmi_all.js?v={}&_={}"
|
||||
JS_CHINA_CX_SERVICE_PMI_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_caixin_services_pmi_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_FX_RESERVES_YEARLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_fx_reserves_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_ENERGY_DAILY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_qihuo_energy_report_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_NON_MAN_PMI_MONTHLY_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_chinese_non_manufacturing_pmi_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_RMB_DAILY_URL = "https://cdn.jin10.com/dc/reports/dc_rmb_data_all.js?v={}&_={}"
|
||||
JS_CHINA_MARKET_MARGIN_SZ_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_market_margin_sz_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_MARKET_MARGIN_SH_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_market_margin_sse_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CHINA_REPORT_URL = "https://cdn.jin10.com/dc/reports/dc_sge_report_all.js?v={}&_={}"
|
||||
|
||||
# urls-usa
|
||||
JS_USA_INTEREST_RATE_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_usa_interest_rate_decision_all.js?v={}&_={}"
|
||||
)
|
||||
JS_USA_NON_FARM_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_nonfarm_payrolls_all.js?v={}&_={}"
|
||||
)
|
||||
JS_USA_UNEMPLOYMENT_RATE_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_usa_unemployment_rate_all.js??v={}&_={}"
|
||||
)
|
||||
JS_USA_EIA_CRUDE_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_eia_crude_oil_all.js?v={}&_={}"
|
||||
)
|
||||
JS_USA_INITIAL_JOBLESS_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_initial_jobless_all.js?v={}&_={}"
|
||||
)
|
||||
JS_USA_CORE_PCE_PRICE_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_usa_core_pce_price_all.js?v={}&_={}"
|
||||
)
|
||||
JS_USA_CPI_MONTHLY_URL = "https://cdn.jin10.com/dc/reports/dc_usa_cpi_all.js?v={}&_={}"
|
||||
JS_USA_LMCI_URL = "https://cdn.jin10.com/dc/reports/dc_usa_lmci_all.js?v={}&_={}"
|
||||
JS_USA_ADP_NONFARM_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_adp_nonfarm_employment_all.js?v={}&_={}"
|
||||
)
|
||||
JS_USA_GDP_MONTHLY_URL = "https://cdn.jin10.com/dc/reports/dc_usa_gdp_all.js?v={}&_={}"
|
||||
JS_USA_EIA_CRUDE_PRODUCE_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_eia_crude_oil_produce_all.js?v={}&_={}"
|
||||
)
|
||||
|
||||
# urls-euro
|
||||
JS_EURO_RATE_DECISION_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_interest_rate_decision_all.js?v={}&_={}"
|
||||
)
|
||||
|
||||
# urls-constitute
|
||||
JS_CONS_GOLD_ETF_URL = "https://cdn.jin10.com/dc/reports/dc_etf_gold_all.js?v={}&_={}"
|
||||
JS_CONS_SLIVER_ETF_URL = (
|
||||
"https://cdn.jin10.com/dc/reports/dc_etf_sliver_all.js?v={}&_={}"
|
||||
)
|
||||
JS_CONS_OPEC_URL = "https://cdn.jin10.com/dc/reports/dc_opec_report_all.js??v={}&_={}"
|
||||
|
||||
usa_name_url_map = {
|
||||
"美联储决议报告": "//datacenter.jin10.com/reportType/dc_usa_interest_rate_decision",
|
||||
"美国非农就业人数报告": "//datacenter.jin10.com/reportType/dc_nonfarm_payrolls",
|
||||
"美国失业率报告": "//datacenter.jin10.com/reportType/dc_usa_unemployment_rate",
|
||||
"美国CPI月率报告": "//datacenter.jin10.com/reportType/dc_usa_cpi",
|
||||
"美国初请失业金人数报告": "//datacenter.jin10.com/reportType/dc_initial_jobless",
|
||||
"美国核心PCE物价指数年率报告": "//datacenter.jin10.com/reportType/dc_usa_core_pce_price",
|
||||
"美国EIA原油库存报告": "//datacenter.jin10.com/reportType/dc_eia_crude_oil",
|
||||
"美联储劳动力市场状况指数报告": "//datacenter.jin10.com/reportType/dc_usa_lmci",
|
||||
"美国ADP就业人数报告": "//datacenter.jin10.com/reportType/dc_adp_nonfarm_employment",
|
||||
"美国国内生产总值(GDP)报告": "//datacenter.jin10.com/reportType/dc_usa_gdp",
|
||||
"美国原油产量报告": "//datacenter.jin10.com/reportType/dc_eia_crude_oil_produce",
|
||||
"美国零售销售月率报告": "//datacenter.jin10.com/reportType/dc_usa_retail_sales",
|
||||
"美国商品期货交易委员会CFTC外汇类非商业持仓报告": "//datacenter.jin10.com/reportType/dc_cftc_nc_report",
|
||||
"美国NFIB小型企业信心指数报告": "//datacenter.jin10.com/reportType/dc_usa_nfib_small_business",
|
||||
"贝克休斯钻井报告": "//datacenter.jin10.com/reportType/dc_rig_count_summary",
|
||||
"美国谘商会消费者信心指数报告": "//datacenter.jin10.com/reportType/dc_usa_cb_consumer_confidence",
|
||||
"美国FHFA房价指数月率报告": "//datacenter.jin10.com/reportType/dc_usa_house_price_index",
|
||||
"美国个人支出月率报告": "//datacenter.jin10.com/reportType/dc_usa_personal_spending",
|
||||
"美国生产者物价指数(PPI)报告": "//datacenter.jin10.com/reportType/dc_usa_ppi",
|
||||
"美国成屋销售总数年化报告": "//datacenter.jin10.com/reportType/dc_usa_exist_home_sales",
|
||||
"美国成屋签约销售指数月率报告": "//datacenter.jin10.com/reportType/dc_usa_pending_home_sales",
|
||||
"美国S&P/CS20座大城市房价指数年率报告": "//datacenter.jin10.com/reportType/dc_usa_spcs20",
|
||||
"美国进口物价指数报告": "//datacenter.jin10.com/reportType/dc_usa_import_price",
|
||||
"美国营建许可总数报告": "//datacenter.jin10.com/reportType/dc_usa_building_permits",
|
||||
"美国商品期货交易委员会CFTC商品类非商业持仓报告": "//datacenter.jin10.com/reportType/dc_cftc_c_report",
|
||||
"美国挑战者企业裁员人数报告": "//datacenter.jin10.com/reportType/dc_usa_job_cuts",
|
||||
"美国实际个人消费支出季率初值报告": "//datacenter.jin10.com/reportType/dc_usa_real_consumer_spending",
|
||||
"美国贸易帐报告": "//datacenter.jin10.com/reportType/dc_usa_trade_balance",
|
||||
"美国经常帐报告": "//datacenter.jin10.com/reportType/dc_usa_current_account",
|
||||
"美国API原油库存报告": "//datacenter.jin10.com/reportType/dc_usa_api_crude_stock",
|
||||
"美国工业产出月率报告": "//datacenter.jin10.com/reportType/dc_usa_industrial_production",
|
||||
"美国耐用品订单月率报告": "//datacenter.jin10.com/reportType/dc_usa_durable_goods_orders",
|
||||
"美国工厂订单月率报告": "//datacenter.jin10.com/reportType/dc_usa_factory_orders",
|
||||
"Markit服务业PMI终值": "//datacenter.jin10.com/reportType/dc_usa_services_pmi",
|
||||
"商业库存月率": "//datacenter.jin10.com/reportType/dc_usa_business_inventories",
|
||||
"美国ISM非制造业PMI": "//datacenter.jin10.com/reportType/dc_usa_ism_non_pmi",
|
||||
"NAHB房产市场指数": "//datacenter.jin10.com/reportType/dc_usa_nahb_house_market_index",
|
||||
"新屋开工总数年化": "//datacenter.jin10.com/reportType/dc_usa_house_starts",
|
||||
"美国新屋销售总数年化": "//datacenter.jin10.com/reportType/dc_usa_new_home_sales",
|
||||
"美国Markit制造业PMI初值报告": "//datacenter.jin10.com/reportType/dc_usa_pmi",
|
||||
"美国ISM制造业PMI报告": "//datacenter.jin10.com/reportType/dc_usa_ism_pmi",
|
||||
"美国密歇根大学消费者信心指数初值报告": "//datacenter.jin10.com/reportType/dc_usa_michigan_consumer_sentiment",
|
||||
"美国出口价格指数报告": "//datacenter.jin10.com/reportType/dc_usa_export_price",
|
||||
"美国核心生产者物价指数(PPI)报告": "//datacenter.jin10.com/reportType/dc_usa_core_ppi",
|
||||
"美国核心CPI月率报告": "//datacenter.jin10.com/reportType/dc_usa_core_cpi",
|
||||
"美国EIA俄克拉荷马州库欣原油库存报告": "//datacenter.jin10.com/reportType/dc_eia_cushing_oil",
|
||||
"美国EIA精炼油库存报告": "//datacenter.jin10.com/reportType/dc_eia_distillates_stocks",
|
||||
"美国EIA天然气库存报告": "//datacenter.jin10.com/reportType/dc_eia_natural_gas",
|
||||
"美国EIA汽油库存报告": "//datacenter.jin10.com/reportType/dc_eia_gasoline",
|
||||
}
|
||||
china_name_url_map = {
|
||||
"郑州商品交易所期货每日行情": "//datacenter.jin10.com/reportType/dc_czce_futures_data",
|
||||
"中国CPI年率报告": "//datacenter.jin10.com/reportType/dc_chinese_cpi_yoy",
|
||||
"中国PPI年率报告": "//datacenter.jin10.com/reportType/dc_chinese_ppi_yoy",
|
||||
"中国以美元计算出口年率报告": "//datacenter.jin10.com/reportType/dc_chinese_exports_yoy",
|
||||
"中国以美元计算进口年率报告": "//datacenter.jin10.com/reportType/dc_chinese_imports_yoy",
|
||||
"中国以美元计算贸易帐报告": "//datacenter.jin10.com/reportType/dc_chinese_trade_balance",
|
||||
"中国规模以上工业增加值年率报告": "//datacenter.jin10.com/reportType/dc_chinese_industrial_production_yoy",
|
||||
"中国官方制造业PMI报告": "//datacenter.jin10.com/reportType/dc_chinese_manufacturing_pmi",
|
||||
"中国财新制造业PMI终值报告": "//datacenter.jin10.com/reportType/dc_chinese_caixin_manufacturing_pmi",
|
||||
"中国财新服务业PMI报告": "//datacenter.jin10.com/reportType/dc_chinese_caixin_services_pmi",
|
||||
"中国外汇储备报告": "//datacenter.jin10.com/reportType/dc_chinese_fx_reserves",
|
||||
"中国M2货币供应年率报告": "//datacenter.jin10.com/reportType/dc_chinese_m2_money_supply_yoy",
|
||||
"中国GDP年率报告": "//datacenter.jin10.com/reportType/dc_chinese_gdp_yoy",
|
||||
"人民币汇率中间价报告": "//datacenter.jin10.com/reportType/dc_rmb_data",
|
||||
"在岸人民币成交量报告": "//datacenter.jin10.com/reportType/dc_dollar_rmb_report",
|
||||
"上海期货交易所期货合约行情": "//datacenter.jin10.com/reportType/dc_shfe_futures_data",
|
||||
"中国CPI月率报告": "//datacenter.jin10.com/reportType/dc_chinese_cpi_mom",
|
||||
"大连商品交易所期货每日行情": "//datacenter.jin10.com/reportType/dc_dce_futures_data",
|
||||
"中国金融期货交易所期货每日行情": "//datacenter.jin10.com/reportType/dc_cffex_futures_data",
|
||||
"同业拆借报告": "//datacenter.jin10.com/reportType/dc_shibor",
|
||||
"香港同业拆借报告": "//datacenter.jin10.com/reportType/dc_hk_market_info",
|
||||
"深圳融资融券报告": "//datacenter.jin10.com/reportType/dc_market_margin_sz",
|
||||
"上海融资融券报告": "//datacenter.jin10.com/reportType/dc_market_margin_sse",
|
||||
"上海黄金交易所报告": "//datacenter.jin10.com/reportType/dc_sge_report",
|
||||
"上海期货交易所仓单日报": "//datacenter.jin10.com/reportType/dc_shfe_daily_stock",
|
||||
"大连商品交易所仓单日报": "//datacenter.jin10.com/reportType/dc_dce_daily_stock",
|
||||
"郑州商品交易所仓单日报": "//datacenter.jin10.com/reportType/dc_czce_daily_stock",
|
||||
"上海期货交易所指定交割仓库库存周报": "//datacenter.jin10.com/reportType/dc_shfe_weekly_stock",
|
||||
"CCI指数5500大卡动力煤价格报告": "//datacenter.jin10.com/reportType/dc_cci_report",
|
||||
"沿海六大电厂库存动态报告": "//datacenter.jin10.com/reportType/dc_qihuo_energy_report",
|
||||
"国内期货市场实施热度报告": "//datacenter.jin10.com/reportType/dc_futures_market_realtime",
|
||||
"中国官方非制造业PMI报告": "//datacenter.jin10.com/reportType/dc_chinese_non_manufacturing_pmi",
|
||||
}
|
||||
euro_name_url_map = {
|
||||
"欧元区未季调贸易帐报告": "//datacenter.jin10.com/reportType/dc_eurozone_trade_balance_mom",
|
||||
"欧元区季度GDP年率报告": "//datacenter.jin10.com/reportType/dc_eurozone_gdp_yoy",
|
||||
"欧元区CPI年率报告": "//datacenter.jin10.com/reportType/dc_eurozone_cpi_yoy",
|
||||
"欧元区PPI月率报告": "//datacenter.jin10.com/reportType/dc_eurozone_ppi_mom",
|
||||
"欧元区零售销售月率报告": "//datacenter.jin10.com/reportType/dc_eurozone_retail_sales_mom",
|
||||
"欧元区季调后就业人数季率报告": "//datacenter.jin10.com/reportType/dc_eurozone_employment_change_qoq",
|
||||
"欧元区失业率报告": "//datacenter.jin10.com/reportType/dc_eurozone_unemployment_rate_mom",
|
||||
"欧元区CPI月率报告": "//datacenter.jin10.com/reportType/dc_eurozone_cpi_mom",
|
||||
"欧元区经常帐报告": "//datacenter.jin10.com/reportType/dc_eurozone_current_account_mom",
|
||||
"欧元区工业产出月率报告": "//datacenter.jin10.com/reportType/dc_eurozone_industrial_production_mom",
|
||||
"欧元区制造业PMI初值报告": "//datacenter.jin10.com/reportType/dc_eurozone_manufacturing_pmi",
|
||||
"欧元区服务业PMI终值报告": "//datacenter.jin10.com/reportType/dc_eurozone_services_pmi",
|
||||
"欧元区ZEW经济景气指数报告": "//datacenter.jin10.com/reportType/dc_eurozone_zew_economic_sentiment",
|
||||
"欧元区Sentix投资者信心指数报告": "//datacenter.jin10.com/reportType/dc_eurozone_sentix_investor_confidence",
|
||||
}
|
||||
world_central_bank_map = {
|
||||
"美联储决议报告": "//datacenter.jin10.com/reportType/dc_usa_interest_rate_decision",
|
||||
"欧洲央行决议报告": "//datacenter.jin10.com/reportType/dc_interest_rate_decision",
|
||||
"新西兰联储决议报告": "//datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision",
|
||||
"中国央行决议报告": "//datacenter.jin10.com/reportType/dc_china_interest_rate_decision",
|
||||
"瑞士央行决议报告": "//datacenter.jin10.com/reportType/dc_switzerland_interest_rate_decision",
|
||||
"英国央行决议报告": "//datacenter.jin10.com/reportType/dc_english_interest_rate_decision",
|
||||
"澳洲联储决议报告": "//datacenter.jin10.com/reportType/dc_australia_interest_rate_decision",
|
||||
"日本央行决议报告": "//datacenter.jin10.com/reportType/dc_japan_interest_rate_decision",
|
||||
"印度央行决议报告": "//datacenter.jin10.com/reportType/dc_india_interest_rate_decision",
|
||||
"俄罗斯央行决议报告": "//datacenter.jin10.com/reportType/dc_russia_interest_rate_decision",
|
||||
"巴西央行决议报告": "//datacenter.jin10.com/reportType/dc_brazil_interest_rate_decision",
|
||||
}
|
||||
constitute_report_map = {
|
||||
"全球最大黄金ETF—SPDR Gold Trust持仓报告": "//datacenter.jin10.com/reportType/dc_etf_gold",
|
||||
"全球最大白银ETF--iShares Silver Trust持仓报告": "//datacenter.jin10.com/reportType/dc_etf_sliver",
|
||||
"芝加哥商业交易所(CME)能源类商品成交量报告": "//datacenter.jin10.com/reportType/dc_cme_energy_report",
|
||||
"美国商品期货交易委员会CFTC外汇类非商业持仓报告": "//datacenter.jin10.com/reportType/dc_cftc_nc_report",
|
||||
"美国商品期货交易委员会CFTC商品类非商业持仓报告": "//datacenter.jin10.com/reportType/dc_cftc_c_report",
|
||||
"芝加哥商业交易所(CME)金属类商品成交量报告": "//datacenter.jin10.com/reportType/dc_cme_report",
|
||||
"芝加哥商业交易所(CME)外汇类商品成交量报告": "//datacenter.jin10.com/reportType/dc_cme_fx_report",
|
||||
"伦敦金属交易所(LME)库存报告": "//datacenter.jin10.com/reportType/dc_lme_report",
|
||||
"伦敦金属交易所(LME)持仓报告": "//datacenter.jin10.com/reportType/dc_lme_traders_report",
|
||||
"美国商品期货交易委员会CFTC商品类商业持仓报告": "//datacenter.jin10.com/reportType/dc_cftc_merchant_goods",
|
||||
"美国商品期货交易委员会CFTC外汇类商业持仓报告": "//datacenter.jin10.com/reportType/dc_cftc_merchant_currency",
|
||||
}
|
||||
other_map = {
|
||||
"投机情绪报告": "//datacenter.jin10.com/reportType/dc_ssi_trends",
|
||||
"外汇实时波动监控": "//datacenter.jin10.com/reportType/dc_myFxBook_heat_map",
|
||||
"外汇相关性报告": "//datacenter.jin10.com/reportType/dc_myFxBook_correlation",
|
||||
"加密货币实时行情": "//datacenter.jin10.com/reportType/dc_bitcoin_current",
|
||||
}
|
||||
main_map = {
|
||||
"全球最大黄金ETF—SPDR Gold Trust持仓报告": "//datacenter.jin10.com/reportType/dc_etf_gold",
|
||||
"全球最大白银ETF--iShares Silver Trust持仓报告": "//datacenter.jin10.com/reportType/dc_etf_sliver",
|
||||
"美国非农就业人数报告": "//datacenter.jin10.com/reportType/dc_nonfarm_payrolls",
|
||||
"投机情绪报告": "//datacenter.jin10.com/reportType/dc_ssi_trends",
|
||||
"数据达人 — 复合报告": "//datacenter.jin10.com/reportType/dc_complex_report?complexType=1",
|
||||
"投行订单": "//datacenter.jin10.com/banks_orders",
|
||||
"行情报价": "//datacenter.jin10.com/price_wall",
|
||||
"美国EIA原油库存报告": "//datacenter.jin10.com/reportType/dc_eia_crude_oil",
|
||||
"欧佩克报告": "//datacenter.jin10.com/reportType/dc_opec_report",
|
||||
}
|
||||
@@ -0,0 +1,390 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/1/17 15:30
|
||||
Desc: 东方财富-经济数据-澳大利亚
|
||||
https://data.eastmoney.com/cjsj/foreign_5_0.html
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
# 零售销售月率
|
||||
def macro_australia_retail_rate_monthly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-零售销售月率
|
||||
https://data.eastmoney.com/cjsj/foreign_5_0.html
|
||||
:return: 零售销售月率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00152903")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
# 贸易帐
|
||||
def macro_australia_trade() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-贸易帐
|
||||
https://data.eastmoney.com/cjsj/foreign_5_1.html
|
||||
:return: 贸易帐
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00152793")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
# 失业率
|
||||
def macro_australia_unemployment_rate() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-失业率
|
||||
https://data.eastmoney.com/cjsj/foreign_5_2.html
|
||||
:return: 失业率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00101141")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
# 生产者物价指数季率
|
||||
def macro_australia_ppi_quarterly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-生产者物价指数季率
|
||||
https://data.eastmoney.com/cjsj/foreign_5_3.html
|
||||
:return: 生产者物价指数季率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00152722")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
# 消费者物价指数季率
|
||||
def macro_australia_cpi_quarterly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-消费者物价指数季率
|
||||
https://data.eastmoney.com/cjsj/foreign_5_4.html
|
||||
:return: 消费者物价指数季率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00101104")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
# 消费者物价指数年率
|
||||
def macro_australia_cpi_yearly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-消费者物价指数年率
|
||||
https://data.eastmoney.com/cjsj/foreign_5_5.html
|
||||
:return: 消费者物价指数年率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00101093")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
# 央行公布利率决议
|
||||
def macro_australia_bank_rate() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-澳大利亚-央行公布利率决议
|
||||
https://data.eastmoney.com/cjsj/foreign_5_6.html
|
||||
:return: 央行公布利率决议
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_AUSTRALIA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00342255")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(by="发布日期", ignore_index=True, inplace=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
macro_australia_retail_rate_monthly_df = macro_australia_retail_rate_monthly()
|
||||
print(macro_australia_retail_rate_monthly_df)
|
||||
|
||||
macro_australia_trade_df = macro_australia_trade()
|
||||
print(macro_australia_trade_df)
|
||||
|
||||
macro_australia_unemployment_rate_df = macro_australia_unemployment_rate()
|
||||
print(macro_australia_unemployment_rate_df)
|
||||
|
||||
macro_australia_ppi_quarterly_df = macro_australia_ppi_quarterly()
|
||||
print(macro_australia_ppi_quarterly_df)
|
||||
|
||||
macro_australia_cpi_quarterly_df = macro_australia_cpi_quarterly()
|
||||
print(macro_australia_cpi_quarterly_df)
|
||||
|
||||
macro_australia_cpi_yearly_df = macro_australia_cpi_yearly()
|
||||
print(macro_australia_cpi_yearly_df)
|
||||
|
||||
macro_australia_bank_rate_df = macro_australia_bank_rate()
|
||||
print(macro_australia_bank_rate_df)
|
||||
@@ -0,0 +1,274 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/11/5 17:11
|
||||
Desc: 金十数据中心-经济指标-央行利率-主要央行利率
|
||||
https://datacenter.jin10.com/economic
|
||||
输出数据格式为 float64
|
||||
美联储利率决议报告
|
||||
欧洲央行决议报告
|
||||
新西兰联储决议报告
|
||||
中国央行决议报告
|
||||
瑞士央行决议报告
|
||||
英国央行决议报告
|
||||
澳洲联储决议报告
|
||||
日本央行决议报告
|
||||
俄罗斯央行决议报告
|
||||
印度央行决议报告
|
||||
巴西央行决议报告
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import time
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def __get_interest_rate_data(attr_id: str, name: str = "利率") -> pd.DataFrame:
|
||||
"""
|
||||
利率决议报告公共函数
|
||||
https://datacenter.jin10.com/reportType/dc_usa_interest_rate_decision
|
||||
:param attr_id: 内置属性
|
||||
:type attr_id: str
|
||||
:param name: 利率报告名称
|
||||
:type name: str
|
||||
:return: 利率决议报告数据
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
t = time.time()
|
||||
headers = {
|
||||
"Accept": "*/*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/120.0.0.0 Safari/537.36",
|
||||
"Origin": "https://datacenter.jin10.com",
|
||||
"Referer": "https://datacenter.jin10.com/",
|
||||
"x-app-id": "rU6QIu7JHe2gOUeR",
|
||||
"x-version": "1.0.0",
|
||||
}
|
||||
base_url = "https://datacenter-api.jin10.com/reports/list_v2"
|
||||
params = {
|
||||
"max_date": "",
|
||||
"category": "ec",
|
||||
"attr_id": attr_id,
|
||||
"_": str(int(round(t * 1000))),
|
||||
}
|
||||
interest_rate_data = []
|
||||
try:
|
||||
while True:
|
||||
response = requests.get(
|
||||
url=base_url, params=params, headers=headers, timeout=10
|
||||
)
|
||||
data = response.json()
|
||||
if not data.get("data", {}).get("values"):
|
||||
break
|
||||
interest_rate_data.extend(data["data"]["values"])
|
||||
|
||||
# Update max_date for pagination
|
||||
last_date = data["data"]["values"][-1][0]
|
||||
next_date = (
|
||||
datetime.datetime.strptime(last_date, "%Y-%m-%d").date()
|
||||
- datetime.timedelta(days=1)
|
||||
).isoformat()
|
||||
params["max_date"] = next_date
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error fetching data: {e}")
|
||||
return pd.DataFrame()
|
||||
|
||||
# Convert to DataFrame
|
||||
big_df = pd.DataFrame(interest_rate_data)
|
||||
|
||||
if big_df.empty:
|
||||
return pd.DataFrame()
|
||||
|
||||
# Process DataFrame
|
||||
big_df["商品"] = name
|
||||
big_df.columns = ["日期", "今值", "预测值", "前值", "商品"]
|
||||
big_df = big_df[["商品", "日期", "今值", "预测值", "前值"]]
|
||||
|
||||
# Convert data types
|
||||
big_df["日期"] = pd.to_datetime(big_df["日期"]).dt.date
|
||||
numeric_columns = ["今值", "预测值", "前值"]
|
||||
for col in numeric_columns:
|
||||
big_df[col] = pd.to_numeric(big_df[col], errors="coerce")
|
||||
|
||||
return big_df.sort_values("日期").reset_index(drop=True)
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-美联储利率决议报告
|
||||
def macro_bank_usa_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
美联储利率决议报告, 数据区间从 19820927-至今
|
||||
https://datacenter.jin10.com/reportType/dc_usa_interest_rate_decision
|
||||
:return: 美联储利率决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="24", name="美联储利率决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-欧洲央行决议报告
|
||||
def macro_bank_euro_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
欧洲央行决议报告, 数据区间从 19990101-至今
|
||||
https://datacenter.jin10.com/reportType/dc_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_interest_rate_decision_all.js?v=1578581663
|
||||
:return: 欧洲央行决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="21", name="欧洲央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-新西兰联储决议报告
|
||||
def macro_bank_newzealand_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
新西兰联储决议报告, 数据区间从 19990401-至今
|
||||
https://datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_newzealand_interest_rate_decision_all.js?v=1578582075
|
||||
:return: 新西兰联储决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="23", name="新西兰利率决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-中国央行决议报告
|
||||
def macro_bank_china_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
中国央行决议报告, 数据区间从 19990105-至今
|
||||
https://datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_newzealand_interest_rate_decision_all.js?v=1578582075
|
||||
:return: 新西兰联储决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="91", name="中国央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-瑞士央行决议报告
|
||||
def macro_bank_switzerland_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
瑞士央行利率决议报告, 数据区间从 20080313-至今
|
||||
https://datacenter.jin10.com/reportType/dc_switzerland_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_switzerland_interest_rate_decision_all.js?v=1578582240
|
||||
:return: 瑞士央行利率决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="25", name="瑞士央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-英国央行决议报告
|
||||
def macro_bank_english_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
英国央行决议报告, 数据区间从 19700101-至今
|
||||
https://datacenter.jin10.com/reportType/dc_english_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_english_interest_rate_decision_all.js?v=1578582331
|
||||
:return: 英国央行决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="26", name="英国央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-澳洲联储决议报告
|
||||
def macro_bank_australia_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
澳洲联储决议报告, 数据区间从 19800201-至今
|
||||
https://datacenter.jin10.com/reportType/dc_australia_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_australia_interest_rate_decision_all.js?v=1578582414
|
||||
:return: 澳洲联储决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="27", name="澳洲联储决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-日本央行决议报告
|
||||
def macro_bank_japan_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
日本利率决议报告, 数据区间从 20080214-至今
|
||||
https://datacenter.jin10.com/reportType/dc_japan_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_japan_interest_rate_decision_all.js?v=1578582485
|
||||
:return: 日本利率决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="22", name="日本央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-俄罗斯央行决议报告
|
||||
def macro_bank_russia_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
俄罗斯利率决议报告, 数据区间从 20030601-至今
|
||||
https://datacenter.jin10.com/reportType/dc_russia_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_russia_interest_rate_decision_all.js?v=1578582572
|
||||
:return: 俄罗斯利率决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="64", name="俄罗斯央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-印度央行决议报告
|
||||
def macro_bank_india_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
印度利率决议报告, 数据区间从 20000801-至今
|
||||
https://datacenter.jin10.com/reportType/dc_india_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_india_interest_rate_decision_all.js?v=1578582645
|
||||
:return: 印度利率决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="68", name="印度央行决议报告")
|
||||
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-巴西央行决议报告
|
||||
def macro_bank_brazil_interest_rate() -> pd.DataFrame:
|
||||
"""
|
||||
巴西利率决议报告, 数据区间从 20080201-至今
|
||||
https://datacenter.jin10.com/reportType/dc_brazil_interest_rate_decision
|
||||
https://cdn.jin10.com/dc/reports/dc_brazil_interest_rate_decision_all.js?v=1578582718
|
||||
:return: 巴西利率决议报告-今值(%)
|
||||
:rtype: pandas.Series
|
||||
"""
|
||||
return __get_interest_rate_data(attr_id="55", name="巴西央行决议报告")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-美联储利率决议报告
|
||||
macro_bank_usa_interest_rate_df = macro_bank_usa_interest_rate()
|
||||
print(macro_bank_usa_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-欧洲央行决议报告
|
||||
macro_bank_euro_interest_rate_df = macro_bank_euro_interest_rate()
|
||||
print(macro_bank_euro_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-新西兰联储决议报告
|
||||
macro_bank_newzealand_interest_rate_df = macro_bank_newzealand_interest_rate()
|
||||
print(macro_bank_newzealand_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-中国央行决议报告
|
||||
macro_bank_china_interest_rate_df = macro_bank_china_interest_rate()
|
||||
print(macro_bank_china_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-瑞士央行决议报告
|
||||
macro_bank_switzerland_interest_rate_df = macro_bank_switzerland_interest_rate()
|
||||
print(macro_bank_switzerland_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-英国央行决议报告
|
||||
macro_bank_english_interest_rate_df = macro_bank_english_interest_rate()
|
||||
print(macro_bank_english_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-澳洲联储决议报告
|
||||
macro_bank_australia_interest_rate_df = macro_bank_australia_interest_rate()
|
||||
print(macro_bank_australia_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-日本央行决议报告
|
||||
macro_bank_japan_interest_rate_df = macro_bank_japan_interest_rate()
|
||||
print(macro_bank_japan_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-俄罗斯央行决议报告
|
||||
macro_bank_russia_interest_rate_df = macro_bank_russia_interest_rate()
|
||||
print(macro_bank_russia_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-印度央行决议报告
|
||||
macro_bank_india_interest_rate_df = macro_bank_india_interest_rate()
|
||||
print(macro_bank_india_interest_rate_df)
|
||||
|
||||
# 金十数据中心-经济指标-央行利率-主要央行利率-巴西央行决议报告
|
||||
macro_bank_brazil_interest_rate_df = macro_bank_brazil_interest_rate()
|
||||
print(macro_bank_brazil_interest_rate_df)
|
||||
@@ -0,0 +1,552 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2022/11/27 20:30
|
||||
Desc: 东方财富-经济数据-加拿大
|
||||
https://data.eastmoney.com/cjsj/foreign_5_0.html
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
# 新屋开工
|
||||
def macro_canada_new_house_rate() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-新屋开工
|
||||
https://data.eastmoney.com/cjsj/foreign_7_0.html
|
||||
:return: 新屋开工
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00342247")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 失业率
|
||||
def macro_canada_unemployment_rate() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-失业率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_1.html
|
||||
:return: 失业率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00157746")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 贸易帐
|
||||
def macro_canada_trade() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-贸易帐
|
||||
https://data.eastmoney.com/cjsj/foreign_7_2.html
|
||||
:return: 贸易帐
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00102022")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 零售销售月率
|
||||
def macro_canada_retail_rate_monthly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-零售销售月率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_3.html
|
||||
:return: 零售销售月率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG01337094")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 央行公布利率决议
|
||||
def macro_canada_bank_rate() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-央行公布利率决议
|
||||
https://data.eastmoney.com/cjsj/foreign_7_4.html
|
||||
:return: 央行公布利率决议
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00342248")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 核心消费者物价指数年率
|
||||
def macro_canada_core_cpi_yearly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-核心消费者物价指数年率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_5.html
|
||||
:return: 核心消费者物价指数年率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00102030")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 核心消费者物价指数月率
|
||||
def macro_canada_core_cpi_monthly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-核心消费者物价指数月率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_6.html
|
||||
:return: 核心消费者物价指数月率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00102044")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 消费者物价指数年率
|
||||
def macro_canada_cpi_yearly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-消费者物价指数年率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_7.html
|
||||
:return: 消费者物价指数年率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00102029")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# 消费者物价指数月率
|
||||
def macro_canada_cpi_monthly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-消费者物价指数月率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_8.html
|
||||
:return: 消费者物价指数月率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00158719")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
# GDP 月率
|
||||
def macro_canada_gdp_monthly() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据-加拿大-GDP 月率
|
||||
https://data.eastmoney.com/cjsj/foreign_7_9.html
|
||||
:return: GDP 月率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_CA",
|
||||
"columns": "ALL",
|
||||
"filter": '(INDICATOR_ID="EMG00159259")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "2000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.columns = [
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"时间",
|
||||
"-",
|
||||
"发布日期",
|
||||
"现值",
|
||||
"前值",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"]).dt.date
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
macro_canada_new_house_rate_df = macro_canada_new_house_rate()
|
||||
print(macro_canada_new_house_rate_df)
|
||||
|
||||
macro_canada_unemployment_rate_df = macro_canada_unemployment_rate()
|
||||
print(macro_canada_unemployment_rate_df)
|
||||
|
||||
macro_canada_trade_df = macro_canada_trade()
|
||||
print(macro_canada_trade_df)
|
||||
|
||||
macro_canada_retail_rate_monthly_df = macro_canada_retail_rate_monthly()
|
||||
print(macro_canada_retail_rate_monthly_df)
|
||||
|
||||
macro_canada_bank_rate_df = macro_canada_bank_rate()
|
||||
print(macro_canada_bank_rate_df)
|
||||
|
||||
macro_canada_core_cpi_yearly_df = macro_canada_core_cpi_yearly()
|
||||
print(macro_canada_core_cpi_yearly_df)
|
||||
|
||||
macro_canada_core_cpi_monthly_df = macro_canada_core_cpi_monthly()
|
||||
print(macro_canada_core_cpi_monthly_df)
|
||||
|
||||
macro_canada_cpi_yearly_df = macro_canada_cpi_yearly()
|
||||
print(macro_canada_cpi_yearly_df)
|
||||
|
||||
macro_canada_cpi_monthly_df = macro_canada_cpi_monthly()
|
||||
print(macro_canada_cpi_monthly_df)
|
||||
|
||||
macro_canada_gdp_monthly_df = macro_canada_gdp_monthly()
|
||||
print(macro_canada_gdp_monthly_df)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/4/3 16:21
|
||||
Desc: 中国-香港-宏观指标
|
||||
https://data.eastmoney.com/cjsj/foreign_8_0.html
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
|
||||
def macro_china_hk_core(symbol: str = "EMG00341602") -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-数据中心-经济数据一览-宏观经济-日本-核心代码
|
||||
https://data.eastmoney.com/cjsj/foreign_1_0.html
|
||||
:param symbol: 代码
|
||||
:type symbol: str
|
||||
:return: 指定 symbol 的数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
||||
params = {
|
||||
"reportName": "RPT_ECONOMICVALUE_HK",
|
||||
"columns": "ALL",
|
||||
"filter": f'(INDICATOR_ID="{symbol}")',
|
||||
"pageNumber": "1",
|
||||
"pageSize": "5000",
|
||||
"sortColumns": "REPORT_DATE",
|
||||
"sortTypes": "-1",
|
||||
"source": "WEB",
|
||||
"client": "WEB",
|
||||
"p": "1",
|
||||
"pageNo": "1",
|
||||
"pageNum": "1",
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame(data_json["result"]["data"])
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"COUNTRY": "-",
|
||||
"INDICATOR_ID": "-",
|
||||
"INDICATOR_NAME": "-",
|
||||
"REPORT_DATE_CH": "时间",
|
||||
"REPORT_DATE": "-",
|
||||
"PUBLISH_DATE": "发布日期",
|
||||
"VALUE": "现值",
|
||||
"PRE_VALUE": "前值",
|
||||
"INDICATOR_IDOLD": "-",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"时间",
|
||||
"前值",
|
||||
"现值",
|
||||
"发布日期",
|
||||
]
|
||||
]
|
||||
temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
|
||||
temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
|
||||
temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
|
||||
temp_df.sort_values(["发布日期"], inplace=True, ignore_index=True)
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_cpi() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-消费者物价指数
|
||||
https://data.eastmoney.com/cjsj/foreign_8_0.html
|
||||
:return: 消费者物价指数
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG01336996")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_cpi_ratio() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-消费者物价指数年率
|
||||
https://data.eastmoney.com/cjsj/foreign_8_1.html
|
||||
:return: 消费者物价指数年率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG00059282")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_rate_of_unemployment() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-失业率
|
||||
https://data.eastmoney.com/cjsj/foreign_8_2.html
|
||||
:return: 失业率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG00059647")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_gbp() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-香港 GDP
|
||||
https://data.eastmoney.com/cjsj/foreign_8_3.html
|
||||
:return: 香港 GDP
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG01337008")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_gbp_ratio() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-香港 GDP 同比
|
||||
https://data.eastmoney.com/cjsj/foreign_8_4.html
|
||||
:return: 香港 GDP 同比
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG01337009")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_building_volume() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-香港楼宇买卖合约数量
|
||||
https://data.eastmoney.com/cjsj/foreign_8_5.html
|
||||
:return: 香港楼宇买卖合约数量
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG00158055")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_building_amount() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-香港楼宇买卖合约成交金额
|
||||
https://data.eastmoney.com/cjsj/foreign_8_6.html
|
||||
:return: 香港楼宇买卖合约成交金额
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG00158066")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_trade_diff_ratio() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-香港商品贸易差额年率
|
||||
https://data.eastmoney.com/cjsj/foreign_8_7.html
|
||||
:return: 香港商品贸易差额年率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG00157898")
|
||||
return temp_df
|
||||
|
||||
|
||||
def macro_china_hk_ppi() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富-经济数据一览-中国香港-香港制造业 PPI 年率
|
||||
https://data.eastmoney.com/cjsj/foreign_8_8.html
|
||||
:return: 香港制造业 PPI 年率
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
temp_df = macro_china_hk_core(symbol="EMG00157818")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
macro_china_hk_cpi_df = macro_china_hk_cpi()
|
||||
print(macro_china_hk_cpi_df)
|
||||
|
||||
macro_china_hk_cpi_ratio_df = macro_china_hk_cpi_ratio()
|
||||
print(macro_china_hk_cpi_ratio_df)
|
||||
|
||||
macro_china_hk_rate_of_unemployment_df = macro_china_hk_rate_of_unemployment()
|
||||
print(macro_china_hk_rate_of_unemployment_df)
|
||||
|
||||
macro_china_hk_gbp_df = macro_china_hk_gbp()
|
||||
print(macro_china_hk_gbp_df)
|
||||
|
||||
macro_china_hk_gbp_ratio_df = macro_china_hk_gbp_ratio()
|
||||
print(macro_china_hk_gbp_ratio_df)
|
||||
|
||||
marco_china_hk_building_volume_df = macro_china_hk_building_volume()
|
||||
print(marco_china_hk_building_volume_df)
|
||||
|
||||
macro_china_hk_building_amount_df = macro_china_hk_building_amount()
|
||||
print(macro_china_hk_building_amount_df)
|
||||
|
||||
macro_china_hk_trade_diff_ratio_df = macro_china_hk_trade_diff_ratio()
|
||||
print(macro_china_hk_trade_diff_ratio_df)
|
||||
|
||||
macro_china_hk_ppi_df = macro_china_hk_ppi()
|
||||
print(macro_china_hk_ppi_df)
|
||||
@@ -0,0 +1,293 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2024/6/30 22:00
|
||||
Desc: 中国-国家统计局-宏观数据
|
||||
https://data.stats.gov.cn/easyquery.htm
|
||||
"""
|
||||
|
||||
import time
|
||||
from functools import lru_cache
|
||||
from typing import Union, Literal, List, Dict
|
||||
|
||||
import jsonpath as jp
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import requests
|
||||
import urllib3
|
||||
from urllib3.exceptions import InsecureRequestWarning
|
||||
|
||||
# 忽略InsecureRequestWarning警告
|
||||
urllib3.disable_warnings(InsecureRequestWarning)
|
||||
|
||||
|
||||
@lru_cache
|
||||
def _get_nbs_tree(idcode: str, dbcode: str) -> List[Dict]:
|
||||
"""
|
||||
获取指标目录树
|
||||
:param idcode: 指标编码
|
||||
:param dbcode: 库编码
|
||||
:return: json数据
|
||||
"""
|
||||
url = "https://data.stats.gov.cn/easyquery.htm"
|
||||
params = {"id": idcode, "dbcode": dbcode, "wdcode": "zb", "m": "getTree"}
|
||||
r = requests.post(url, params=params, verify=False, allow_redirects=True)
|
||||
data_json = r.json()
|
||||
return data_json
|
||||
|
||||
|
||||
@lru_cache
|
||||
def _get_nbs_wds_tree(idcode: str, dbcode: str, rowcode: str) -> List[Dict]:
|
||||
"""
|
||||
获取地区数据的可选指标目录树
|
||||
:param idcode: 指标编码
|
||||
:param dbcode: 库编码
|
||||
:param rowcode: 值为zb是返回地区的编码,值为reg时返回可选指标的编码
|
||||
:return: json数据
|
||||
"""
|
||||
url = "https://data.stats.gov.cn/easyquery.htm"
|
||||
params = {
|
||||
"m": "getOtherWds",
|
||||
"dbcode": dbcode,
|
||||
"rowcode": rowcode,
|
||||
"colcode": "sj",
|
||||
"wds": '[{"wdcode":"zb","valuecode":"%s"}]' % idcode,
|
||||
"k1": str(time.time_ns())[:13],
|
||||
}
|
||||
r = requests.post(url, params=params, verify=False, allow_redirects=True)
|
||||
data_json = r.json()
|
||||
data_json = data_json["returndata"][0]["nodes"]
|
||||
return data_json
|
||||
|
||||
|
||||
def _get_code_from_nbs_tree(tree: List[Dict], name: str, target: str = "id") -> str:
|
||||
"""
|
||||
根据指标名称从目录树中获取target编码
|
||||
:param tree: 目录树
|
||||
:param name: 指标名称
|
||||
:param target: 指标编码属性名
|
||||
:return: 指标编码
|
||||
"""
|
||||
expr = f'$[?(@.name == "{name}")].{target}'
|
||||
ret = jp.jsonpath(tree, expr)
|
||||
if ret is False:
|
||||
raise ValueError("Please check if the data path or indicator is correct.")
|
||||
return ret[0]
|
||||
|
||||
|
||||
def macro_china_nbs_nation(
|
||||
kind: Literal["月度数据", "季度数据", "年度数据"], path: str, period: str = "LAST10"
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
国家统计局全国数据通用接口
|
||||
https://data.stats.gov.cn/easyquery.htm
|
||||
:param kind: 数据类别
|
||||
:param path: 数据路径
|
||||
:param period: 时间区间,例如'LAST10', '2016-2023', '2016-'等
|
||||
:return: 国家统计局统计数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
# 获取dbcode
|
||||
kind_code = {"月度数据": "hgyd", "季度数据": "hgjd", "年度数据": "hgnd"}
|
||||
dbcode = kind_code[kind]
|
||||
|
||||
# 获取最终id
|
||||
parent_tree = _get_nbs_tree("zb", dbcode)
|
||||
path_split = path.replace(" ", "").split(">")
|
||||
indicator_id = _get_code_from_nbs_tree(parent_tree, path_split[0])
|
||||
path_split.pop(0)
|
||||
while path_split:
|
||||
temp_tree = _get_nbs_tree(indicator_id, dbcode)
|
||||
indicator_id = _get_code_from_nbs_tree(temp_tree, path_split[0])
|
||||
path_split.pop(0)
|
||||
|
||||
# 请求数据
|
||||
url = "https://data.stats.gov.cn/easyquery.htm"
|
||||
params = {
|
||||
"m": "QueryData",
|
||||
"dbcode": dbcode,
|
||||
"rowcode": "zb",
|
||||
"colcode": "sj",
|
||||
"wds": "[]",
|
||||
"dfwds": '[{"wdcode":"zb","valuecode":"%s"}, '
|
||||
'{"wdcode":"sj","valuecode":"%s"}]' % (indicator_id, period),
|
||||
"k1": str(time.time_ns())[:13],
|
||||
}
|
||||
r = requests.get(url, params=params, verify=False, allow_redirects=True)
|
||||
data_json = r.json()
|
||||
|
||||
# 整理为dataframe
|
||||
temp_df = pd.DataFrame(data_json["returndata"]["datanodes"])
|
||||
temp_df["data"] = temp_df["data"].apply(
|
||||
lambda x: x["data"] if x["hasdata"] else None
|
||||
)
|
||||
|
||||
wdnodes = data_json["returndata"]["wdnodes"]
|
||||
wn_df_list = []
|
||||
for wn in wdnodes:
|
||||
wn_df_list.append(
|
||||
pd.DataFrame(wn["nodes"])
|
||||
.assign(
|
||||
funit=lambda df: df["unit"].apply(lambda x: "(" + x + ")" if x else x)
|
||||
)
|
||||
.assign(fname=lambda df: df["cname"] + df["funit"]),
|
||||
)
|
||||
|
||||
row_name, column_name = (
|
||||
wn_df_list[0]["fname"],
|
||||
wn_df_list[1]["fname"],
|
||||
)
|
||||
|
||||
data_ndarray = np.reshape(temp_df["data"], (len(row_name), len(column_name)))
|
||||
data_df = pd.DataFrame(data=data_ndarray, columns=column_name, index=row_name)
|
||||
data_df.index.name = None
|
||||
data_df.columns.name = None
|
||||
|
||||
return data_df
|
||||
|
||||
|
||||
def macro_china_nbs_region(
|
||||
kind: Literal[
|
||||
"分省月度数据",
|
||||
"分省季度数据",
|
||||
"分省年度数据",
|
||||
"主要城市月度价格",
|
||||
"主要城市年度数据",
|
||||
"港澳台月度数据",
|
||||
"港澳台年度数据",
|
||||
],
|
||||
path: str,
|
||||
indicator: Union[str, None],
|
||||
region: Union[str, None] = None,
|
||||
period: str = "LAST10",
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
国家统计局地区数据通用接口
|
||||
https://data.stats.gov.cn/easyquery.htm
|
||||
:param kind: 数据类别
|
||||
:param path: 数据路径
|
||||
:param indicator: 指定指标
|
||||
:param region: 指定地区 当指定region时,将symbol设为None可以同时获得所有可选指标的值
|
||||
:param period: 时间区间,例如'LAST10', '2016-2023', '2016-'等
|
||||
:return: 国家统计局统计数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
if indicator is None and region is None:
|
||||
raise AssertionError("The indicator and region parameters cannot both be None.")
|
||||
|
||||
# 获取dbcode
|
||||
kind_dict = {
|
||||
"分省月度数据": "fsyd",
|
||||
"分省季度数据": "fsjd",
|
||||
"分省年度数据": "fsnd",
|
||||
"主要城市月度价格": "csyd",
|
||||
"主要城市年度数据": "csnd",
|
||||
"港澳台月度数据": "gatyd",
|
||||
"港澳台年度数据": "gatnd",
|
||||
}
|
||||
dbcode = kind_dict[kind]
|
||||
|
||||
# 获取最终id
|
||||
parent_tree = _get_nbs_tree("zb", dbcode)
|
||||
path_split = path.replace(" ", "").split(">")
|
||||
indicator_id = _get_code_from_nbs_tree(parent_tree, path_split[0])
|
||||
path_split.pop(0)
|
||||
while path_split:
|
||||
temp_tree = _get_nbs_tree(indicator_id, dbcode)
|
||||
indicator_id = _get_code_from_nbs_tree(temp_tree, path_split[0])
|
||||
path_split.pop(0)
|
||||
|
||||
# 参数设定
|
||||
if region is None:
|
||||
indicator_tree = _get_nbs_wds_tree(indicator_id, dbcode, "reg")
|
||||
indicator_id = _get_code_from_nbs_tree(indicator_tree, indicator, target="code")
|
||||
rowcode = "reg"
|
||||
colcode = "sj"
|
||||
wds = '[{"wdcode":"zb","valuecode":"%s"}]' % indicator_id
|
||||
dfwds = '[{"wdcode":"sj","valuecode":"%s"}]' % period
|
||||
else:
|
||||
if indicator is not None:
|
||||
indicator_tree = _get_nbs_wds_tree(indicator_id, dbcode, "reg")
|
||||
indicator_id = _get_code_from_nbs_tree(
|
||||
indicator_tree, indicator, target="code"
|
||||
)
|
||||
region_tree = _get_nbs_wds_tree(indicator_id, dbcode, "zb")
|
||||
region_id = _get_code_from_nbs_tree(region_tree, region, target="code")
|
||||
rowcode = "zb"
|
||||
colcode = "sj"
|
||||
wds = '[{"wdcode":"reg","valuecode":"%s"}]' % region_id
|
||||
dfwds = (
|
||||
'[{"wdcode":"zb","valuecode":"%s"}, '
|
||||
'{"wdcode":"sj","valuecode":"%s"}]' % (indicator_id, period)
|
||||
)
|
||||
|
||||
# 请求数据
|
||||
url = "https://data.stats.gov.cn/easyquery.htm"
|
||||
params = {
|
||||
"m": "QueryData",
|
||||
"dbcode": dbcode,
|
||||
"rowcode": rowcode,
|
||||
"colcode": colcode,
|
||||
"wds": wds,
|
||||
"dfwds": dfwds,
|
||||
"k1": str(time.time_ns())[:13],
|
||||
}
|
||||
r = requests.get(url, params=params, verify=False, allow_redirects=True)
|
||||
data_json = r.json()
|
||||
|
||||
# 整理为dataframe
|
||||
temp_df = pd.DataFrame(data_json["returndata"]["datanodes"])
|
||||
temp_df["data"] = temp_df["data"].apply(
|
||||
lambda x: x["data"] if x["hasdata"] else None
|
||||
)
|
||||
|
||||
wdnodes = data_json["returndata"]["wdnodes"]
|
||||
wn_df_list = []
|
||||
for wn in wdnodes:
|
||||
wn_df_list.append(
|
||||
pd.DataFrame(wn["nodes"])
|
||||
.assign(
|
||||
funit=lambda df: df["unit"].apply(lambda x: "(" + x + ")" if x else x)
|
||||
)
|
||||
.assign(fname=lambda df: df["cname"] + df["funit"]),
|
||||
)
|
||||
|
||||
if region is None:
|
||||
row_name, column_name = wn_df_list[1]["fname"], wn_df_list[2]["fname"]
|
||||
title_name = wn_df_list[0]["fname"][0]
|
||||
else:
|
||||
row_name, column_name = wn_df_list[0]["fname"], wn_df_list[2]["fname"]
|
||||
title_name = wn_df_list[1]["fname"][0]
|
||||
|
||||
data_ndarray = np.reshape(temp_df["data"], (len(row_name), len(column_name)))
|
||||
data_df = pd.DataFrame(data=data_ndarray, columns=column_name, index=row_name)
|
||||
data_df.index.name = None
|
||||
data_df.columns.name = title_name
|
||||
|
||||
return data_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
macro_china_nbs_nation_df = macro_china_nbs_nation(
|
||||
kind="月度数据",
|
||||
path="工业 > 工业分大类行业出口交货值(2018-至今) > 废弃资源综合利用业",
|
||||
period="LAST5",
|
||||
)
|
||||
print(macro_china_nbs_nation_df)
|
||||
|
||||
macro_china_nbs_region_df = macro_china_nbs_region(
|
||||
kind="分省季度数据",
|
||||
path="人民生活 > 居民人均可支配收入",
|
||||
period="2018-2022",
|
||||
indicator=None,
|
||||
region="北京市",
|
||||
)
|
||||
print(macro_china_nbs_region_df)
|
||||
|
||||
macro_china_nbs_region_df = macro_china_nbs_region(
|
||||
kind="分省季度数据",
|
||||
path="国民经济核算 > 地区生产总值",
|
||||
period="2018-",
|
||||
indicator="地区生产总值_累计值(亿元)",
|
||||
)
|
||||
print(macro_china_nbs_region_df)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user