Bài viết gần đây
-
-
Gọi API Claude và OpenAI bằng Python — AI vào app của bạn
Tháng 8 9, 2026 -
Bot Auto Trading bằng Python: Hướng dẫn cơ bản từ A đến Z
Tháng 8 9, 2026 -
Gọi API bằng Python — CoinGecko, JSON, urllib
Tháng 8 8, 2026
| Gọi API bằng Python — CoinGecko, JSON, urllib
Được viết bởi Đặng Trí Thanh vào ngày 08/08/2026 lúc 23:39 | 11 lượt xem
Mục lục
- API là gì — nói chuyện với server bằng URL
- urllib.request — không cần pip install
- JSON và pretty print
- CoinGecko — giá crypto realtime
- jsonplaceholder — học cấu trúc REST
- Gọi nhiều coin trong một request
- Xử lý lỗi HTTP và mạng
- Script Ngày 50 từng bước
- So sánh urllib và requests
- Bài tập và tích hợp bot paper
- Câu hỏi thường gặp (FAQ)
- Kết luận
1. API là gì — nói chuyện với server bằng URL
API (Application Programming Interface) là “cửa” để chương trình của bạn lấy hoặc gửi dữ liệu lên server. Với REST phổ biến, bạn gửi HTTP request (thường GET) tới một URL; server trả response — hay gặp nhất là body dạng JSON.
Ví dụ tư duy: thay vì mở trình duyệt xem giá Bitcoin, script Python gọi URL CoinGecko, parse JSON, lấy trường bitcoin.usd. Đó chính là nền của bot paper Ngày 48, phân tích Ngày 49, và mọi tự động hóa sau này trong PyNhiQuaiBot.
Ngày 50 (Day 50_Goi API Python.py) dùng urllib trong thư viện chuẩn — chạy ngay sau khi cài Python, phù hợp lớp học và video Python 365.
2. urllib.request — không cần pip install
Khối import cốt lõi:
import json
import urllib.error
import urllib.request
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) PythonDay50"}
Hàm call_api(url) tạo Request có header, mở URL với urlopen, đọc bytes, decode UTF-8, json.loads:
def call_api(url: str):
req = urllib.request.Request(url, headers=HEADERS)
with urllib.request.urlopen(req, timeout=15) as resp:
status = resp.status
raw = resp.read().decode("utf-8")
return status, json.loads(raw)
Trả về tuple (status_code, dict) giúp tách bước “HTTP OK?” và “JSON hợp lệ?”. Timeout 15 giây tránh treo khi Wi-Fi yếu.
3. JSON và pretty print
JSON là cặp key–value lồng nhau. Hàm pretty dùng json.dumps(..., ensure_ascii=False, indent=2) để in tiếng Việt và cấu trúc rõ:
def pretty(data) -> str:
return json.dumps(data, ensure_ascii=False, indent=2)
Khi debug API, in pretty trước khi truy cập data["bitcoin"]["usd"] — tránh KeyError vì schema đổi hoặc typo key.
4. CoinGecko — giá crypto realtime
Endpoint demo:
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd
Script in HTTP status, JSON đẹp, và dòng:
price = data["bitcoin"]["usd"]
print(f" 💰 Giá Bitcoin: {price:,} USD")
CoinGecko public tier không cần key cho ví dụ đơn giản, nhưng có rate limit. Nếu gặp HTTP 429, hãy time.sleep và thử lại — không vòng lặp vô hạn khi học.
Giá in ra phục vụ giáo dục — không dùng một lần gọi API để khuyên mua bán. Không cam kết lợi nhuận.
5. jsonplaceholder — học cấu trúc REST
URL mẫu: https://jsonplaceholder.typicode.com/posts/1
Đây là API giả lập blog: trả object có userId, id, title, body. Script in full JSON rồi trích title — minh họa cách API trả một resource theo id.
Bài học: nhiều API thực tế (CRM, ERP, webhook nội bộ) có shape tương tự — list posts, get post/1, create post POST. Ngày 50 chỉ GET, nhưng bạn đã thấy contract JSON rõ ràng.
6. Gọi nhiều coin trong một request
Ví dụ 3:
url = ("https://api.coingecko.com/api/v3/simple/price?"
"ids=bitcoin,ethereum,solana&vs_currencies=usd")
Một request — nhiều id — giảm số lần chạm rate limit. Pattern này dùng cho dashboard mini: loop key trong data và in từng giá.
7. Xử lý lỗi HTTP và mạng
Khối CoinGecko bọc urllib.error.HTTPError:
except urllib.error.HTTPError as exc:
print(f" ⚠️ HTTP {exc.code}: {exc.reason} (thử lại sau, API miễn phí có giới hạn)")
except Exception as exc:
print(f" ⚠️ Lỗi: {exc}")
Phân biệt: HTTP 404 (URL sai) vs 429 (quá tải) vs timeout (mạng). Bot production ghi log ra file; bài học in terminal là đủ.
Không log API key ra màn hình — Ngày 50 chưa dùng key, nhưng thói quen này bắt buộc khi sang sàn có authentication.
8. Script Ngày 50 từng bước
Chạy:
python "Day 50_Goi API Python.py"
Thứ tự main():
- CoinGecko Bitcoin USD.
- jsonplaceholder post 1.
- CoinGecko multi-coin.
Mỗi khối try/except độc lập — lỗi block 1 không chặn block 2. Đó là resilience cơ bản khi gọi dịch vụ bên thứ ba.
Kết thúc in: “Đổi URL trong code để gọi API khác” — khuyến khích thử endpoint docs chính thức, vẫn trong giới hạn miễn phí.
9. So sánh urllib và requests
| Tiêu chí | urllib (Ngày 50) | requests (phổ biến) |
|---|---|---|
| Cài đặt | Có sẵn | pip install requests |
| Cú pháp | Verbose hơn | requests.get(url).json() |
| Học tập | Hiểu HTTP gốc | Nhanh cho dự án |
Chuỗi Python 365 bắt đầu urllib để ai cũng chạy được; sau này refactor sang requests nếu team bạn chuẩn hóa vậy.
10. Bài tập và tích hợp bot paper
Bài tập 1: Thêm query include_24hr_change=true (đọc docs CoinGecko) và in % thay đổi 24h.
Bài tập 2: Viết get_btc_price() -> float | None trả None khi lỗi — dùng lại trong bot MA20 Ngày 48.
Bài tập 3: Lưu response JSON vào snapshots/price_{timestamp}.json để so sánh lịch sử pull.
Bài tập 4: Parse jsonplaceholder /users/1 — in email và address.city.
Bài tập 5: Đo thời gian một request bằng time.perf_counter().
Tích hợp: Pipeline API (50) → metric (49) → bot (48) là cùng một câu chuyện quant. Khóa PyNhiQuaiBot trên hub HNDL: https://www.huongnghiepdulieu.com/lap-trinh-python-nang-cao-hedging-tu-dong-hoa/ — lộ trình thực chiến hedging; QuantTrade là cách giới thiệu khóa đó trên fanpage quant.
11. Câu hỏi thường gặp (FAQ)
Q1: CoinGecko có mất phí không?
A: Tier miễn phí có giới hạn. Học tập: ít request, có sleep. Production cần đọc bảng giá và điều khoản.
Q2: jsonplaceholder có dữ liệu thật không?
A: Không — chỉ mẫu. Dùng để học JSON/REST, không dùng làm nguồn tin tức.
Q3: urllib có gửi POST được không?
A: Có, với data= bytes và method POST — bài sau có thể mở rộng.
Q4: API trả HTML thay vì JSON?
A: Thường do URL sai hoặc bị WAF. Kiểm tra URL, header, và Content-Type.
Q5: Giá API khác giá sàn?
A: Bình thường — nguồn và thời điểm khác nhau. Bot paper nên thống nhất một nguồn.
Q6: Học xong Ngày 50 làm gì tiếp?
A: Ghép API vào bot, Telegram alert, backtest — các ngày tiếp theo trong playlist https://www.youtube.com/playlist?list=PLlvatcRiI_TLt4teIBQgtXBlGLAerk9Ce.
12. Kết luận
Ngày 50 củng cố:
- Khái niệm GET + JSON.
call_apitái sử dụng với urllib.- CoinGecko giá realtime và multi-asset.
- jsonplaceholder đọc field JSON.
- Xử lý lỗi HTTP/mạng an toàn.
Đây là bước nền trước mọi bot demo — luôn kèm disclaimer không cam kết lợi nhuận. 📌 #Python365 — hẹn các ngày tiếp!
Cầu nối khóa PyNhiQuaiBot · QuantTrade
Cùng tư duy đọc dữ liệu → xử lý bằng Python → tự động hóa, khóa PyNhiQuaiBot (định vị quant trên fanpage: QuantTrade · Master Quantitative Trading) là lộ trình thực chiến bot hedging và tự động hóa nâng cao. Đăng ký tại hub: https://www.huongnghiepdulieu.com/lap-trinh-python-nang-cao-hedging-tu-dong-hoa/
QuantTrade là cách giới thiệu khóa PyNhiQuaiBot cho audience quant finance — cùng một khóa, không phải khóa riêng.
Xem thêm trên chuỗi Python 365
Theo dõi playlist Python 365 ngày trên kênh Hướng Nghiệp Dữ Liệu để học mỗi ngày một chủ đề: https://www.youtube.com/playlist?list=PLlvatcRiI_TLt4teIBQgtXBlGLAerk9Ce
Hashtag gợi ý: #Python365 · #HướngNghiệpDữ Liệu · #Python · #DataPass · #QuantTrade
Ghi chú thực hành (1)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (2)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (3)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (4)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (5)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (6)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (7)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (8)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (9)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (10)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (11)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (12)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (13)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (14)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (15)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (16)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (17)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (18)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (19)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (20)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (21)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (22)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (23)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (24)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (25)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (26)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (27)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (28)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (29)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (30)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (31)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (32)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (33)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (34)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (35)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (36)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (37)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (38)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (39)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (40)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (41)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (42)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (43)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (44)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (45)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (46)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (47)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (48)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (49)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (50)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (51)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (52)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (53)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (54)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (55)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (56)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (57)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (58)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (59)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (60)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (61)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (62)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (63)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (64)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (65)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (66)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (67)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (68)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (69)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (70)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (71)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (72)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (73)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (74)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (75)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (76)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (77)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (78)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (79)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (80)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (81)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (82)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (83)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (84)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (85)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (86)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (87)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (88)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Ghi chú thực hành (89)
Khi quay video, chuẩn bị offline JSON mẫu trong data/ để demo khi API fail — giống fallback Stooq→Binance ở Ngày 49.
Ghi chú thực hành (90)
Fanpage quant đọc caption ngắn; bài web 4000 từ giúp SEO — cùng nội dung Ngày 50, hai format phục vụ hai kênh HNDL.
Ghi chú thực hành (91)
Tạo file .env.example với COINGECKO_BASE=https://api.coingecko.com/api/v3 — chuẩn bị cho ngày sau khi cần Pro API, không commit key thật.
Ghi chú thực hành (92)
Viết wrapper fetch_json(url, retries=3) với exponential backoff khi gặp 429 — pattern production nhưng vẫn urllib thuần.
Ghi chú thực hành (93)
So sánh latency CoinGecko vs Binance public ticker cho BTC — bài tập hiểu độ trễ khi bot paper poll mỗi 60 giây.
Ghi chú thực hành (94)
Parse header Date từ HTTP response (urllib cho phép đọc resp.headers) để biết server timestamp — hữu ích khi log giá.
Ghi chú thực hành (95)
Dùng jsonplaceholder /comments?postId=1 để luyện JSON mảng — loop list dict thay vì một object đơn.
Ghi chú thực hành (96)
Thử urllib.parse.urlencode khi query nhiều tham số — tránh lỗi encode ký tự đặc biệt trong URL.
Ghi chú thực hành (97)
Document trong README Ngày 50: ba URL mẫu, output mong đợi, và cách xử lý khi mạng công ty chặn coingecko.com.
Ghi chú thực hành (98)
Ghép Ngày 50 với Ngày 49: lấy giá BTC từ CoinGecko, lưu 252 ngày từ Binance klines, tính Sharpe — pipeline end-to-end demo.
Python 365 ngày · Ngày 50 — Xem Short trên YouTube · Playlist Python 365 Ngày
Python cơ bản HNDL · PyNhiQuaiBot · Python Hedging
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.