jing
jing downloads and organizes stock market data. The examples below use China A-share stocks with BaoStock.
Install
pip install jing
Download CN data
BaoStock is the default data source for CN. Stock codes must include an exchange prefix, such as sh. or sz..
import jing
d = jing.D("cn")
d.download("sz.000807") # Download one stock
d.download() # Download the stocks in the default list
Batch downloads use ~/data/jing/list/cn_baostock.txt by default. On first use, jing copies the bundled list there; edit this copy to maintain your stock list.
File locations
The default data directory is ~/data/jing:
~/data/jing/
├── list/cn_baostock.txt
└── raw/baostock/cn/sz.000807.csv
Set JING_DATA to use another directory:
export JING_DATA=/data/stocks
Or set the data directory from Python:
from jing.data_paths import set_data_root
set_data_root("/data/stocks")
The stock list and CSV files will then be stored under /data/stocks/list/ and /data/stocks/raw/baostock/cn/.
Upload to COS (optional)
Uploading to Tencent COS is opt-in — most users have no COS bucket, and nothing in the library touches COS unless you ask it to.
pip install jing[cos] # the Tencent SDK is not installed by default
export JING_SYNC_COS=1 # upload each market after a batch download
Credentials come from a flat ~/.cos.yaml holding only the secrets:
cos_secret_id: <SecretId>
cos_secret_key: <SecretKey>
Or drive the uploader directly, which is also the only way to feed it credentials from somewhere else (an object built with your own client):
from jing import COSUploader
COSUploader(markets=["cn"]).upload() # python -m jing.uploader_cos also works
A local file never overwrites a better copy on COS: if it is less than half the
remote size, or its last date is older, it is skipped and listed in
alerts/alert-<date>.txt on COS. JING_COS_SHRINK_GUARD tunes the ratio and
0 turns the guards off.
Run daily on a server
deploy/ holds the cron entry point. It is a deployment script, not part of the
jing package: jing only downloads and uploads, deploy/daily.py schedules
that.
sudo mkdir -p /opt/jing /data/jing /var/log/jing
sudo git clone <this repo> /opt/jing
cd /opt/jing && python3 -m venv .venv && .venv/bin/pip install -e ".[cos]"
sudo install -m 600 deploy/env.example /etc/jing/env
sudo $EDITOR /etc/jing/env # fill in JING_COS_SECRET_ID / _KEY
.venv/bin/python deploy/daily.py us # smoke test on one market
crontab deploy/jing.cron # weekdays 20:00 Asia/Shanghai
run_daily.sh loads /etc/jing/env (cron has no login shell), takes a flock
so a slow run cannot overlap the next one, and writes /var/log/jing/<date>.log
(kept 14 days).
Notes:
- Interrupted runs resume. Each stock's CSV is the ledger, so the next run only downloads what is missing. Running out of the time budget is a normal outcome, not a failure.
- Concurrency:
JING_MAX_WORKERSoverrides the built-in worker count (3 for BaoStock, 10 otherwise). The server sets it to 1 — one request at a time from one IP is the cheapest insurance against being rate limited.D.download(max_workers=N)overrides it per call. - akshare timeouts: akshare's requests carry no timeout, so
jingpatchesrequests.sessions.Session.requestto inject one (JING_HTTP_TIMEOUT, default 30s, 0 disables).socket.setdefaulttimeout()cannot do this — urllib3 passes its ownNonedown tosock.settimeout(), overriding it. - cn uses BaoStock only.
cn_ak(AKShare) covers the same A-shares; running both every day doubles the request load for no new data.
Metadata
Release files for jing 0.4.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jing-0.4.4.tar.gz | 88.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jing-0.4.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 175.9 kB
Release files / jing-0.4.4.tar.gz
| Download URL | jing-0.4.4.tar.gz |
|---|---|
| Size | 88.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a89595b719c7d5b9c97fcf7de7ec8ff58e65337c5751257a306cde14d1bdcce0
|
|
BLAKE2b-256 checksum How to use checksums |
942ff2a0fe421a224ebf214e56b909ec98428ad6fb5718c890e06da5a1a8a332
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / jing-0.4.4-py3-none-any.whl
| Download URL | jing-0.4.4-py3-none-any.whl |
|---|---|
| Size | 87.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9d079a1c7f73d2dcff559bb3a502ff3e8c5dcb7abfbb3cef72405727db737487
|
|
BLAKE2b-256 checksum How to use checksums |
0338a3810d9386a5ebb4a18b51168fa01bdd2362ac2e6917935c68df4688f4e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|