Endpoint API GTFS Realtime (Masa Sebenar)
GET https://api.data.gov.my/gtfs-realtime/<feed>/<agency>
Apakah fungsi API GTFS Realtime?
GTFS Realtime adalah lanjutan daripada API GTFS Statik yang membolehkan pengendali pengangkutan awam untuk membekalkan masa ketibaan, amaran gangguan perkhidmatan, dan kedudukan kenderaan secara masa sebenar (realtime). Buat masa ini, API GTFS Realtime kami hanya membekalkan kedudukan kenderaan sahaja; amaran gangguan perkhidmatan dan kemaskini masa ketibaan akan disusuli secara berperingkat pada 2026. Untuk maklumat lanjut mengenai GTFS Realtime dan kegunaannya secara am, sila rujuk kepada https://gtfs.org/realtime/ (opens in a new tab).
Nota: Ralat pengesahan bagi setiap endpoint Kedudukan Kenderaan telah dijana dengan Pengesah GTFS Realtime (opens in a new tab).
Sumber Data bagi GTFS Realtime
API GTFS Realtime menggabungkan data dari pelbagai agensi pengangkutan di Malaysia. Data kami kini merangkumi:
- KTMB (Keretapi Tanah Melayu Berhad) (opens in a new tab): Pengendali keretapi yang menyediakan perkhidmatan keretapi di seluruh negara.
- Prasarana (opens in a new tab): Pengendali pengangkutan awam yang bertanggungjawab mengurus pelbagai mod pengangkutan termasuk LRT (Transit Aliran Ringan), MRT (Transit Aliran Massa), monorel, dan perkhidmatan bas.
- BAS.MY (opens in a new tab): Program Transformasi Bas Berhenti-Henti (SBST) di seluruh Malaysia yang dikendalikan oleh pelbagai pengendali perkhidmatan. Endpoint untuk Johor Bahru, Kangar, Alor Setar, Kuala Terengganu, Kota Bharu, dan Kuching sudahpun tersedia. Kami merancang untuk menambah liputan ke Melaka, Seremban, dan Ipoh menjelang 15 November 2025.
Format Permintaan (Query) dan Respon
API GTFS Realtime menepati piawaian format protobuf GTFS Realtime (.proto
). Perincian format yang lengkap boleh didapati di rujukan rasmi GTFS Realtime (opens in a new tab), manakala fail protobuf dapat diakses melalui endpoint berikut:
Kedudukan Kenderaan
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/<agency>
Pengguna data harus mengambil maklum bahawa penilaian terhadap data realtime untuk perkhidmatan bas mungkin akan menunjukkan ralat E028 (opens in a new tab) dari semasa ke semasa, bermakna kedudukan kenderaan yang dilaporkan berada di luar kawasan liputan seperti yang ditakrifkan dalam data statik. Untuk perkhidmatan bas khususnya, pengguna tidak perlu risau kerana tiada ralat pada data statik yang digunakan. Punca ralat ini biasanya adalah data GPS dari transponder kenderaan yang mungkin terlari daripada lokasi sebenar, menyebabkan kedudukan bas berada di luar kawasan liputan agensi buat sementara waktu.
Kekerapan Kemaskini Data
- Semua data kedudukan kenderaan dikemaskini setiap 30 saat.
KTMB
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/ktmb
# .proto file dkembalikan
Prasarana
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/prasarana?category=<category>
# .proto file dkembalikan
BAS.MY Kangar
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-kangar
# Fail .proto dikembalikan
BAS.MY Alor Setar
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-alor-setar
# Fail .proto dikembalikan
BAS.MY Kota Bharu
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-kota-bharu
# Fail .proto dikembalikan
BAS.MY Kuala Terengganu
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-kuala-terengganu
# Fail .proto dikembalikan
BAS.MY Melaka
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-melaka
# Fail .proto dikembalikan
BAS.MY Johor Bahru
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-johor
# Fail .proto dikembalikan
BAS.MY Kuching
GET https://api.data.gov.my/gtfs-realtime/vehicle-position/mybas-kuching
# Fail .proto dikembalikan
- Senarai nilai sah bagi
<category>
adalahrapid-bus-kl
,rapid-bus-mrtfeeder
,rapid-bus-kuantan
danrapid-bus-penang
.- Endpoint
rapid-rail-kl
yang terkandung dalam API GTFS Statik belum lagi dibekalkan dalam API realtime kerana data operasi realtime belum dapat dibekalkan secara stabil.
- Endpoint
- Ralat yang sudah dikenalpasti bagi
rapid-bus-kuantan
danrapid-bus-penang
:- E003 (opens in a new tab): GTFS-rt
trip_id
tidak wujud dalam data GTFS - E004 (opens in a new tab): GTFS-rt
route_id
tidak wujud dalam data GTFS- Ralat ini disebabkan oleh beberapa isu dengan sistem operasi legasi (antaranya yang sudah dipakai lebih daripada sepuluh tahun) yang tidak dapat menjejaki perjalanan kenderaan dan menjana data laluan dengan sempurna. Pasukan kami giat berusaha untuk mengatasi kekangan ini untuk memastikan data realtime menepati piawaian maka menjadi lebih berguna.
- E003 (opens in a new tab): GTFS-rt
- Ralat yang sudah dikenalpasti bagi
rapid-bus-penang
:- Developer perlu memadankan ID perjalanan (trip ID) dalam data realtime dengan ID perjalanan sedia ada dalam jadual statik. Ini dapat dilaksanakan dengan membandingkan segmen ID perjalanan selepas awalan ID perkhidmatan.
- Sebagai contoh, ID perjalanan
30000001_1000000855_053000_02
dalam GTFS Realtime sepadan dengan ID perjalanan statik seperti:weekend_30000001_1000000855_053000_02
weekday_30000001_1000000855_053000_02
23102302_30000001_1000000855_053000_02
- Kami telah mengambil keputusan untuk bergantung kepada developer untuk melaksanakan proses padanan ini kerana sebarang pemprosesan data masa sebenar mungkin akan menjejaskan keberfungsian API. Pihak kami akan susuli pembetulan yang lebih menyeleruh pada amsa depan untuk memastikan API statik dan realtime adalah sepadan tanpa perlu sebarang pemprosesan.
- Sebagai contoh, ID perjalanan
- Developer perlu memadankan ID perjalanan (trip ID) dalam data realtime dengan ID perjalanan sedia ada dalam jadual statik. Ini dapat dilaksanakan dengan membandingkan segmen ID perjalanan selepas awalan ID perkhidmatan.
Memahami data GTFS Realtime
Untuk membaca data protobuf dengan betul, sila rujuk kepada ikatan bahasa (language bindings) GTFS Realtime rasmi (opens in a new tab) untuk panduan dalam menyahkod data. Kami juga telah sediakan kod Python di bawah sebagai contoh penggunaan data kedudukan kenderaan masa sebenar daripada API GTFS Realtime:
# pip install gtfs-realtime-bindings pandas requests
from google.transit import gtfs_realtime_pb2
from google.protobuf.json_format import MessageToDict
import pandas as pd
from requests import get
# Sample GTFS-R URL from Malaysia's Open API
URL = 'https://api.data.gov.my/gtfs-realtime/vehicle-position/prasarana?category=rapid-bus-kl'
# Parse the GTFS Realtime feed
feed = gtfs_realtime_pb2.FeedMessage()
response = get(URL)
feed.ParseFromString(response.content)
# Extract and print vehicle position information
vehicle_positions = [MessageToDict(entity.vehicle) for entity in feed.entity]
print(f'Total vehicles: {len(vehicle_positions)}')
df = pd.json_normalize(vehicle_positions)
print(df)