Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
NASA API NEO theo ngày: bảng close approach và đơn vị chuẩn

NASA API NEO theo ngày: bảng close approach và đơn vị chuẩn

Chuyên viên Kỹ thuật ProxyVN 04-18-2026 Đang tính... phút đọc

NASA API NEO theo ngày là cách lấy danh sách tiểu hành tinh bay gần Trái Đất trong một khoảng ngày qua endpoint feed của dịch vụ NeoWs trên api.nasa.gov. Bài này viết cho người dựng bảng sự kiện tiếp cận gần, cần giữ đúng mã thiên thể, đúng thời điểm và đúng đơn vị khi số liệu trả về dưới dạng chuỗi. ProxyVN gọi API thật bằng DEMO_KEY ngày 05/11/2026, ghép hai cửa sổ ngày chồng nhau và đếm được 18 encounter trùng.

NASA API NEO theo ngày: mục tiêu và phạm vi không lặp

Phần này chốt bài toán, đầu ra và ranh giới với các bài khác.

Bài toán cần giải

Một nhóm làm nội dung khoa học muốn có bảng các lần tiểu hành tinh bay gần Trái Đất mỗi tuần, kèm khoảng cách và vận tốc. Họ gọi feed mỗi tuần, ghép kết quả. Đến cuối tháng, tổng số sự kiện cao hơn thực tế vì các tuần ghép chồng một ngày. Một số khoảng cách lại bị đổi đơn vị sai.

Đầu ra nghiệm thu

Đầu ra là bảng encounter. Mỗi dòng gồm asteroid ID, tên, ngày tiếp cận, thời điểm đầy đủ, epoch mili giây và thiên thể được tiếp cận. Phần số liệu gồm khoảng cách gốc theo km, AU, LD, dặm, vận tốc gốc theo km/s và km/h, cột số đã chuẩn hóa và cờ nguy hiểm tiềm tàng. Đi kèm là phép kiểm encounter trùng và phép kiểm đơn vị.

Ranh giới với bài tổng hợp NASA API

Bài này không giới thiệu toàn bộ NASA API như APOD hay ảnh Mars Rover. Nó chỉ dùng NeoWs feed và lookup cho một thiên thể. Không nhân bản request GET mẫu của tài liệu. Phần trọng tâm là khóa encounter, ngày truy vấn và đơn vị.

Giới hạn của lab

Lab dùng DEMO_KEY, không đăng ký khóa riêng. Header báo X-RateLimit-Limit là 10 trong lần chạy, nên lab chỉ gọi năm lần. Dữ liệu là tháng 10/2026, gọi ngày 05/11/2026. Quỹ đạo và khoảng cách dự báo có thể được JPL cập nhật khi có quan sát mới.

Ai nên đọc

Người làm nội dung thiên văn phổ thông, giáo viên, nhóm làm dashboard khoa học. Kỹ sư dữ liệu cần dựng bảng sự kiện từ API trả chuỗi số. Người viết script học tập muốn biết cách ghép cửa sổ ngày mà không đếm trùng.

Những gì bài không làm

Bài không giải thích cơ học quỹ đạo, không đánh giá rủi ro va chạm, không thay cho dữ liệu chính thức của JPL. Bài cũng không dùng endpoint browse để tải toàn bộ danh mục. Phạm vi là feed theo ngày và một lời gọi lookup để đối chiếu.

Thuật ngữ dùng trong bài

NEO là thiên thể gần Trái Đất. NeoWs là dịch vụ web của NASA cho dữ liệu NEO. Close approach là một lần tiếp cận gần của một thiên thể với một thiên thể khác, thường là Trái Đất. Encounter trong bài là một close approach cụ thể, xác định bằng asteroid ID và thời điểm tiếp cận. LD là khoảng cách Trái Đất tới Mặt Trăng dùng làm đơn vị.

Vì sao cần bảng riêng thay vì đọc trang web

Trang web của NASA và JPL hiển thị danh sách tiếp cận gần rất đẹp, nhưng không cho ghép nhiều tuần, không giữ lịch sử số liệu và không kiểm trùng. Một bảng riêng từ API cho phép lọc theo khoảng cách, so tuần này với tuần trước và trích dẫn có ngày truy vấn.

