TA/web_JMW/flask_api
saitama1429 28a9d9c1d5 Fix
ini wes fix
2026-08-13 13:46:14 +07:00
..
__pycache__ Fix 2026-08-13 13:46:14 +07:00
README.md Fix 2026-08-13 13:46:14 +07:00
app.py Fix 2026-08-13 13:46:14 +07:00
requirements.txt Fix 2026-08-13 13:46:14 +07:00

README.md

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, 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:

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.