Bazaraki API: οι αγγελίες της Κύπρου σε JSON
Το Bazaraki δεν έχει ανοιχτό API για προγραμματιστές. Εδώ επιστρέφεται ό,τι δείχνει δημόσια η σελίδα — τιμή σε ευρώ, επαρχία και περιοχή, χαρακτηριστικά της αγγελίας, αγγελιοδότης — σε JSON, χωρίς λογαριασμό. Δεν είναι εργαλείο για αγγελιοδότες: δεν ανεβάζει ούτε διαχειρίζεται αγγελίες, διαβάζει μόνο ό,τι βλέπει ο επισκέπτης. Οι πέντε επαρχίες δίνονται στο `city` με τα αγγλικά τους ονόματα: `nicosia`, `limassol`, `larnaca`, `paphos`, `famagusta`.
Endpoints
| endpoint | Τι επιστρέφει | Υποχρεωτικά |
|---|---|---|
| search | Αναζήτηση αγγελιών ανά κατηγορία, κείμενο, επαρχία, αγγελιοδότη και εύρος τιμής σε ευρώ, μαζί με τα φίλτρα της κατηγορίας. Ταξινόμηση κατά νεότερες, φθηνότερες, ακριβότερες ή συνάφεια· 30 αγγελίες ανά σελίδα. | όλα προαιρετικά |
| listing | Η πλήρης αγγελία με το `id` της: τίτλος, περιγραφή, τιμή, όλα τα χαρακτηριστικά, φωτογραφίες, προβολές, αγαπημένα, τοποθεσία και αγγελιοδότης (ιδιώτης ή επιχείρηση). | id |
| categories | Το δέντρο κατηγοριών, ένα επίπεδο τη φορά, με τον τρέχοντα αριθμό αγγελιών: μάρκες κάτω από τα αυτοκίνητα, μοντέλα κάτω από κάθε μάρκα, τύποι ακινήτων. | όλα προαιρετικά |
| filters | Τα φίλτρα που δέχεται μια κατηγορία: κλειδί, τύπος και κάθε επιλογή με την ετικέτα της. Αυτές ακριβώς τις τιμές δέχεται η παράμετρος `filters` του `search`. | category |
Κάθε κλήση χρεώνεται σε credits. Οι αποτυχημένες και μπλοκαρισμένες κλήσεις είναι δωρεάν.
Παράδειγμα που δουλεύει
Στην πρώτη σελίδα και οι 30 αγγελίες ήταν πληρωμένες προωθήσεις: 14 VIP και 16 TOP. Το Bazaraki βάζει πάντα πρώτα τις VIP, μετά τις TOP και στο τέλος τις κανονικές, και ταξινομεί μόνο μέσα σε κάθε ομάδα. Αν υπολογίζετε μέσο ενοίκιο ή ψάχνετε τις πιο πρόσφατες αγγελίες, κοιτάξτε πρώτα το `promotion_type`.
curl -X POST https://api.reefapi.com/bazaraki/v1/search \
-H "x-api-key: ΤΟ_ΚΛΕΙΔΙ_ΣΑΣ" \
-H "content-type: application/json" \
-d '{"category": "real-estate-to-rent/apartments-flats", "city": "limassol", "price_max": 1500}'{
"ok": true,
"data": {
"total": 411,
"total_is_exact": true,
"page": 1,
"page_size": 30,
"has_more": true,
"promoted_rows": 30,
"rows": [
...
{
"id": 6773048,
"title": "2-bedroom apartment to rent",
"price": 1200,
"currency": "EUR",
"price_display": "€1.200",
"city": "Limassol",
"area": "Fasouri",
"published": "Today",
"features": ["2", "1", "Not allowed", "70 m²"],
"promotion": "VIP",
"promotion_type": "premium",
"seller": { "is_business": false, "verified": false }
},
...
{
"id": 6795077,
"title": "1-bedroom apartment to rent",
"price": 1190,
"currency": "EUR",
"city": "Limassol",
"area": "Trachoni Lemesou",
"published": "5 days ago",
"promotion": "TOP",
"promotion_type": "top",
"seller": { "name": "Moving Doors", "is_business": true, "verified": true }
},
...
]
},
"meta": { "record_count": 30, "cache_hit": false, "mode": "live" }
}Πριν γράψετε δικό σας scraper για το Bazaraki
Η πρώτη παγίδα δεν φαίνεται: αν ζητήσετε διαδρομή κατηγορίας που δεν υπάρχει, το Bazaraki δεν απαντά με σφάλμα αλλά επιστρέφει αγγελίες από όλο το site. Ένας scraper με ένα λάθος γράμμα στην κατηγορία μαζεύει χιλιάδες άσχετες αγγελίες και δεν το καταλαβαίνει. Εδώ μια άγνωστη κατηγορία απορρίπτεται με INVALID_PARAM.
Το ίδιο συμβαίνει με τα φίλτρα: ένα φίλτρο ή μια τιμή που το site δεν αναγνωρίζει απλώς αγνοείται, και τα αποτελέσματα έρχονται αφιλτράριστα. Γι' αυτό εδώ κάθε φίλτρο ελέγχεται πρώτα με βάση τα φίλτρα που δηλώνει η ίδια η κατηγορία, και ό,τι δεν υπάρχει εκεί απορρίπτεται.
Και η ημερομηνία: το `datePublished` που δηλώνει η ίδια η σελίδα της αγγελίας είναι στην πράξη η τελευταία φορά που η αγγελία ανέβηκε ξανά στην κορυφή (30 στις 30 αγγελίες που ελέγξαμε). Γι' αυτό την επιστρέφουμε ως `date_raised` και όχι ως ημερομηνία δημοσίευσης.
Αν χρειάζεστε τα δεδομένα μία φορά, φτάνει και δικό σας script. Αν όμως παρακολουθείτε ενοίκια ή τιμές αυτοκινήτων κάθε εβδομάδα, ο χρόνος δεν πάει στον κώδικα αλλά σε τέτοιες λεπτομέρειες.
Περισσότερη τεκμηρίωση στα ελληνικά
Όρια και ειλικρινείς σημειώσεις
- Δεν είναι το επίσημο API του Bazaraki και δεν έχουμε καμία συνεργασία με το Bazaraki.
- Τα ονόματα κατηγοριών, οι αυτόματοι τίτλοι («2-bedroom apartment to rent») και οι τιμές των χαρακτηριστικών έρχονται στα αγγλικά. Ό,τι γράφει ο ίδιος ο αγγελιοδότης μένει όπως το έγραψε.
- Η ημερομηνία δημιουργίας της αγγελίας δεν δίνεται. Το `published` στη λίστα είναι σχετικό κείμενο («Today», «5 days ago») και το `date_raised` στην αγγελία είναι η τελευταία ανανέωση.
- Με αναζήτηση κειμένου το site κόβει το σύνολο γύρω στις 999 αγγελίες· τότε το `total_is_exact` γίνεται false.
- Τηλέφωνο και email αγγελιοδότη δεν επιστρέφονται: στο site είναι πίσω από λογαριασμό.
- Οι απαντήσεις δεν αποθηκεύονται προσωρινά: κάθε κλήση διαβάζει το Bazaraki εκείνη τη στιγμή.