Lấy dữ liệu NEO theo khoảng ngày và chuẩn hóa đơn vị khoảng cách/tốc độ với NASA API NEO theo ngày

Phần này đi qua lời gọi đầu và cấu trúc response.

Nguồn tài liệu đã đọc

Cổng NASA Open APIs liệt kê dịch vụ Asteroids NeoWs, cách lấy khóa và DEMO_KEY. Brief của bài dựa trên tệp danh mục API của NASA trên GitHub, phần mô tả NeoWs với tham số start_date và end_date. Lab đối chiếu hai nguồn này với response thật.

Endpoint feed

Lab gọi https://api.nasa.gov/neo/rest/v1/feed với start_date, end_date dạng YYYY-MM-DD và api_key. Response là JSON có links, element_count và near_earth_objects. Near_earth_objects là object, khóa là ngày, giá trị là mảng thiên thể có close approach trong ngày đó.

Lời gọi đầu

Feed từ 2026-10-01 tới 2026-10-07 trả HTTP 200, element_count 34, bảy khóa ngày từ 01 tới 07/10. Header X-RateLimit-Remaining là 9 trên X-RateLimit-Limit 10. Lab đọc hai header này sau mỗi lời gọi để biết còn bao nhiêu lượt.

Ví dụ request bằng Python

import requests, time
s = requests.Session()
s.headers["User-Agent"] = "ProxyVN-docs-lab/1.0 (+https://proxy.vn/)"
B = "https://api.nasa.gov/neo/rest/v1"
 
def get(path, **p):
    p["api_key"] = "DEMO_KEY"
    r = s.get(B + path, params=p, timeout=60)
    time.sleep(3)
    print(r.status_code, r.headers.get("X-RateLimit-Remaining"), "/", r.headers.get("X-RateLimit-Limit"))
    return r
 
a = get("/feed", start_date="2026-10-01", end_date="2026-10-07").json()
print(a["element_count"], sorted(a["near_earth_objects"]))

DEMO_KEY có giới hạn chặt

DEMO_KEY dùng chung cho mọi người không có khóa, nên giới hạn rất thấp. Lần chạy của lab thấy giới hạn 10. Script chạy định kỳ phải đăng ký khóa riêng miễn phí trên api.nasa.gov. Khóa riêng không đưa vào mã nguồn, đọc từ biến môi trường.

Khóa API nằm trong links

Khối links trả next, previous và self dạng http://api.nasa.gov/... kèm api_key=DEMO_KEY trong query. Với khóa riêng, các link này chứa khóa thật. Ghi nguyên response vào log là để lộ khóa. Lab xóa api_key khỏi links trước khi lưu bản JSON dùng chung. Lần xóa đầu chỉ xử lý khối links và vẫn sót, vì thiên thể thuộc danh sách Sentry có thêm trường sentry_data mang khóa trong URL. Cửa sổ đầu có 2 trường như vậy, cửa sổ hai có 1. Lần sau lab xóa theo mẫu api_key trên toàn bộ văn bản JSON.

Detailed bằng false

Các link trong links có thêm tham số detailed bằng false. Lab không truyền tham số này khi gọi, API tự gắn vào link. Lab chưa thử detailed bằng true, nên không biết response khác ra sao. Bảng của bài chỉ dựa trên response mặc định.

Một thiên thể trong feed

Mỗi thiên thể có id, neo_reference_id, name, nasa_jpl_url, absolute_magnitude_h, estimated_diameter, is_potentially_hazardous_asteroid, close_approach_data, is_sentry_object và links. Thiên thể đầu ngày 01/10 có id 2499496, neo_reference_id cũng là 2499496, name là 499496 (2010 MR87).

Đọc NeoWs feed theo start_date/end_date trong catalog với NASA API NEO theo ngày

Cửa sổ ngày là nơi phát sinh trùng lặp và lỗi.

Ngày tương lai và quá khứ

