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!
USGS earthquake GeoJSON: theo dõi event cập nhật theo ID

USGS earthquake GeoJSON: theo dõi event cập nhật theo ID

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

USGS earthquake GeoJSON là định dạng mà dịch vụ FDSN Event của USGS trả về khi truy vấn danh mục động đất. Mỗi trận là một Feature có ID, thời điểm, thời điểm cập nhật, độ lớn và tọa độ ba chiều. Bài này viết cho người theo dõi động đất trong một vùng theo thời gian, cần biết khi nào một trận đã có trong bảng chỉ được sửa số liệu chứ không phải trận mới. ProxyVN gọi API thật ngày 05/11/2026 cho vùng Đông Nam Á, nạp lại cùng truy vấn sau 2,4 giờ và bắt được một trận đổi độ lớn, đổi vị trí.

USGS earthquake GeoJSON: 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 gần chủ đề.

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

Một nhóm làm bản tin muốn mỗi ngày có danh sách động đất từ 4,5 độ trở lên ở Đông Nam Á. Script cũ tải lại danh sách mỗi ngày và cộng dồn vào bảng. Sau một tháng, bảng có nhiều dòng trùng của cùng trận, mỗi dòng mang một độ lớn hơi khác. Bản tin báo số trận cao hơn thực tế.

Đầu ra nghiệm thu

Đầu ra là bảng event, mỗi dòng gồm event ID, danh sách ID phụ, thời điểm, thời điểm cập nhật, kinh độ, vĩ độ, độ sâu, độ lớn, loại độ lớn, trạng thái và địa danh. Đi kèm là bảng phiên bản: mỗi lần một event đổi updated, ghi một dòng với giá trị cũ và mới của các trường đã đổi.

Ranh giới với bài Overpass

Bài Overpass API bằng Python truy vấn đối tượng bản đồ OpenStreetMap và xuất GeoJSON. Cả hai bài đều có GeoJSON, nhưng đối tượng OSM là hình học tĩnh còn event động đất có vòng đời: được tạo, được hiệu chỉnh, có thể bị xóa. Bài này tập trung vào vòng đời đó, không vẽ bản đồ.

Giới hạn của lab

Lab gọi API thật không cần khóa. Vùng chọn là hình chữ nhật vĩ độ từ âm 11 tới 29, kinh độ từ 92 tới 141, độ lớn từ 4,5, ba mươi ngày trước thời điểm gọi. Lab nạp lại đúng URL đó sau 2,4 giờ. Một lời gọi thử quá nặng trả 503, phần sau ghi rõ. Kết quả là số liệu của ngày gọi.

Ai nên đọc

Người làm bản tin, nhóm quản lý rủi ro, nhà nghiên cứu cần danh mục động đất cập nhật. Kỹ sư dữ liệu dựng pipeline cảnh báo. Người viết script học tập muốn hiểu vì sao danh mục động đất không phải danh sách bất biến.

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

Bài không giải thích địa chấn học, không đánh giá nguy cơ, không dùng các sản phẩm như ShakeMap hay PAGER để ra quyết định. Bài cũng không thay cho kênh cảnh báo chính thức. Phạm vi là truy vấn, đọc và giữ phiên bản event.

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

Event là một trận động đất trong danh mục. Event ID chính là ID được ưu tiên, ví dụ us7000tvwj. ID phụ là ID của cùng trận do mạng lưới khác báo. Updated là thời điểm event được sửa gần nhất, tính bằng mili giây epoch. Magnitude type là loại thang độ lớn như mb hay mww.

Danh mục sống khác danh sách tĩnh

Nhiều người coi danh mục động đất như một bảng ghi sự kiện đã xong. Thực tế mỗi trận đi qua nhiều lần tính: bản tự động ban đầu, bản đã được người phân tích xem, bản hiệu chỉnh khi có thêm số liệu trạm. Pipeline nào bỏ qua vòng đời này sẽ hoặc đếm trùng, hoặc giữ số liệu cũ.

Lọc earthquake bằng bounds/time và theo dõi event cập nhật với USGS earthquake GeoJSON

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

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

Tài liệu API của Earthquake Catalog mô tả các phương thức query, count, version và các tham số starttime, endtime, minlatitude, maxlatitude, minlongitude, maxlongitude, minmagnitude, updatedafter, eventid, orderby, format. Trang mô tả định dạng GeoJSON của USGS giải thích từng thuộc tính.

Đếm trước khi lấy

Lab gọi phương thức count với cùng tham số trước. API trả JSON count 106 và maxAllowed 20000. Count rẻ hơn query nhiều. Nếu count vượt maxAllowed, phải chia nhỏ khoảng thời gian hoặc vùng trước khi lấy.

Lời gọi query

Query với format geojson và orderby time trả HTTP 200, 75288 byte, 106 feature. Khối metadata có generated, url, title, status, api 2.8.4 và count 106. Khối bbox cho biết phạm vi thật của các trận, từ kinh độ 93,15 tới 140,00, độ sâu từ 10 tới 591 km.

Ví dụ request bằng Python

import requests, time, datetime as dt
s = requests.Session()
s.headers["User-Agent"] = "ProxyVN-docs-lab/1.0 (+https://proxy.vn/)"
B = "https://earthquake.usgs.gov/fdsnws/event/1/"
now = dt.datetime.now(dt.timezone.utc).replace(microsecond=0)
W = dict(starttime=(now - dt.timedelta(days=30)).strftime("%Y-%m-%dT%H:%M:%S"),
         endtime=now.strftime("%Y-%m-%dT%H:%M:%S"),
         minlatitude=-11, maxlatitude=29, minlongitude=92, maxlongitude=141, minmagnitude=4.5)
print(s.get(B + "count", params=dict(format="geojson", **W), timeout=60).json())
time.sleep(2)
A = s.get(B + "query", params=dict(format="geojson", orderby="time", **W), timeout=60).json()
print(A["metadata"]["count"], A["features"][0]["id"])

Lưu URL truy vấn

Metadata.url chứa URL đầy đủ đã chạy, gồm cả starttime và endtime cụ thể. Lab dùng chính URL này để nạp lại sau 2,4 giờ. Nhờ vậy lần nạp thứ hai hỏi đúng cùng khoảng, không trôi theo đồng hồ.

Thời gian theo UTC

Starttime và endtime hiểu theo UTC. Lab tạo chuỗi từ đồng hồ UTC. Ngày theo giờ Việt Nam sớm hơn 7 giờ. Một trận lúc 3 giờ sáng ngày 05/11 giờ Việt Nam nằm trong ngày 04/11 UTC. Bảng lưu UTC, chỉ đổi khi hiển thị.

Format khác geojson

API còn trả quakeml, csv, text, kml. Lab dùng geojson vì có cấu trúc rõ cho id, ids và updated. Csv tiện cho bảng tính nhưng không giữ được cấu trúc lồng như products. Khi cần cả hai, lấy geojson rồi tự xuất csv.

Giới hạn mỗi lời gọi

Count trả maxAllowed 20000. Đây là số trận tối đa một lời gọi query trả. Có tham số limit và offset để phân trang, lab chưa dùng vì 106 trận nằm trong một trang. Với khoảng lớn, chia theo thời gian dễ kiểm hơn phân trang.

Không cần khóa nhưng phải nhẹ tay

API của USGS không cần khóa. Lab đặt User-Agent tên client chung kèm website và nghỉ 2 giây giữa các lời gọi. Lời gọi thử quá nặng ở phần sau cho thấy vì sao phải đếm trước.

Đặt time window và vùng truy vấn earthquake catalog trong USGS earthquake GeoJSON

Cửa sổ và vùng quyết định số trận và cả tải lên máy chủ.

Hình chữ nhật theo vĩ độ, kinh độ

Vùng truy vấn hình chữ nhật

Vùng truy vấn hình chữ nhật

Lab dùng minlatitude, maxlatitude, minlongitude, maxlongitude để giới hạn vùng Đông Nam Á mở rộng. Hình chữ nhật đơn giản, dễ kiểm. API còn hỗ trợ vòng tròn quanh một điểm với latitude, longitude và maxradiuskm. Lab không chạy cách đó.

Vùng rộng hơn lãnh thổ

Hình chữ nhật của lab gồm cả Philippines, Indonesia, Papua New Guinea. Phần lớn trận trong 106 trận nằm ở các vùng đó, không phải Việt Nam. Nếu bản tin chỉ quan tâm trong và gần Việt Nam, lọc thêm bằng đa giác ở phía mình sau khi lấy về.

Cửa sổ ba mươi ngày

Ba mươi ngày cho vùng này ở mức 4,5 trở lên ra 106 trận, nằm xa giới hạn 20000. Nếu hạ ngưỡng xuống 2,5 hay mở rộng vùng, số trận có thể tăng rất nhanh. Luôn gọi count với tham số mới trước khi gọi query.

Lời gọi quá nặng

Lab thử một truy vấn toàn cầu từ năm 2000 tới nay với độ lớn từ 2, không đếm trước. API trả HTTP 503 với thông điệp lỗi cơ sở dữ liệu báo bảng tạm đã đầy. Đây là lỗi của mình khi gửi truy vấn quá lớn. Lab không gửi lại. Bài học là đếm trước và chia nhỏ.

Ngưỡng độ lớn và biên

Minmagnitude 4,5 loại các trận dưới 4,5. Một trận đang ở 4,6 có thể được hiệu chỉnh xuống 4,4 và biến khỏi kết quả, dù trận vẫn còn trong danh mục. Pipeline nên truy vấn với ngưỡng thấp hơn ngưỡng báo cáo, ví dụ 4,0, rồi lọc 4,5 ở phía mình.

Orderby

Orderby time trả trận mới nhất trước. Orderby time-asc trả theo thứ tự ngược lại. Lab dùng time vì bản tin thường đọc từ mới tới cũ. Với so sánh giữa hai lần nạp, thứ tự không quan trọng vì lab so theo ID.

Đa giác lọc thêm phía mình

Sau khi lấy hình chữ nhật, có thể lọc bằng đa giác ranh giới quốc gia hay vùng biển bằng thư viện hình học. Bước này chạy offline trên dữ liệu đã có, không gọi thêm API. Lưu cả bảng trước và sau lọc để biết trận nào bị loại vì nằm ngoài đa giác.

Bảng tham số đã dùng

Bảng: Bảng tham số đã dùng

Tham số

Giá trị lab

Ghi chú

starttime, endtime

30 ngày tới thời điểm gọi

Theo UTC

minlatitude, maxlatitude

-11, 29

Hình chữ nhật

minlongitude, maxlongitude

92, 141

Rộng hơn Việt Nam

minmagnitude

4.5

Nên truy vấn thấp hơn ngưỡng báo cáo

orderby

time

Mới nhất trước

format

geojson

Mỗi trận một Feature

Đọc event ID, geometry, magnitude và updated trong USGS earthquake GeoJSON

Phần này đọc từng trường quan trọng của một Feature.

Cấu trúc tổng thể

Response là FeatureCollection với bốn khóa: type, metadata, features, bbox. Mỗi Feature có type, properties, geometry và id. Properties có hơn hai mươi trường, gồm mag, place, time, updated, tz, url, detail, felt, cdi, mmi, alert, status, tsunami, sig, net, code, ids, sources, types, nst, dmin, rms, gap, magType, type, title.

Feature mẫu

Đọc một Feature

Đọc một Feature

Feature đầu có id us7000tvwj, mag 5, magType mb, place là 207 km ESE of Sarangani, Philippines, time 1793778012288, updated 1793779221040, status reviewed, tsunami 0, net us, code 7000tvwj. Geometry là Point với tọa độ 127.0325, 4.3895, 49.074.

Thứ tự tọa độ

Tọa độ theo thứ tự kinh độ, vĩ độ, độ sâu tính bằng km. Đảo kinh độ và vĩ độ là lỗi phổ biến khi đưa vào thư viện bản đồ hay cơ sở dữ liệu. Độ sâu dương nghĩa là dưới mặt đất. Bảng tách thành ba cột lon, lat, depth_km để không nhầm.

Ids và sources dạng chuỗi bao dấu phẩy

Trường ids có dạng ",us7000tvwj," và sources dạng ",us,". Dấu phẩy ở hai đầu giúp tìm kiếm chuỗi con an toàn. Khi tách, bỏ dấu phẩy đầu cuối rồi tách theo dấu phẩy. Ba trên 106 trận có nhiều hơn một ID.

Types liệt kê sản phẩm

Types của trận mẫu là ",origin,phase-data,". Trận lớn có nhiều sản phẩm hơn như shakemap, losspager, moment-tensor, dyfi. Lab không dùng sản phẩm, nhưng giữ types để biết trận nào có thêm thông tin.

Status

Cả 106 trận có status reviewed. Trận mới có thể ở trạng thái automatic trước khi được người phân tích xem. Bảng giữ status, vì một trận automatic có xác suất bị sửa cao hơn.

Loại độ lớn

94 trận dùng mb, 12 trận dùng mww. Hai thang khác nhau, mww thường dùng cho trận lớn hơn. So độ lớn giữa hai trận khác loại phải cẩn thận. Bảng giữ magType cạnh mag.

Felt, cdi, mmi, alert

Các trường này đến từ báo cáo cảm nhận của người dân và các sản phẩm đánh giá tác động. Với nhiều trận ngoài khơi, chúng là null. Bảng giữ chúng như cột tùy chọn, không dùng để lọc mặc định, vì null không có nghĩa là không ai cảm nhận được.

Time và updated

Time là thời điểm xảy ra, updated là lần sửa gần nhất. Với 106 trận, hiệu updated trừ time nhỏ nhất là 0,24 giờ, lớn nhất là 601,1 giờ, tức hơn 25 ngày. Một trận có thể được sửa nhiều tuần sau khi xảy ra.

Place là chuỗi mô tả

Place như 207 km ESE of Sarangani, Philippines là chuỗi mô tả do USGS tạo, dựa trên địa danh gần nhất. Chuỗi này có thể đổi khi vị trí được hiệu chỉnh. Không dùng place làm khóa hay để lọc quốc gia. Dùng tọa độ.

Tz là null

Trường tz của trận mẫu là null. Đừng dựa vào trường này để đổi múi giờ. Time là UTC dạng epoch mili giây, đổi sang giờ địa phương bằng thư viện múi giờ ở phía mình.

Mã đọc bảng event

rows = [dict(event_id=f["id"], ids=f["properties"]["ids"],
             time_ms=f["properties"]["time"], updated_ms=f["properties"]["updated"],
             lon=f["geometry"]["coordinates"][0], lat=f["geometry"]["coordinates"][1],
             depth_km=f["geometry"]["coordinates"][2], mag=f["properties"]["mag"],
             magType=f["properties"]["magType"], status=f["properties"]["status"],
             place=f["properties"]["place"]) for f in A["features"]]

Nạp lại cùng khoảng thời gian để phát hiện event cập nhật với USGS earthquake GeoJSON

Cập nhật là chuyện bình thường, và lab bắt được một ca thật.

Hai lần nạp cách 2,4 giờ

Hai lần nạp cách 2,4 giờ

Hai lần nạp cách 2,4 giờ

Lần nạp đầu có generated 1793869558000, lần nạp hai có generated 1793878187000, cách nhau 8629 giây. Cả hai có count 106. Không có ID nào chỉ có ở một lần. Một trận đổi updated.

Trận được sửa

Trận us6000u1q2 có updated đổi từ 1791786797040 sang 1793877902040, tức được sửa sau khoảng 24 ngày kể từ lần sửa trước. Độ lớn đổi từ 4,6 xuống 4,5. Sig đổi từ 326 xuống 312. Tọa độ đổi từ 112,2189; âm 8,3245; 121,104 km sang 112,244; âm 8,237; 124,411 km.

Vì sao vị trí đổi

Lab không biết chi tiết lần tính lại của trận này. Thường thì người phân tích nhận thêm thời gian đến sóng từ các trạm xa, tính lại tâm chấn và độ sâu, đồng thời độ lớn cũng được tính lại từ biên độ mới. Bảng chỉ cần ghi đúng điều đã đổi và thời điểm phát hiện.

Trận đang ở biên ngưỡng

Sau khi sửa, trận us6000u1q2 có độ lớn 4,5, đúng bằng ngưỡng minmagnitude. Nếu lần sửa sau hạ xuống 4,4, trận sẽ biến khỏi kết quả truy vấn. Pipeline so sánh hai lần nạp sẽ thấy ID biến mất và có thể hiểu nhầm là trận bị xóa. Đây là lý do truy vấn nên có biên dưới thấp hơn.

Thay đổi nhỏ nhưng có nghĩa

Độ lớn giảm 0,1 nghe nhỏ, nhưng vị trí dời khoảng 10 km về phía bắc và sâu thêm 3,3 km. Với bản tin, đó là khác biệt đáng sửa. Với phân tích thống kê, một lần sửa ở biên ngưỡng có thể đổi số trận trong nhóm từ 4,5 trở lên.

