2.9 KiB
2.9 KiB
Flask API Rekomendasi Mobil
API sederhana untuk rekomendasi mobil berdasarkan budget user. API mencari dataset dari urutan berikut:
CAR_DATASET_PATH
storage/app/dataset_final.csv
database/dataset_final.csv
database/dataset_final.xls
storage/app/dataset_mobil.csv
Jika file final kamu bernama dataset_final.csv, letakkan di storage/app/dataset_final.csv atau database/dataset_final.csv.
Menjalankan API
cd flask_api
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python app.py
API berjalan di:
http://127.0.0.1:5000
Cek Status
curl http://127.0.0.1:5000/health
Rekomendasi Sederhana
curl -X POST http://127.0.0.1:5000/recommend ^
-H "Content-Type: application/json" ^
-d "{\"budget\":200000000,\"limit\":10}"
Rekomendasi Kompleks
Endpoint yang sama juga mendukung preferensi, filter ketat, strategi budget, dan bobot skor:
curl -X POST http://127.0.0.1:5000/recommend ^
-H "Content-Type: application/json" ^
-d "{\"budget\":200000000,\"limit\":5,\"strategi\":\"premium\",\"preferensi\":{\"kategori\":\"suv\",\"transmisi\":\"automatic\",\"bahan_bakar\":\"bensin\",\"mesin_cc\":1500},\"filter\":{\"tahun_min\":2015},\"bobot\":{\"budget\":0.35,\"preference\":0.35,\"year\":0.2,\"engine\":0.1}}"
Field request:
budget: wajib, maksimal budget user.limit: jumlah rekomendasi, maksimal 50.strategi:hemat,seimbang, ataupremium.- Gunakan
strategi: "harga_pas"ataustrategi: "spesifik"jika ingin hasil paling dekat dengan nominal budget yang dimasukkan. preferensi: nilai yang disukai, misalnyamerk,kategori,transmisi,bahan_bakar,cluster, ataumesin_cc.filter: syarat wajib, misalnyatahun_min,tahun_max,mesin_min,mesin_max,kategori,transmisi,bahan_bakar,merk,cluster, atautoleransi_harga_percent.bobot: pengaturan bobot skor untukbudget,preference,year,engine, dancluster.include_above_budget:truejika ingin tetap menampilkan mobil sedikit di atas budget.max_over_budget_percent: batas persen di atas budget jikainclude_above_budgetaktif.
Response berisi daftar mobil dengan score, score_detail, selisih_budget, model_cluster, dan alasan agar frontend bisa menjelaskan kenapa mobil tersebut direkomendasikan.
Integrasi Laravel
Laravel membaca URL Flask dari:
CAR_RECOMMENDATION_API_URL=http://127.0.0.1:5000
CAR_RECOMMENDATION_API_TIMEOUT=3
Alur integrasi:
- User mengisi budget di halaman
/mobil-bekas. CategoryControllermemanggilApp\Services\CarRecommendationService.- Service mengirim request ke Flask
/recommend. - Flask melatih K-Means dari dataset dengan fitur
harga,tahun, danmesin_cc. - Hasil Python dicocokkan kembali ke data
categoriesLaravel untuk ditampilkan di card mobil. - Jika Flask tidak aktif, Laravel otomatis memakai fallback rekomendasi lokal.