Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //error_reporting(E_ALL | E_STRICT);
- require('BooliPHP-master/Booli.php');
- class Booli_API {
- private $res; //response
- private $pageNumber;
- private $version;
- private $mapping;
- private $country;
- private $viewButton;
- /**
- * Constructor
- * @param type $res - response-Object
- */
- public function __construct($res) {
- $this->res = $res;
- $this->pageNumber = 1;
- $this->mapping = $this->getMapping();
- }
- //Mapping fuer verschiedene
- private function getMapping( ) {
- return array(
- // rent
- //Квартиры
- 68 => 'lägenhet',
- //Дома
- 84 => 'villa, fritidshus, parhus, radhus, kedjehus',
- // Временная аренда
- //83 => array('category_id' => "", 'nedvigimost_type' => '2'),
- //Коммунальная квартира
- //34 => '',
- //Гаражи / Автостоянки
- //82 => 'semi-detached',
- //Санатории
- //81 => array('property_type' => ""),
- //Коммерческая недвижимость
- //41 => '',
- //sale
- //Квартиры
- 80 => 'lägenhet',
- //Участки
- 79 => 'tomt-mark',
- //Дома
- 78 => 'villa, fritidshus, parhus, radhus, kedjehus',
- //Гаражи / Автостоянки
- //77 => 'semi-detached',
- //Распродажа с аукциона
- //76 => array('property_type' => "compulsoryauction"),
- //Инвестиционная
- //75 => array('property_type' => "investment"),
- //Готовые и Монолитные дома
- 74 => 'villa, fritidshus, parhus, radhus, kedjehus',
- );
- }
- /**
- * Initate the Search for results
- * @return type null
- */
- public function search() {
- $this->pageNumber = filter_input(INPUT_POST, 'pageNumber', FILTER_SANITIZE_NUMBER_INT);
- $pagenumber = $this->pageNumber;
- //echo 'page ' . $pagenumber;
- $this->version = (filter_input(INPUT_POST, 'version', FILTER_SANITIZE_STRING) == 'true') ? true : false;
- $aParameter = $this->getSearchParameter();
- $estates = $this->getEstates($aParameter, $pagenumber);
- $this->buildEstates($estates);
- }
- protected function getEstates( $aParameter, $pagenumber) {
- if (empty($pagenumber)) {
- $pagenumber = 1;
- }
- $callerId = 'skyhype';
- $key = 'YdSZRVcXE9Qu3vYtog6mHCTQowx9wmcIzXgOzez9';
- $booli = new Booli( $callerId, $key );
- $location = $aParameter['location'];
- $filter = array(
- 'minPrice' => $aParameter['minPrice'],
- 'maxPrice' => $aParameter['maxPrice'],
- 'minRooms' => $aParameter['minRooms'],
- 'maxRooms' => $aParameter['maxRooms'],
- 'objectType' => $aParameter['objectType'],
- );
- $limit = 50;
- $offset = 0 + ($pagenumber - 1) * $limit;
- $result = $booli->getListing($location, $filter, $offset, $limit);
- return $result;
- }
- private function getSearchParameter() {
- $property_type = $this->getPropertyType();
- $dict = $this->getMapping();
- $mapped_property_type = $dict[$property_type];
- //print_r($mapped);
- $rooms = $this->getRoomType($property_type);
- $aParameter = array(
- 'minRooms' => $rooms['minRooms'],
- 'maxRooms' => $rooms['maxRooms'],
- 'objectType' => $mapped_property_type,
- );
- if (!empty($_POST['keywords'])) {
- $location = $_POST['keywords'];
- $aParameter['location'] = $location;
- }
- if (isset($_POST['range-to:preis'])) {
- $priceTo = $_POST['range-to:preis'];
- }
- if (isset($_POST['range-from:preis'])) {
- $priceFrom = $_POST['range-from:preis'];
- }
- if (strlen($priceTo . $priceFrom) > 0) {
- $aParameter['minPrice'] = $priceFrom;
- $aParameter['maxPrice'] = $priceTo;
- }
- //print_r($aParameter);
- return $aParameter;
- }
- /**
- * Get wanted information out of resultset
- * @param type $estates response from API
- * @return type null
- */
- private function buildEstates($estates) {
- //get number of current page
- $pageNumber = $this->pageNumber;
- $estateList = array();
- $estates_array_json = json_decode(json_encode($estates), True);
- $estates_array = $estates_array_json['listings'];
- //get number of all pages
- $numberOfPages = ceil($estates_array_json['totalCount'] / 50);
- //echo $numberOfPages;
- //print_r($estates_array_json);
- //print_r($estates_array);
- $this->res->result_count = $estates_array_json['totalCount'];
- foreach ($estates_array as $estate) {
- $item = new stdClass();
- $item->id = $estate['booliId'];
- $named_area = $estate['location']['namedAreas'][0];
- $item->title = $estate['location']['address']['streetAddress'] . ', ' . $named_area;
- $item->address = $estate['location']['address']['streetAddress'] . ', ' . $named_area;
- $item->price = $estate['listPrice'];
- $item->rooms = $estate['rooms'];
- $item->picture = $estate[''];
- $item->url = $estate['url'];
- $url = $estate['url'];
- $estateList[] = $item;
- }
- $this->res->estates = $estateList;
- $this->genHTML($estateList, $pageNumber, $numberOfPages);
- }
- private function getPropertyType( ) {
- $category = $_POST['category'];
- if (is_array($category) && count($category) >= 1 && array_key_exists($category[0], $this->mapping)) {
- return $category[0];
- }
- return null;
- }
- private function getRoomType( $property_type ) {
- $room = $roomTo = $roomFrom = 0;
- if (isset($_POST['range-to:anzahl_zimmer'])) {
- $roomTo = intval($_POST['range-to:anzahl_zimmer']);
- }
- if (isset($_POST['range-from:anzahl_zimmer'])) {
- $roomFrom = intval($_POST['range-from:anzahl_zimmer']);
- }
- if ($roomFrom == 0) {
- $roomFrom = '';
- }
- else if ($roomTo == 0) {
- $roomTo = '';
- }
- return array(
- 'minRooms' => $roomTo,
- 'maxRooms' => $roomFrom
- );
- }
- /**
- * Generates HTMl response
- * @param type $estateList Array of estate-Objects
- */
- private function genHTML($estateList, $pageNumber, $numberOfPages) {
- //if more than one page
- if ($numberOfPages > 0) {
- $paging = '';
- //show page number from and to (show up to 5 paging links)
- $from = ($pageNumber > 1) ? $pageNumber - 1 : $pageNumber;
- $from = ($pageNumber > 2) ? $pageNumber - 2 : $from;
- $to = ($pageNumber < $numberOfPages) ? $pageNumber + 1 : $pageNumber;
- $to = ($pageNumber < $numberOfPages - 1) ? $pageNumber + 2 : $to;
- //add pages select
- for ($i = $from; $i <= $to; $i++) {
- $paging .= '<a href="#top" data-num="' . $i . '" class="paging-link' . (($i == $pageNumber) ? ' current' : '') . '">' . $i . '</a>';
- }
- //add next button if there is one
- if ($pageNumber < $numberOfPages) {
- $paging .= '<a href="#top" data-num="' . ($pageNumber + 1) . '" class="paging-link"><pan class="glyphicon glyphicon-chevron-right"></span></a>';
- }
- //add back button if not first page
- if ($pageNumber > 1) {
- $paging = '<a href="#top" data-num="' . ($pageNumber - 1) . '" class="paging-link"><pan class="glyphicon glyphicon-chevron-left"></span></a>' . $paging;
- }
- //back to the start (showed on after fourth page)
- if ($pageNumber > 4) {
- $paging = '<a href="#top" data-num="1" class="paging-link"><pan class="glyphicon glyphicon-fast-backward"></span></a>' . $paging;
- }
- $this->res->paging = $paging;
- }
- $htmlList = array();
- foreach ($estateList as $estate) {
- if ($this->version) {
- $htmlList[] = $this->getItemHTMLMobile($estate);
- } else {
- $htmlList[] = $this->getItemHTML($estate);
- }
- }
- $this->res->version = $this->version;
- $this->res->html = $htmlList;
- }
- /**
- * Generate HTML for single Estate-Object
- * @param Object Estate-Object
- * @return string HTML
- */
- private function getItemHTML($estate) {
- ob_start();
- echo 'TEST';
- ?>
- <li class="listing large">
- <a href="<?= $estate->url ?>" class="outline">
- <span style="background-image: url(<?= (strlen($estate->picture) > 1) ? $estate->picture : '/assets/images/kein-bild-vorhanden.png' ?>)" class="preview"></span>
- </a><div class="detail-wrapper"><a href="<?= $estate->url ?>" class="outline">
- <p class="price"><span class="number"><?= ( number_format($estate->price, 0, '', ' ') > 0) ? number_format($estate->price, 0, '', ' ') ."€" : '' ?></span> </p>
- <p class="title"><?= $estate->title ?></p>
- <p class="address"><?= $estate->address ?></p>
- </a><a class="button red button" href="<?= $estate->url ?>"><?php echo $this->viewButton; ?></a>
- <span class="provider idealista float-right"></span>
- </div>
- </li>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate HTML for single Estate-Object (mobile Version)
- * @param Object Estate-Object
- * @return string HTML
- */
- private function getItemHTMLMobile($estate) {
- ob_start();
- ?>
- <div class="entry mobile">
- <a data-event="Immobilien:ImmobilienScout24 Image" href="<?= $estate->url ?>" target="_blank" class="immobilien-search-preview-mobile" style="background-image: url(<?= (strlen($estate->picture) > 1) ? $estate->picture : '/assets/images/kein-bild-vorhanden.png' ?>);">
- </a>
- <div class="row whiteout result">
- <div class="col-xs-12">
- <a data-event="Immobilien:ImmobilienScout24" href="<?= $estate->url ?>" target="_blank">
- <h2><?= $estate->title ?></h2>
- </a>
- <p><?= $estate->address ?></p>
- <!-- Price format without decimal part of the number -->
- <p><?= ( number_format($estate->price, 0, '', ' ') > 0) ? number_format($estate->price, 0, '', ' ') . "₽" : '' ?><?= ((strlen($estate->rooms) > 0) ? ' | ' . $estate->rooms . ' Zimmer' : '') ?><?= ((number_format($estate->livingSpace, 0) > 0) ? ' | ' . number_format($estate->livingSpace, 0) . ' m²' : '') ?>
- <?= ((number_format($estate->roomSize, 0) > 0) ? ' | ' . number_format($estate->roomSize, 0) . ' m² Zimmer' : '') ?>
- <?= ((number_format($estate->netFloorSpace, 0) > 0) ? ' | ' . number_format($estate->netFloorSpace, 0) . ' m² Erdgeschoss (Netto)' : '') ?></p>
- </div>
- </div>
- </div>
- <?php
- return ob_get_clean();
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement