Chuyển đổi từ bản cũ
Mở rộngBản Mở rộngCập nhật
Mục lục
Nếu bạn đang có các đoạn mã theo dõi tin tức viết cho vnstock_news phiên bản 2.x, thế hệ 5 hỗ trợ hai lộ trình
chuyển đổi linh hoạt tuỳ theo nhu cầu của bạn:
- Giữ nguyên mã cũ (Tương thích ngược 1:1): Thư viện cung cấp đầy đủ các lớp tương thích (
Crawler(),BatchCrawler(),AsyncBatchCrawler(),EnhancedNewsCrawler(),Cache,ContentCleaner,InputValidator) chạy trên lõi xử lý mới. Bạn có thể tiếp tục chạy mã nguồn cũ mà không phải viết lại từ đầu. - Rút gọn mã mới (Khuyến nghị): Chuyển đổi sang hai hàm tinh gọn
fetch_feeder()(lấy danh sách tin mới) vàfetch_articles()(đọc chi tiết bài viết) để mã nguồn đồng bộ, ngắn gọn và dễ bảo trì hơn.
Những cải tiến ở thế hệ 5
- Sửa lỗi lệch giờ: Ở bản 2.x, do bỏ qua độ lệch múi giờ trong RSS nên khi bạn lọc
within="1h", kịch bản thường lấy nhầm bài viết của 8 tiếng trước. Thế hệ 5 đã sửa lỗi này và lọc theo múi giờ Việt Nam (UTC+07:00). - Nối từ tự nhiên, không dính chữ: Khắc phục lỗi nối liền chữ của bản cũ (như
Giávàngtăngnay được đọc chuẩn thànhGiá vàng tăng). - Tự động nhận diện thời gian tiếng Việt: Tự động chuyển đổi các định dạng tương đối như
"5 phút trước","hôm qua"về ngày giờ chuẩn xác. - Bảo mật và an toàn kết nối: Xác thực TLS luôn được bật mặc định, chặn các chuyển hướng không an toàn.
- Hằng số cấu hình sẵn ở gói gốc: Các hằng số
SITES_CONFIG,SUPPORTED_SITESnay có thể import trực tiếp từvnstock_newsthay vì phải truy cập sâu vào module nội bộ.
Bảng đối chiếu mã lệnh (Bản cũ → Thế hệ 5)
| Thao tác | Bản cũ (2.x) | Thế hệ 5 (3.x) - Lớp tương thích | Thế hệ 5 (3.x) - Hàm mới khuyến nghị |
|---|---|---|---|
| Xem danh sách nguồn | vnstock_news.list_supported_sites() | vnstock_news.list_supported_sites() | vnstock_news.list_supported_sites() |
| Lấy danh sách tin mới | Crawler(site_name="cafef").get_articles_from_feed() | Giữ nguyên lớp Crawler | vnstock_news.fetch_feeder(site_name="cafef", ...) |
| Đọc bài viết theo lô | BatchCrawler(site_name="cafef").fetch_articles() | Giữ nguyên lớp BatchCrawler | vnstock_news.fetch_articles(site_name="cafef", ...) |
| Đọc bài bất đồng bộ | AsyncBatchCrawler(...).fetch_articles_async() | Giữ nguyên AsyncBatchCrawler | vnstock_news.fetch_articles(..., max_concurrency=5) |
| Đọc có cache & làm sạch | EnhancedNewsCrawler(...) | Giữ nguyên EnhancedNewsCrawler | fetch_articles() kết hợp Cache |
| Kiểm tra trạng thái | Không có | Không có | vnstock_news.status() |
| Bắt lỗi | except Exception: chung chung | from vnstock_news import NewsErrorexcept NewsError as err: | from vnstock_news import NewsErrorexcept NewsError as err: |
Ví dụ chuyển đổi cụ thể
Lộ trình 1: Giữ nguyên mã cũ với lớp tương thích
Bạn chỉ cần import trực tiếp từ vnstock_news, mã nguồn cũ sẽ tự động tận dụng lõi xử lý tốc độ cao:
Python
# Mã cũ vẫn chạy bình thường trên thế hệ 5:
from vnstock_news import Crawler, AsyncBatchCrawler, SITES_CONFIG
# Khởi tạo lớp Crawler() tương thích bản cũ
client = Crawler(site_name="cafef")
articles = client.get_articles_from_feed(limit_per_feed=15)
print(f"Lấy được {len(articles)} tin mới từ feed.")
# Hằng số SITES_CONFIG đã có sẵn ở gốc thư viện
print("Số nguồn tin hỗ trợ:", len(SITES_CONFIG))Lộ trình 2: Rút gọn sang hai hàm tinh gọn thế hệ 5
Chuyển đổi sang fetch_feeder() và fetch_articles() giúp loại bỏ mã lặp và đơn giản hoá đáng kể:
Python
import vnstock_news
# 1. Lấy danh sách liên kết tin mới.
# CafeF chỉ công bố sơ đồ trang (sitemap), nên bảng có cột url và lastmod, không có tiêu đề.
df_feed = vnstock_news.fetch_feeder(
site_name="cafef",
within="6h",
top_n=20
)
print(df_feed[["lastmod", "url"]].head())
# Trang có nguồn cấp tin RSS (như Vietstock) cho thêm tiêu đề và tóm tắt.
df_rss = vnstock_news.fetch_feeder(site_name="vietstock", within="6h", top_n=20)
print(df_rss[["pubDate", "title", "link"]].head())
# 2. Đọc thông tin từng bài viết (tiêu đề, tác giả, chuyên mục, thẻ, lượt xem)
df_articles = vnstock_news.fetch_articles(
site_name="cafef",
top_n=5
)
print(df_articles[["title", "author", "category", "publish_time", "url"]])Khác với bản cũ ở cột tên và nội dung bài
Ở bản 2.x, tên cột của bảng danh sách cũng tuỳ loại nguồn; thế hệ 5 giữ nguyên quy ước đó: RSS cho link, title, description, pubDate, sơ đồ trang cho url, lastmod. Danh mục thế hệ 5 không còn bộ chọn nội dung bài cho trang nào, nên cột content để trống khi đọc theo site_name. Mã cũ dựa vào nội dung bài cần một cấu hình bạn tự viết, xem Tự dựng cấu hình đọc nội dung từ một bài mẫu.
Danh sách việc cần làm khi nâng cấp
- Chạy
vnstock registerđể đăng nhập khoá API của tài khoản từ cấp Silver trở lên. - Nếu cần chạy ngay mã cũ: đổi các dòng import sâu thành import trực tiếp từ
vnstock_news(ví dụfrom vnstock_news import AsyncBatchCrawler). - Nếu muốn tái cấu trúc: thay thế các lời gọi lấy feed bằng
fetch_feeder(), thay các lời gọi đọc bài chi tiết bằngfetch_articles(). - Kiểm tên cột của
fetch_feeder()theo loại nguồn (link/pubDatevới RSS,url/lastmodvới sơ đồ trang). - Nếu mã cũ dùng cột
content: tự viết cấu hình cócontent_selectorcho trang được phép, vì danh mục không còn kèm. - Cập nhật khối bắt lỗi sang
try...except NewsError:.