Sebuah API tidak resmi yang andal dan cepat untuk melakukan scraping jadwal kereta api dari situs resmi Kereta Api Indonesia. Dibangun dengan Python, FastAPI, Cloudscraper, dan dilengkapi dengan caching serta update otomatis.
- Pencarian Jadwal: Temukan jadwal kereta api berdasarkan stasiun asal, tujuan, dan tanggal.
- Daftar Stasiun: Akses daftar lengkap stasiun kereta api di Indonesia, lengkap dengan fitur pencarian.
- Caching Cerdas: Menggunakan cache in-memory (TTL 15 menit) untuk memberikan respons super cepat pada pencarian yang sama.
- Update Otomatis: Daftar stasiun diperbarui secara otomatis setiap 24 jam untuk menjaga data tetap relevan.
- Validasi Input: Validasi kode stasiun di awal untuk respons error yang cepat dan efisien.
- Dokumentasi Interaktif: Dokumentasi API yang digenerate secara otomatis dan interaktif menggunakan Swagger UI.
- Logging Terstruktur: Output log dalam format JSON dengan
request_iduntuk kemudahan debugging dan monitoring. - �️ Rate Limiting: Melindungi API dari penyalahgunaan dengan batas permintaan 30 kali per menit.
- 📦 Siap Produksi dengan Docker: Dilengkapi dengan
Dockerfiledandocker-compose.ymluntuk deployment yang mudah dan konsisten.
Cara termudah dan paling konsisten untuk menjalankan API ini adalah menggunakan Docker.
-
Prasyarat: Pastikan Anda telah menginstal Docker Desktop.
-
Clone repository ini:
git clone https://github.com/dzakwanalifi/kai-scraper-api.git cd kai-scraper-api -
Bangun dan Jalankan Container: Dari direktori root proyek, jalankan perintah berikut:
docker-compose up --build
Perintah ini akan membangun Docker image dan menjalankan container di latar belakang.
-
Akses API:
- Buka browser Anda dan pergi ke
http://localhost:8000. - Untuk melihat dokumentasi interaktif, buka
http://localhost:8000/docs.
- Buka browser Anda dan pergi ke
-
Untuk Menghentikan: Tekan
Ctrl + Cdi terminal, lalu jalankan:docker-compose down
Jika Anda tidak ingin menggunakan Docker, Anda masih bisa menjalankannya secara lokal.
- Ikuti langkah-langkah instalasi virtual environment dan
pip install -r requirements.txtseperti biasa. - Jalankan server development:
uvicorn main:app --reload
Mengembalikan daftar stasiun. Sangat berguna untuk menemukan kode stasiun yang benar.
- Endpoint:
GET /stations - Contoh Request (semua stasiun):
GET http://127.0.0.1:8000/stations - Contoh Request (dengan pencarian):
GET http://127.0.0.1:8000/stations?search=jakarta
Melakukan pencarian jadwal kereta api.
- Endpoint:
GET /search - Parameter:
origin(string, wajib): Kode stasiun asal (misal:GMR).destination(string, wajib): Kode stasiun tujuan (misal:BD).departure_date(string, wajib): Tanggal keberangkatan formatYYYY-MM-DD.
- Contoh Request:
GET http://127.0.0.1:8000/search?origin=GMR&destination=BD&departure_date=2025-12-25 - Contoh Respons Sukses (200 OK):
[ { "train_name": "ARGO PARAHYANGAN (44)", "departure_time": "06:30", "arrival_time": "09:15", "duration": "2j 45m", "price": "Rp 250.000,-", "status": "Tersedia" } ] - Contoh Respons Gagal (404 Not Found):
{ "detail": "No schedules found for route GMR to BD." }
Proyek ini dilengkapi dengan serangkaian tes menggunakan pytest.
pytest -vProyek ini dilisensikan di bawah Lisensi MIT.