Feed nhận cả khoảng ngày trong quá khứ và tương lai. Lab chỉ chạy tháng 10/2026, đã qua so với ngày gọi. Encounter tương lai là dự báo, số liệu của chúng dễ đổi hơn khi có quan sát mới. Bảng nên có cột cho biết encounter đã qua hay chưa tại thời điểm truy vấn.

Giới hạn bảy ngày

Giới hạn bảy ngày

Giới hạn bảy ngày

Lab gọi feed từ 2026-10-01 tới 2026-10-09, chín ngày. API trả HTTP 400 với error_message là Date Format Exception, Expected format yyyy-mm-dd, The Feed date limit is only 7 Days. Thông điệp nhắc định dạng ngày dù ngày đúng định dạng. Lỗi thật là vượt bảy ngày.

Tính bảy ngày thế nào

Khoảng 01 tới 07/10 có bảy khóa ngày và được chấp nhận. Nghĩa là start và end đều tính, tổng tối đa bảy ngày lịch. Script chia tháng thành các cửa sổ bảy ngày, cửa sổ sau bắt đầu ngay sau ngày cuối của cửa sổ trước.

Link next chồng một ngày

Link next của cửa sổ 01 tới 07/10 là start_date 2026-10-07 tới end_date 2026-10-13. Ngày 07/10 nằm ở cả hai cửa sổ. Đi theo link next để lấy liên tục sẽ đọc ngày 07 hai lần. Link previous là 2026-09-25 tới 2026-10-01, cũng chồng ngày 01.

Thử hai cửa sổ chồng nhau

Lab cố ý gọi thêm cửa sổ 2026-10-05 tới 2026-10-11, chồng ba ngày 05, 06, 07 với cửa sổ đầu. Cửa sổ hai trả 43 dòng close approach. Gộp hai cửa sổ có 77 dòng. Phép kiểm trùng ở phần sau tìm được 18 dòng lặp.

Ngày trong feed theo giờ nào

Khóa ngày của near_earth_objects luôn bằng close_approach_date của các dòng bên dưới. Lab kiểm 77 dòng, số dòng lệch là 0. Close_approach_date_full có dạng 2026-Oct-01 15:58. Lab coi đây là thời gian theo hệ của JPL, và dùng epoch_date_close_approach làm mốc so sánh.

Element_count đếm gì

Element_count 34 của cửa sổ đầu bằng số thiên thể trong mọi khóa ngày cộng lại. Trong cửa sổ đầu, không thiên thể nào xuất hiện ở hai ngày khác nhau. Nếu có, element_count sẽ đếm hai lần cùng một thiên thể. Đừng coi element_count là số thiên thể duy nhất.

Ngày đầu tháng và cuối tháng

Tháng có 31 ngày chia thành bốn cửa sổ bảy ngày và một cửa sổ ba ngày. Cửa sổ cuối ngắn hơn bảy ngày vẫn hợp lệ. Mã chia cửa sổ nên nhận ngày bắt đầu và kết thúc của tháng, sinh các cặp start, end không chồng, kiểm cặp cuối không vượt cuối tháng.

Mã chia cửa sổ

import datetime as dt
def windows(start, end, size=7):
    cur = start
    while cur <= end:
        stop = min(cur + dt.timedelta(days=size - 1), end)
        yield cur.isoformat(), stop.isoformat()
        cur = stop + dt.timedelta(days=1)
print(list(windows(dt.date(2026, 10, 1), dt.date(2026, 10, 31))))

Bảng các ca cửa sổ

Bảng: Bảng các ca cửa sổ

Cửa sổ

Kết quả

01 tới 07/10

200, element_count 34

05 tới 11/10

200, 43 dòng

01 tới 09/10

400, giới hạn 7 ngày

Link next của 01 tới 07

07 tới 13/10, chồng ngày 07

Link previous của 01 tới 07

25/09 tới 01/10, chồng ngày 01

Giữ asteroid ID và từng close approach event trong NASA API NEO theo ngày

Một thiên thể có nhiều lần tiếp cận, bảng phải giữ từng lần.

Close_approach_data trong feed

Từng lần tiếp cận