Tham số updatedafter

Lab gọi query với updatedafter là ba ngày trước, cùng các tham số khác. Kết quả có 16 trận, trong đó 13 trận xảy ra trước mốc ba ngày. Nghĩa là trong ba ngày qua, 13 trận cũ đã được sửa. Updatedafter là cách rẻ để chỉ lấy phần thay đổi.

Mã so hai lần nạp

a = {f["id"]: f for f in A["features"]}
b = {f["id"]: f for f in B["features"]}
changed = []
for k in a.keys() & b.keys():
    pa, pb = a[k]["properties"], b[k]["properties"]
    if pa["updated"] != pb["updated"]:
        diff = {f: (pa[f], pb[f]) for f in ["mag", "magType", "status", "ids", "sig"] if pa[f] != pb[f]}
        if a[k]["geometry"] != b[k]["geometry"]:
            diff["geometry"] = (a[k]["geometry"]["coordinates"], b[k]["geometry"]["coordinates"])
        changed.append((k, pa["updated"], pb["updated"], diff))
only_a = sorted(a.keys() - b.keys()); only_b = sorted(b.keys() - a.keys())

Ghi bảng phiên bản

Lab ghi versions.csv với một dòng cho us6000u1q2, gồm updated cũ và mới, mag, sig, tọa độ cũ và mới, thời điểm phát hiện là generated của lần nạp hai. Dòng này là bằng chứng cho bất kỳ ai hỏi vì sao độ lớn trong bản tin hôm sau khác hôm trước.

Updated là điều kiện đủ để so

Lab chỉ so chi tiết khi updated đổi. Nếu updated không đổi mà một trường khác đổi, đó là điều bất thường đáng ghi. Trong lab, ngoài us6000u1q2, không trận nào đổi updated, và không trận nào có trường khác đổi khi updated giữ nguyên.

Giữ phiên bản event thay vì đếm bản cập nhật như sự kiện mới trong USGS earthquake GeoJSON

Phần này nói cách lưu để không đếm trùng.

Một trận một dòng trong bảng chính

Bảng chính có khóa là event ID chính. Khi một trận đổi số liệu, dòng của nó được cập nhật thành giá trị mới. Bảng chính luôn có 106 dòng cho 106 trận, dù có bao nhiêu lần sửa.

Bảng phiên bản lưu lịch sử

Mỗi lần một trận đổi updated, ghi một dòng vào bảng phiên bản: event ID, updated cũ, updated mới, các trường đổi với giá trị cũ và mới, thời điểm phát hiện. Trận us6000u1q2 có một dòng phiên bản với mag, sig và geometry.

ID phụ trỏ về ID chính

Lab gọi query với eventid là usauto7000ttw3, một ID phụ. API trả Feature có id là us7000ttw3, ids là ",us7000ttw3,usauto7000ttw3,". ID phụ được phân giải về ID chính. Bảng phải có bảng ánh xạ ID phụ sang ID chính để không tạo dòng mới khi nguồn khác báo ID phụ.

Kiểm ID phụ không trỏ hai trận

Lab dựng ánh xạ từ mọi ID trong ids của 106 trận. Không có ID phụ nào xuất hiện ở hai trận khác nhau. Nếu có, đó là dấu hiệu hai trận đã được gộp hoặc tách, cần xem chi tiết.

Sản phẩm của trận nhiều nguồn

Detail của us7000ttw3 có products gồm dyfi, internal-moment-tensor, losspager, moment-tensor hai bản, origin, phase-data, shakemap. Origin có một bản từ nguồn us với magnitude 5,8 và preferredWeight 158. Khi có nhiều origin từ nhiều nguồn, trọng số này quyết định bản nào được ưu tiên.

Detail của một trận

Mỗi Feature có trường detail là URL tới bản chi tiết của trận đó. Bản chi tiết của us7000ttw3 nặng 45367 byte so với vài trăm byte của Feature trong danh sách. Chỉ gọi detail khi cần sản phẩm, không gọi cho mọi trận trong mỗi lần nạp.

ID chính có thể đổi

Khi một nguồn có trọng số cao hơn gửi origin, ID chính có thể đổi sang ID của nguồn đó. Lab không quan sát ca này trong 2,4 giờ. Pipeline nên tra bảng ánh xạ khi một ID chính cũ biến mất, xem nó có trở thành ID phụ của một trận khác không.

