Vnstock Logo

Chọn nguồn

Thử nghiệm

Mục lục

Bản thử nghiệm, chưa phát hành chính thức

Trang này viết cho vnstock v6.0.0rc2, bản thử nghiệm. Tên hàm, tham số và cột dữ liệu có thể còn đổi trước ngày phát hành; khi cài, ghi rõ số phiên bản như ở trang Cài đặt. Bản đang phát hành chính thức là v5.0.1, xem tài liệu bản đó.

Nguồn của bạn

Chọn nguồn bạn có khoá, mã trên trang sẽ điền theo. Chưa chọn thì mã giữ chỗ trống <nguồn>. Nguồn xếp theo bảng chữ cái, không phải khuyến nghị.

vnstock thế hệ 6 không tự chọn nguồn. Mỗi nguồn dùng tài khoản và điều kiện truy cập riêng, nên bạn quyết định nguồn nào phục vụ từng hàm. Có hai cách: nêu nguồn ngay trong lời gọi hoặc đặt sẵn quy tắc bằng vnstock.sources.

Nêu nguồn trong lời gọi

Python
from vnstock import Market

Market("<nguồn>").equity("FPT").ohlcv(start="2026-10-01")             # cả đối tượng dùng nguồn này
Market().equity("FPT").ohlcv(source="<nguồn>", start="2026-10-01")   # chỉ lời gọi này

Mỗi hàm có bộ nguồn riêng. Danh sách mã chẳng hạn:

Python
from vnstock import Reference

Reference("<nguồn>").equity.list()

Khi nêu nguồn trong lời gọi, vnstock dùng đúng nguồn đó và không chuyển sang nguồn dự phòng.

Không nêu nguồn và chưa đặt quy tắc thì hàm báo VNSTOCK_INPUT_SOURCE, kèm danh sách nguồn đọc được hàm đó.

Đặt sẵn nguồn bằng vnstock.sources

Python
from vnstock import Market, sources

sources.use("<nguồn A>")                                          # mọi hàm
sources.use("<nguồn B>", "<nguồn C>", route="market.crypto.*")    # nhóm tiền mã hoá; nguồn C là dự phòng
sources.use("<nguồn D>", route="market.equity.quote")             # riêng bảng giá cổ phiếu

Market().equity("FPT").quote()            # nguồn D
Market().crypto("BTCUSDT").ohlcv()        # nguồn B
Market().equity("FPT").ohlcv()            # nguồn A

route là tên nhóm dữ liệu theo dạng lớp.nhóm.hàm, đúng như tên in trong thông báo lỗi: market.equity.ohlcv, reference.equity.list. Dùng * để chọn nhiều tên một lúc (market.crypto.*, market.*.ohlcv). Bỏ route là đặt cho mọi hàm.

Quy tắc nào được dùng

Khi lời gọi không nêu nguồn, vnstock xét quy tắc theo thứ tự:

  1. quy tắc đặt đúng tên hàm (market.equity.quote);
  2. quy tắc dùng mẫu, mẫu càng cụ thể càng được xét trước (market.crypto.* trước market.*);
  3. quy tắc cho mọi hàm.

Nếu các nguồn trong một quy tắc không hỗ trợ hàm đang gọi, vnstock xét tiếp quy tắc sau. Vì vậy, quy tắc chung cho một nguồn vẫn dùng được cùng quy tắc riêng cho dữ liệu tiền mã hoá qua nguồn khác.

Nguồn dự phòng

Các nguồn sau nguồn đầu tiên là dự phòng, thử theo thứ tự, chỉ khi nguồn trước không phục vụ được:

Chuyển sang nguồn kế tiếpKhông chuyển, báo lỗi ngay
Nguồn không đọc được hàm nàyThiếu khoá (CredentialError)
Mất kết nối, hết thời gian chờ (NetworkError)Nguồn từ chối khoá, cần OTP (AuthError)
Nguồn lỗi (SourceError)Nguồn đang tạm tắt theo chính sách (PolicyError)
Nguồn giới hạn tần suất (RateLimitError)Tham số sai (InputError)

Các lỗi ở cột phải cần người dùng xử lý, nên vnstock báo ngay thay vì che lỗi bằng một nguồn khác.

Kết quả ghi lại cách nguồn được chọn:

Python
df = Market().crypto("BTCUSDT").ohlcv()
df.attrs["source"]           # '<nguồn B>'
df.attrs["source_rule"]      # 'market.crypto.*'
df.attrs.get("source_skipped")  # các nguồn đã thử trước đó và lý do, nếu có

Xem, bỏ, lưu quy tắc

Python
sources.show()                         # bảng quy tắc, cụ thể nhất trước, kèm số hàm mỗi quy tắc phủ
sources.which("market.equity.quote")   # quy tắc nào áp dụng, các nguồn sẽ thử, các nguồn đọc được
sources.get("market.crypto.ohlcv")     # ['<nguồn B>', '<nguồn C>']
sources.readers("market.equity.ohlcv") # nguồn đọc được hàm này
sources.clear("market.equity.quote")   # bỏ một quy tắc
sources.clear()                        # bỏ mọi quy tắc

sources.save()                         # ghi ~/.vnstock/sources.json
sources.load()                         # nạp lại

Để tự nạp quy tắc khi mở Python, hãy đặt biến môi trường VNSTOCK_SOURCES trỏ tới tệp đã lưu. vnstock không tự tìm tệp nếu thiếu biến này.

sources.use kiểm ngay khi bạn đặt: nguồn không tồn tại, mẫu không khớp hàm nào (VNSTOCK_INPUT_ROUTE), hay không nguồn nào đọc được các hàm khớp mẫu đều báo lỗi. Tệp lưu bị hỏng thì load() báo lỗi và giữ nguyên quy tắc đang có.

Nguồn nào đọc được hàm nào

Bảng đầy đủ ở Tham chiếu và Thị trường. Trong mã, dùng sources.readers(route). Trong terminal, vnstock tools --source <nguồn> liệt kê mọi hàm đọc được từ một nguồn.