Từng lần tiếp cận

Trong feed, mỗi thiên thể có mảng close_approach_data chỉ chứa lần tiếp cận thuộc ngày đó. Thiên thể đầu ngày 01/10 có một phần tử: ngày 2026-10-01, đầy đủ 2026-Oct-01 15:58, epoch 1790870280000, khoảng cách 0,1894809637 AU, vận tốc 18,8379123082 km/s, thiên thể Earth.

Nhiều phần tử trong một ngày

Lab chưa gặp thiên thể có hai phần tử close_approach_data trong cùng một khóa ngày. Mã đọc vẫn lặp qua toàn bộ mảng, không lấy phần tử đầu tiên. Nếu một ngày có hai lần tiếp cận với hai thiên thể khác nhau như Trái Đất và Mặt Trăng, cả hai đều thành dòng riêng.

Lookup trả toàn bộ lịch sử

Gọi /neo/3014117 cho một thiên thể trong cửa sổ trả close_approach_data với 57 phần tử, gồm cả quá khứ và tương lai. Orbital_data có orbit_determination_date là 2024-03-15 06:21:25. Feed chỉ cắt đúng phần thuộc ngày truy vấn, lookup trả cả danh sách.

Khóa encounter

Lab dùng cặp id và epoch_date_close_approach làm khóa của một encounter. Chỉ dùng id thì gộp mất các lần tiếp cận khác nhau của cùng thiên thể. Chỉ dùng ngày thì hai thiên thể cùng ngày bị coi là một. Epoch là số nguyên, so sánh chính xác, không lo định dạng chuỗi.

Id và neo_reference_id

Trong mọi dòng lab đọc, id bằng neo_reference_id. Lab giữ cả hai cột. Nếu sau này hai trường khác nhau, mình sẽ thấy ngay thay vì ghi đè một trường bằng trường kia.

Một thiên thể nhiều ngày trong cùng cửa sổ

Trong cửa sổ đầu, không id nào xuất hiện ở hai khóa ngày. Một thiên thể bay rất gần có thể có hai lần tiếp cận cách nhau ít ngày, khi đó nó xuất hiện ở hai ngày với hai epoch khác nhau. Khóa encounter bằng id cộng epoch xử lý đúng ca này mà không cần nhánh riêng.

Tên có thể đổi

Name dạng 499496 (2010 MR87) gồm số hiệu và ký hiệu tạm. Khi thiên thể được đặt tên chính thức, chuỗi này có thể đổi. Bảng dùng id làm khóa, name chỉ để hiển thị.

Orbiting_body

Cả 77 dòng có orbiting_body là Earth. Lookup cho một thiên thể có thể có lần tiếp cận với Mặt Trăng, Sao Hỏa hay Sao Kim. Bảng giữ cột này dù feed hiện chỉ thấy Earth, vì lọc theo Trái Đất nên là một điều kiện viết rõ.

Cờ nguy hiểm tiềm tàng

Sáu trong 77 dòng có is_potentially_hazardous_asteroid là true. Đây là phân loại theo kích thước và quỹ đạo, không có nghĩa sẽ va chạm. Nội dung đưa ra công chúng phải giải thích đúng nghĩa cờ này, không viết thành tin giật gân.

Is_sentry_object

Cờ is_sentry_object cho biết thiên thể nằm trong hệ thống theo dõi nguy cơ va chạm dài hạn của JPL. Các thiên thể này có thêm link sentry_data. Đây cũng là chỗ khóa API lộ ra, như phần trên đã nói.

Đường kính ước lượng

Estimated_diameter cho min và max theo km, m, dặm, feet. Thiên thể đầu có 0,3377 tới 0,7552 km. Khoảng này rộng vì ước lượng từ độ sáng. Bảng giữ cả min và max, không lấy trung bình rồi trình bày như một con số chắc.

Chuẩn hóa đơn vị khoảng cách và tốc độ theo response của NASA API NEO theo ngày

Số liệu trả về là chuỗi, và mỗi đơn vị có hằng số riêng.

Số là chuỗi