ID không tồn tại

Gọi eventid là một chuỗi bịa trả HTTP 404, Content-Type text/plain, nội dung Error 404 Not Found kèm hướng dẫn. Lỗi không phải JSON. Mã đọc phải kiểm mã trạng thái trước khi gọi json.

Trận bị xóa

Theo tài liệu, trận bị xóa không xuất hiện trong query thường, có tham số includedeleted để lấy cả trận đã xóa. Lab chưa chạy. Khi một ID biến mất, chạy lại với tham số này để biết trận bị xóa hay chỉ rơi khỏi ngưỡng.

Bảng các ca

Bảng: Bảng các ca

Ca

Quan sát

Hai lần nạp cách 2,4 giờ

106 và 106, 1 trận đổi updated

us6000u1q2

mag 4,6 thành 4,5, dời vị trí, sâu thêm 3,3 km

updatedafter 3 ngày

16 trận, 13 trận xảy ra trước mốc

ID phụ usauto7000ttw3

Trả về us7000ttw3

ID phụ trỏ hai trận

0

ID bịa

404 text/plain

Truy vấn quá lớn

503

Đầu ra nghiệm thu: Bảng event ID updated geometry magnitude và đối soát bản cập nhật cùng sự kiện của USGS earthquake GeoJSON

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

Tệp events.csv

Mỗi trận một dòng với event_id, ids, time_ms, updated_ms, lon, lat, depth_km, mag, magType, status, place. Lab ghi events_snap1.csv với 106 dòng từ lần nạp đầu.

Tệp phiên bản

Mỗi lần sửa một dòng. Lab có một dòng cho us6000u1q2 giữa hai lần nạp.

Kiểm khóa

Không có hai dòng cùng event_id trong bảng chính. Không ID phụ nào trỏ hai trận. Mỗi lần nạp, số trận chỉ có ở một lần được ghi riêng và tra lại trước khi kết luận xóa.

Kiểm cập nhật

Mọi trận đổi updated đều có dòng phiên bản. Không trận nào được thêm mới chỉ vì updated đổi.

Kiểm thứ tự tọa độ

Mọi lon nằm trong khoảng 92 tới 141, mọi lat trong khoảng âm 11 tới 29, khớp vùng truy vấn. Nếu đảo hai giá trị, phép kiểm này sẽ báo ngay vì vĩ độ không thể lớn hơn 90. Lab chạy kiểm trên 106 dòng, không dòng nào nằm ngoài.

Bảng nghiệm thu của lab

Nghiệm thu bảng event

Nghiệm thu bảng event

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

Hạng mục

Kết quả 05/11/2026

count trước query

106, maxAllowed 20000

Feature trả về

106, api 2.8.4

Trận nhiều ID

3

Trận đổi giữa hai lần nạp

1

Trận mới bị đếm do cập nhật

0

updatedafter 3 ngày

16 trận

Truy vấn quá lớn

503, không gửi lại

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

Lab chưa thử includedeleted để thấy trận bị xóa, chưa thử includesuperseded, chưa thử vòng tròn theo bán kính, chưa thử feed tóm tắt cập nhật mỗi phút. Lab cũng chưa quan sát ID chính đổi sang nguồn khác.

Vận hành USGS earthquake GeoJSON trong pipeline theo dõi

Pipeline theo dõi cần lấy phần thay đổi một cách rẻ và an toàn.

Lấy đầu kỳ, rồi chỉ lấy phần đổi

Lần đầu, lấy toàn bộ cửa sổ bằng query, sau khi count. Các lần sau, gọi query với updatedafter là thời điểm lần chạy trước, cùng vùng và ngưỡng. Mỗi Feature trả về hoặc là trận mới, hoặc là trận đã có được sửa.

Phân loại khi nhận

Feature có ID chính chưa có trong bảng và không nằm trong bảng ánh xạ ID phụ là trận mới. Feature có ID đã có là bản sửa, so updated và ghi phiên bản. Feature có ID phụ đã biết trỏ về một trận cũ là bản sửa của trận cũ.

Ghi log mỗi lần nạp

Mỗi lần nạp ghi generated, count, URL, số trận mới, số trận sửa, số trận biến mất. Khi bản tin có con số lạ, log cho biết lần nạp nào gây ra. Log của lab có hai dòng cho hai lần nạp, với 0 trận mới, 1 trận sửa, 0 trận biến mất ở lần hai.

