# Flask API Rekomendasi Mobil API sederhana untuk rekomendasi mobil berdasarkan budget user. API mencari dataset dari urutan berikut: ```txt 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 ```bash cd flask_api python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt python app.py ``` API berjalan di: ```txt http://127.0.0.1:5000 ``` ## Cek Status ```bash curl http://127.0.0.1:5000/health ``` ## Rekomendasi Sederhana ```bash 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: ```bash 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`, atau `premium`. - Gunakan `strategi: "harga_pas"` atau `strategi: "spesifik"` jika ingin hasil paling dekat dengan nominal budget yang dimasukkan. - `preferensi`: nilai yang disukai, misalnya `merk`, `kategori`, `transmisi`, `bahan_bakar`, `cluster`, atau `mesin_cc`. - `filter`: syarat wajib, misalnya `tahun_min`, `tahun_max`, `mesin_min`, `mesin_max`, `kategori`, `transmisi`, `bahan_bakar`, `merk`, `cluster`, atau `toleransi_harga_percent`. - `bobot`: pengaturan bobot skor untuk `budget`, `preference`, `year`, `engine`, dan `cluster`. - `include_above_budget`: `true` jika ingin tetap menampilkan mobil sedikit di atas budget. - `max_over_budget_percent`: batas persen di atas budget jika `include_above_budget` aktif. 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: ```env CAR_RECOMMENDATION_API_URL=http://127.0.0.1:5000 CAR_RECOMMENDATION_API_TIMEOUT=3 ``` Alur integrasi: 1. User mengisi budget di halaman `/mobil-bekas`. 2. `CategoryController` memanggil `App\Services\CarRecommendationService`. 3. Service mengirim request ke Flask `/recommend`. 4. Flask melatih K-Means dari dataset dengan fitur `harga`, `tahun`, dan `mesin_cc`. 5. Hasil Python dicocokkan kembali ke data `categories` Laravel untuk ditampilkan di card mobil. 6. Jika Flask tidak aktif, Laravel otomatis memakai fallback rekomendasi lokal.