Miss_distance và relative_velocity trả các giá trị dạng chuỗi như "28345948.575067319". Lab đổi sang float để tính, nhưng giữ chuỗi gốc trong cột raw. Chuỗi gốc có nhiều chữ số hơn float đôi, và là bằng chứng nếu có tranh cãi về làm tròn.

Bốn đơn vị khoảng cách

Mỗi encounter có khoảng cách theo astronomical, kilometers, lunar, miles. Lab chia km cho các đơn vị kia để tìm hằng số API dùng. Km chia AU ra 149597870 với sai lệch tương đối dưới 1e-8. Dặm chia km ra 0,6213711866. Km chia LD ra 384570,36 ở mọi dòng.

Lệch khi tự đổi LD

Nếu tự đổi LD sang km bằng hằng số 384400 km, sai lệch so với giá trị km của API lên tới 0,044 phần trăm. Với khoảng cách hàng chục triệu km, đó là chênh hàng chục nghìn km. Kết luận: không tự đổi đơn vị, dùng đúng trường đơn vị API đã trả.

Vì sao hằng số lạ

Lab không tìm hiểu vì sao hằng số LD là 384570,36 km. Có thể API dùng một định nghĩa LD khác giá trị trung bình phổ biến. Điều quan trọng với pipeline là đã đo được hằng số đó từ dữ liệu, và biết rằng tự đổi sẽ lệch.

Kiểm vận tốc

Km/s nhân 3600 so với km/h của API cho sai lệch tương đối 2,4e-8. Hai trường nhất quán. Lab vẫn giữ cả hai chuỗi gốc, vì người dùng bảng có thể quen một đơn vị.

Mã chuẩn hóa

rows = []
for day, objs in feed["near_earth_objects"].items():
    for ob in objs:
        for cad in ob["close_approach_data"]:
            md, rv = cad["miss_distance"], cad["relative_velocity"]
            rows.append({"id": ob["id"], "name": ob["name"], "feed_day": day,
                         "close_approach_date": cad["close_approach_date"],
                         "epoch_ms": cad["epoch_date_close_approach"],
                         "orbiting_body": cad["orbiting_body"],
                         "miss_km_raw": md["kilometers"], "miss_au_raw": md["astronomical"],
                         "miss_ld_raw": md["lunar"], "miss_km": float(md["kilometers"]),
                         "v_kms_raw": rv["kilometers_per_second"], "v_kms": float(rv["kilometers_per_second"]),
                         "hazardous": ob["is_potentially_hazardous_asteroid"]})

Kiểm hằng số mỗi lần chạy

Phép chia km cho AU và km/h cho km/s rất rẻ, chạy trên mọi dòng mỗi lần nhận dữ liệu. Nếu một ngày API đổi cách làm tròn hay đổi hằng số, phép kiểm sẽ báo trước khi số sai đi vào báo cáo. Lab chạy lại phép kiểm trên 59 dòng sau khi gộp, 0 dòng lệch ngưỡng.

Bảng hằng số suy ra

Bảng: Bảng hằng số suy ra

Phép chia

Giá trị suy ra từ response

Ghi chú

km / AU

149597870

Sai lệch dưới 1e-8

km / LD

384570,36

Khác 384400 thường dùng

dặm / km

0,6213711866

Ổn định mọi dòng

km/h / km/s

3600

Sai lệch 2,4e-8

Đơn vị chuẩn của bảng

Bảng của lab chọn km cho khoảng cách và km/s cho vận tốc làm cột chuẩn. Lấy thẳng từ trường kilometers và kilometers_per_second, không suy từ đơn vị khác. Cột AU và LD giữ chuỗi gốc để hiển thị khi cần.

Dặm và hệ đo Anh

Cột miles giữ cho người đọc quen hệ đo Anh. Tỉ lệ dặm trên km ổn định ở 0,6213711866 trên mọi dòng. Bảng tiếng Việt thường không cần cột này khi hiển thị, nhưng dữ liệu vẫn giữ để đối chiếu với nguồn tiếng Anh.

Làm tròn khi hiển thị