Lịch chạy

Bản tin hằng ngày chạy một lần mỗi sáng với updatedafter là sáng hôm trước. Hệ cảnh báo cần nhanh hơn thì dùng feed tóm tắt của USGS thay vì gọi query liên tục. Không gọi query mỗi vài giây.

Cửa sổ trượt và cửa sổ cố định

Bản tin dùng cửa sổ trượt ba mươi ngày gần nhất. Phân tích dùng cửa sổ cố định theo tháng. Hai loại bảng nên tách. Bảng cố định vẫn phải nhận bản sửa của các trận trong tháng đó, nên vẫn chạy updatedafter cho cả tháng cũ một thời gian.

Xử lý lỗi

503 với truy vấn lớn là tín hiệu chia nhỏ. 400 là tham số sai. 404 với eventid là ID không tồn tại hoặc đã bị xóa. Lỗi mạng thử lại có giãn cách, không quá ba lần.

Proxy ở tầng mạng

API của USGS công khai, gọi thẳng là cách nên dùng. Proxy không giúp truy vấn nặng chạy được, chỉ thêm một chặng. 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.

Thông báo cho người đọc bản tin

Khi một trận đã đăng trong bản tin được sửa đáng kể, bản tin hôm sau nên có dòng đính chính ngắn: trận nào, giá trị cũ, giá trị mới. Bảng phiên bản có sẵn mọi thông tin đó, chỉ cần một ngưỡng thế nào là sửa đáng kể, ví dụ độ lớn đổi từ 0,2 hoặc vị trí dời trên 20 km.

Khóa phiên bản

Metadata trả api 2.8.4. Ghi giá trị này cùng mỗi lần nạp. Lab chạy Python 3.12.10, requests 2.34.2.

Một trận một ID chính, mỗi lần sửa một dòng phiên bản, ID phụ luôn trỏ về ID chính. Bảng động đất không bị đếm trùng khi giữ ba điều đó.

USGS earthquake GeoJSON: câu hỏi thường gặp

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

Có cần khóa API không?

Không. Chỉ cần gọi nhẹ, đếm trước khi lấy, nghỉ giữa các lời gọi.

Vì sao số liệu một trận đổi sau nhiều ngày?

Người phân tích nhận thêm số liệu trạm và tính lại. Lab thấy một trận được sửa khoảng 24 ngày sau lần sửa trước.

Trận biến khỏi kết quả có phải bị xóa?

Không chắc. Có thể độ lớn đã giảm dưới ngưỡng. Truy vấn với ngưỡng thấp hơn và tra lại bằng eventid.

Thứ tự tọa độ là gì?

Kinh độ, vĩ độ, độ sâu km. Đừng đảo hai giá trị đầu.

Lấy toàn bộ danh mục từ năm 2000 được không?

Không trong một lời gọi. Lab thử và nhận 503. Đếm trước, chia theo năm hoặc theo vùng.

ID phụ có nên lưu không?

Có. Bảng ánh xạ ID phụ sang ID chính giúp không tạo dòng mới khi nguồn khác báo cùng trận.

Updatedafter có thay được query đầy đủ không?

Cho các lần chạy sau thì có. Lần đầu vẫn cần query đầy đủ cửa sổ. Thỉnh thoảng chạy lại đầy đủ để đối chiếu.

Dùng được cho cảnh báo khẩn không?

Không nên dựa vào pipeline tự viết cho cảnh báo khẩn. Dùng kênh chính thức của cơ quan khí tượng và động đất. Bảng của bài phục vụ bản tin và phân tích.

Có nên lưu cả bbox của response?

Nên. Bbox cho biết phạm vi thật của dữ liệu nhận được, giúp phát hiện nhanh khi truy vấn sai vùng.

USGS earthquake GeoJSON và những điều cần nhớ

USGS earthquake GeoJSON cho danh mục động đất sống, trong đó một trận có thể đổi độ lớn và vị trí nhiều tuần sau khi xảy ra. Đếm trước khi lấy, khóa bằng event ID chính, ánh xạ ID phụ, so updated giữa các lần nạp và ghi phiên bản thay vì thêm dòng mới. Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam khuyên anh em truy vấn với biên dưới thấp hơn ngưỡng báo cáo khi dùng USGS earthquake GeoJSON.

TIN TỨC LIÊN QUAN