Khoảng cách 28345948,575 km hiển thị thành 28,3 triệu km là đủ cho người đọc. Làm tròn chỉ ở lớp hiển thị. Bảng dữ liệu giữ giá trị đầy đủ.

Đối soát encounter trùng và lưu ngày truy vấn cùng nguồn JPL trong NASA API NEO theo ngày

Phần này kiểm trùng và ghi xuất xứ cho từng dòng.

Đếm trùng

Encounter trùng

Encounter trùng

Gộp hai cửa sổ được 77 dòng. Gom theo cặp id và epoch_ms, có 18 khóa xuất hiện hai lần. Số encounter duy nhất là 59. Ví dụ khóa 3014117 với epoch 1791348420000 có mặt ở cả hai cửa sổ.

Mã kiểm trùng

from collections import Counter
key = Counter((r["id"], r["epoch_ms"]) for r in rows)
dup = [k for k, v in key.items() if v > 1]
uniq = {}
for r in rows:
    uniq.setdefault((r["id"], r["epoch_ms"]), r)
print(len(rows), len(dup), len(uniq))

Giữ bản nào khi trùng

Hai bản của cùng encounter từ hai lần gọi gần nhau thường giống hệt. Nếu khác, bản lấy sau phản ánh quỹ đạo cập nhật hơn. Lab giữ bản đầu tiên vì hai lời gọi chỉ cách nhau vài giây. Pipeline chạy hằng tuần nên giữ bản mới nhất và ghi chênh lệch.

Ngày truy vấn đi cùng mỗi dòng

Mỗi dòng ghi fetched_at và cửa sổ start, end đã dùng. Khoảng cách dự báo của một encounter tương lai có thể đổi khi JPL tính lại quỹ đạo. Không có ngày truy vấn thì không giải thích được vì sao hai báo cáo khác nhau vài nghìn km.

So bản trùng

Lab so 18 cặp trùng, mọi trường khoảng cách và vận tốc giống hệt giữa hai cửa sổ. Hai lời gọi chỉ cách nhau vài giây nên đây là kết quả dự kiến. Phép so này vẫn nên chạy, vì nó sẽ báo khi JPL cập nhật quỹ đạo giữa hai lần gọi.

Dẫn nguồn JPL

Mỗi thiên thể có nasa_jpl_url trỏ tới công cụ tra cứu SBDB của JPL, ví dụ ssd.jpl.nasa.gov/tools/sbdb_lookup.html với sstr là id. Dữ liệu NeoWs đến từ JPL. Bảng giữ link này để người đọc kiểm tại nguồn.

Giữ JSON gốc đã xóa khóa

Lab giữ feed_a_noKey.json và feed_b_noKey.json làm bản lưu. Bản có khóa chỉ để trên máy chạy, không chia sẻ. Khi cần thêm trường như đường kính hay độ sáng, đọc lại từ bản lưu thay vì gọi lại API.

Orbit_determination_date

Lookup cho biết lần xác định quỹ đạo gần nhất của thiên thể 3014117 là 15/03/2024. Với encounter quan trọng, lưu trường này để biết số liệu dựa trên quỹ đạo tính lúc nào.

Lọc theo khoảng cách

Nội dung phổ thông thường chỉ nói về thiên thể bay gần hơn một ngưỡng, ví dụ vài LD. Lọc nên làm trên cột km, ngưỡng ghi rõ trong báo cáo. Khi đổi ngưỡng sang LD, dùng chuỗi lunar của API, không chia km cho 384400.

Bảng đối soát

Bảng: Bảng đối soát

Kiểm

Kết quả

Dòng gộp hai cửa sổ

77

Khóa trùng

18

Encounter duy nhất

59

Thiên thể lặp trong một cửa sổ

0

feed_day khác ngày tiếp cận

0

orbiting_body khác Earth

0

Đầu ra nghiệm thu: Bảng object ID close approach date đơn vị gốc/chuẩn và kiểm duplicate encounter của NASA API NEO theo ngày

Phần này liệt kê điều kiện để coi bảng là xong.

Tệp encounters.csv

Mỗi encounter duy nhất một dòng, sắp theo epoch. Có id, neo_reference_id, name, close_approach_date, full, epoch_ms, orbiting_body, các cột raw theo bốn đơn vị khoảng cách và hai đơn vị vận tốc, cột km và km/s dạng số, cờ hazardous và sentry. Lab ghi 59 dòng.

Kiểm khóa

Không có hai dòng cùng cặp id và epoch_ms. Lab kiểm sau khi gộp, đạt.

Kiểm đơn vị

Km chia AU nằm trong sai lệch 1e-8 quanh 149597870. Km/h chia km/s bằng 3600 trong sai lệch 1e-7. Dòng nào lệch ngoài ngưỡng thì gắn cờ. Lab không có dòng lệch.

Kiểm xuất xứ

Mỗi dòng có fetched_at, cửa sổ truy vấn và nasa_jpl_url. Khóa API không xuất hiện trong bất kỳ trường nào của tệp.

Kiểm khóa API trong tệp

Lab tìm chuỗi api_key và DEMO_KEY trong encounters.csv và hai tệp JSON đã xóa khóa. Kết quả 0 lần xuất hiện. Phép kiểm này nên chạy trước mỗi lần chia sẻ tệp ra ngoài.

Bảng nghiệm thu của lab

Nghiệm thu bảng NEO

Nghiệm thu bảng NEO

Bảng: Bảng nghiệm thu của lab

Hạng mục

Kết quả 05/11/2026

DEMO_KEY limit thấy được

10

Cửa sổ 9 ngày

400

Link next

Chồng 1 ngày

Dòng gộp / trùng / duy nhất

77 / 18 / 59

Hằng số LD suy ra

384570,36 km

Lookup 3014117

57 close approach

Những gì lab chưa chạy

Lab chưa dùng khóa riêng, chưa thử endpoint browse, chưa thử tham số detailed, chưa so với API close approach của JPL. Lab cũng chưa quan sát một encounter đổi số liệu giữa hai lần chạy cách nhau nhiều ngày.

Vận hành NASA API NEO theo ngày trong pipeline hằng tuần

Pipeline hằng tuần cần chia cửa sổ đúng và giữ khóa an toàn.

Lịch chạy

Chạy mỗi tuần một lần vào cùng ngày, lấy cửa sổ bảy ngày sắp tới hoặc vừa qua tùy mục đích. Bảng dự báo lấy tuần sắp tới, bảng tổng kết lấy tuần vừa qua. Hai loại bảng nên tách riêng, vì số liệu dự báo sẽ được cập nhật còn số liệu tổng kết thì ổn định hơn.

Chia cửa sổ không chồng

Mỗi tuần gọi một cửa sổ bảy ngày, start là ngày sau end của tuần trước. Không đi theo link next của API vì nó chồng một ngày. Dù vậy, vẫn chạy phép kiểm trùng, phòng khi có người chạy lại một tuần bằng tay.

Khóa riêng và biến môi trường

Đăng ký khóa miễn phí, lưu trong biến môi trường hoặc kho bí mật. Mã đọc khóa từ đó. Log và JSON lưu lại phải xóa api_key khỏi links. Lab đã làm vậy với DEMO_KEY để luyện thói quen.

Tôn trọng giới hạn

Đọc X-RateLimit-Remaining sau mỗi lời gọi. Còn ít thì dừng và chạy tiếp sau. Pipeline hằng tuần chỉ cần một tới vài lời gọi, không có lý do chạm giới hạn của khóa riêng.

Ghi tuần vào bảng lịch sử

Mỗi tuần sinh một tệp encounter riêng và một bản gộp. Bản gộp áp quy tắc giữ bản mới nhất cho mỗi khóa. Các tệp tuần giữ nguyên để tra lại số liệu đã công bố ở thời điểm đó.

Xử lý lỗi

400 với thông điệp giới hạn bảy ngày là lỗi chia cửa sổ, sửa mã. 403 thường là khóa sai hoặc hết hạn. 429 là quá giới hạn, chờ rồi gọi lại. 5xx thử lại có giãn cách.

Proxy ở tầng mạng

API NASA công khai, gọi thẳng là cách nên dùng. Giới hạn tính theo khóa và địa chỉ, nên đổi IP để vượt giới hạn là sai cách và vi phạm điều khoản. Cách đặt nhịp gọi khi đi qua proxy có ở bài rate limit API khi dùng proxy. Cách ghi chuỗi proxy có ở bài định dạng proxy, vai trò proxy trong thu thập có ở bài Web Scraping proxy là gì. Khi cần IP Việt Nam cho tác vụ khác, anh em có thể mua proxy tại trang chủ ProxyVN.

Báo cáo tuần cho người đọc

Báo cáo tuần chỉ cần vài cột: tên, ngày, khoảng cách theo triệu km và LD, vận tốc km/s, cờ hazardous kèm chú thích nghĩa. Bảng dữ liệu đầy đủ nằm phía sau. Người viết nội dung đọc báo cáo, kỹ sư đọc bảng khi cần kiểm.

Khóa phiên bản

Lab chạy Python 3.12.10, requests 2.34.2. Đường dẫn rest/v1 cho thấy phiên bản API. Ghi base URL vào cấu hình và giữ JSON mẫu làm test.

Khóa encounter là cặp asteroid ID và epoch, đơn vị lấy thẳng từ trường API trả, cửa sổ ngày không chồng nhau. Ba điều đó giữ bảng không trùng và không lệch số.

NASA API NEO theo ngày: câu hỏi thường gặp

Các câu dưới đây gom những điểm hay bị hỏi.

Lấy một tháng trong một lời gọi được không?

Không. Feed giới hạn bảy ngày. Chia tháng thành các cửa sổ bảy ngày không chồng.

Có nên đi theo link next?

Không cho pipeline. Link next bắt đầu lại ở ngày cuối của cửa sổ hiện tại, gây trùng một ngày.

Vì sao tự đổi LD ra km bị lệch?

API dùng hằng số khoảng 384570 km cho mỗi LD, không phải 384400. Dùng trường kilometers có sẵn.

Element_count có phải số thiên thể duy nhất?

Không chắc. Nó đếm số mục trong mọi ngày cộng lại. Thiên thể có mặt ở hai ngày sẽ bị đếm hai lần.

DEMO_KEY có dùng lâu dài được không?

Không nên. Giới hạn thấp và dùng chung. Đăng ký khóa riêng miễn phí.

Cờ hazardous có nghĩa sắp va chạm?

Không. Đó là phân loại theo kích thước và quỹ đạo. Không diễn giải thành nguy cơ va chạm.

Khoảng cách trong feed có đổi theo thời gian không?

Có thể đổi khi JPL tính lại quỹ đạo, nhất là với encounter tương lai. Ghi ngày truy vấn cùng mỗi dòng.

Có cần lookup cho mọi thiên thể không?

Không. Feed đủ cho bảng tuần. Lookup chỉ cần khi muốn xem toàn bộ lịch sử tiếp cận hay ngày xác định quỹ đạo của một thiên thể cụ thể.

Có cần lưu cả miles?

Không bắt buộc. Lab giữ để đối chiếu với nguồn tiếng Anh. Bảng hiển thị cho người đọc Việt Nam thường chỉ cần km và LD.

Có nên gọi feed song song cho nhiều tuần?

Không cần. Mỗi tuần một lời gọi, gọi tuần tự với vài giây nghỉ. Song song chỉ làm chạm giới hạn nhanh hơn.

NASA API NEO theo ngày và những điều cần nhớ

NASA API NEO theo ngày cho bảng close approach đáng tin khi chia cửa sổ bảy ngày không chồng, khóa encounter bằng asteroid ID cộng epoch, giữ chuỗi số gốc và lấy đơn vị thẳng từ trường API trả. Kiểm trùng sau mỗi lần gộp, ghi ngày truy vấn cùng link JPL, và xóa khóa API khỏi mọi link trước khi lưu. Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam khuyên anh em chạy phép kiểm trùng mỗi lần ghép dữ liệu NASA API NEO theo ngày.

TIN TỨC LIÊN QUAN