Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.89 KB | None | 0 0
  1. <?php
  2. //error_reporting(E_ALL | E_STRICT);
  3. require('BooliPHP-master/Booli.php');
  4.  
  5. class Booli_API {
  6.  
  7.     private $res; //response
  8.     private $pageNumber;
  9.     private $version;
  10.     private $mapping;
  11.     private $country;
  12.     private $viewButton;
  13.  
  14.     /**
  15.      * Constructor
  16.      * @param type $res - response-Object
  17.      */
  18.     public function __construct($res) {
  19.         $this->res = $res;
  20.         $this->pageNumber = 1;
  21.         $this->mapping = $this->getMapping();
  22.     }
  23.  
  24.     //Mapping fuer verschiedene
  25.     private function getMapping(  ) {
  26.         return array(
  27.             // rent
  28.             //Квартиры
  29.             68 => 'lägenhet',
  30.             //Дома
  31.             84 => 'villa, fritidshus, parhus, radhus, kedjehus',
  32.             // Временная аренда
  33.             //83 => array('category_id' => "", 'nedvigimost_type' => '2'),
  34.             //Коммунальная квартира
  35.             //34 => '',
  36.             //Гаражи / Автостоянки
  37.             //82 => 'semi-detached',
  38.             //Санатории
  39.             //81 => array('property_type' => ""),
  40.             //Коммерческая недвижимость
  41.             //41 => '',
  42.  
  43.             //sale
  44.             //Квартиры
  45.             80 => 'lägenhet',
  46.             //Участки
  47.             79 => 'tomt-mark',
  48.             //Дома
  49.             78 => 'villa, fritidshus, parhus, radhus, kedjehus',
  50.             //Гаражи / Автостоянки
  51.             //77 => 'semi-detached',
  52.             //Распродажа с аукциона
  53.             //76 => array('property_type' => "compulsoryauction"),
  54.             //Инвестиционная
  55.             //75 => array('property_type' => "investment"),
  56.             //Готовые и  Монолитные дома
  57.             74 => 'villa, fritidshus, parhus, radhus, kedjehus',
  58.         );
  59.     }
  60.  
  61.  
  62.     /**
  63.      * Initate the Search for results
  64.      * @return type null
  65.      */
  66.     public function search() {
  67.  
  68.         $this->pageNumber = filter_input(INPUT_POST, 'pageNumber', FILTER_SANITIZE_NUMBER_INT);
  69.         $pagenumber = $this->pageNumber;
  70.         //echo 'page ' . $pagenumber;
  71.         $this->version = (filter_input(INPUT_POST, 'version', FILTER_SANITIZE_STRING) == 'true') ? true : false;
  72.  
  73.         $aParameter = $this->getSearchParameter();
  74.  
  75.         $estates = $this->getEstates($aParameter, $pagenumber);
  76.  
  77.         $this->buildEstates($estates);
  78.     }
  79.  
  80.     protected function getEstates( $aParameter, $pagenumber) {
  81.         if (empty($pagenumber)) {
  82.             $pagenumber = 1;
  83.         }
  84.         $callerId = 'skyhype';
  85.         $key = 'YdSZRVcXE9Qu3vYtog6mHCTQowx9wmcIzXgOzez9';
  86.  
  87.         $booli = new Booli( $callerId, $key );
  88.  
  89.         $location = $aParameter['location'];
  90.  
  91.         $filter = array(
  92.                 'minPrice' => $aParameter['minPrice'],
  93.                 'maxPrice' => $aParameter['maxPrice'],
  94.                 'minRooms' => $aParameter['minRooms'],
  95.                 'maxRooms' => $aParameter['maxRooms'],
  96.                 'objectType' => $aParameter['objectType'],
  97.             );
  98.  
  99.         $limit = 50;
  100.         $offset = 0 + ($pagenumber - 1) * $limit;
  101.  
  102.         $result = $booli->getListing($location, $filter, $offset, $limit);
  103.  
  104.         return $result;
  105.     }
  106.  
  107.     private function getSearchParameter() {
  108.  
  109.         $property_type = $this->getPropertyType();
  110.  
  111.         $dict = $this->getMapping();
  112.  
  113.         $mapped_property_type = $dict[$property_type];
  114.  
  115.         //print_r($mapped);
  116.  
  117.         $rooms = $this->getRoomType($property_type);
  118.  
  119.         $aParameter = array(
  120.             'minRooms' => $rooms['minRooms'],
  121.             'maxRooms' => $rooms['maxRooms'],
  122.             'objectType' => $mapped_property_type,
  123.         );
  124.  
  125.         if (!empty($_POST['keywords'])) {
  126.             $location = $_POST['keywords'];
  127.             $aParameter['location'] = $location;
  128.         }
  129.  
  130.         if (isset($_POST['range-to:preis'])) {
  131.             $priceTo = $_POST['range-to:preis'];
  132.         }
  133.  
  134.         if (isset($_POST['range-from:preis'])) {
  135.             $priceFrom = $_POST['range-from:preis'];
  136.         }
  137.  
  138.         if (strlen($priceTo . $priceFrom) > 0) {
  139.             $aParameter['minPrice'] = $priceFrom;
  140.             $aParameter['maxPrice'] = $priceTo;
  141.         }
  142.         //print_r($aParameter);
  143.         return $aParameter;
  144.     }
  145.  
  146.     /**
  147.      * Get wanted information out of resultset
  148.      * @param type $estates response from API
  149.      * @return type null
  150.      */
  151.     private function buildEstates($estates) {
  152.  
  153.         //get number of current page
  154.         $pageNumber = $this->pageNumber;
  155.         $estateList = array();
  156.         $estates_array_json = json_decode(json_encode($estates), True);
  157.         $estates_array = $estates_array_json['listings'];
  158.         //get number of all pages
  159.         $numberOfPages = ceil($estates_array_json['totalCount'] / 50);
  160.         //echo $numberOfPages;
  161.         //print_r($estates_array_json);
  162.         //print_r($estates_array);
  163.  
  164.         $this->res->result_count = $estates_array_json['totalCount'];
  165.  
  166.         foreach ($estates_array as $estate) {
  167.  
  168.             $item = new stdClass();
  169.             $item->id = $estate['booliId'];
  170.             $named_area = $estate['location']['namedAreas'][0];
  171.             $item->title = $estate['location']['address']['streetAddress'] . ', ' . $named_area;
  172.  
  173.             $item->address = $estate['location']['address']['streetAddress'] . ', ' . $named_area;
  174.            
  175.             $item->price = $estate['listPrice'];
  176.             $item->rooms = $estate['rooms'];
  177.             $item->picture = $estate[''];
  178.             $item->url = $estate['url'];
  179.  
  180.             $url = $estate['url'];
  181.  
  182.             $estateList[] = $item;
  183.            
  184.         }
  185.  
  186.         $this->res->estates = $estateList;
  187.         $this->genHTML($estateList, $pageNumber, $numberOfPages);
  188.     }
  189.  
  190.     private function getPropertyType(  ) {
  191.         $category = $_POST['category'];
  192.         if (is_array($category) && count($category) >= 1 && array_key_exists($category[0], $this->mapping)) {
  193.             return $category[0];
  194.         }
  195.         return null;
  196.     }
  197.  
  198.     private function getRoomType( $property_type ) {
  199.  
  200.         $room = $roomTo = $roomFrom = 0;
  201.         if (isset($_POST['range-to:anzahl_zimmer'])) {
  202.             $roomTo = intval($_POST['range-to:anzahl_zimmer']);
  203.         }
  204.  
  205.         if (isset($_POST['range-from:anzahl_zimmer'])) {
  206.             $roomFrom = intval($_POST['range-from:anzahl_zimmer']);
  207.         }
  208.  
  209.         if ($roomFrom == 0) {
  210.             $roomFrom = '';
  211.         }
  212.  
  213.         else if ($roomTo == 0) {
  214.             $roomTo = '';
  215.         }
  216.  
  217.         return array(
  218.             'minRooms' => $roomTo,
  219.             'maxRooms' => $roomFrom
  220.         );
  221.     }
  222.  
  223.     /**
  224.      * Generates HTMl response
  225.      * @param type $estateList Array of estate-Objects
  226.      */
  227.     private function genHTML($estateList, $pageNumber, $numberOfPages) {
  228.         //if more than one page
  229.         if ($numberOfPages > 0) {
  230.             $paging = '';
  231.  
  232.             //show page number from and to (show up to 5 paging links)
  233.             $from = ($pageNumber > 1) ? $pageNumber - 1 : $pageNumber;
  234.             $from = ($pageNumber > 2) ? $pageNumber - 2 : $from;
  235.             $to = ($pageNumber < $numberOfPages) ? $pageNumber + 1 : $pageNumber;
  236.             $to = ($pageNumber < $numberOfPages - 1) ? $pageNumber + 2 : $to;
  237.  
  238.             //add pages select
  239.             for ($i = $from; $i <= $to; $i++) {
  240.                 $paging .= '<a href="#top" data-num="' . $i . '" class="paging-link' . (($i == $pageNumber) ? ' current' : '') . '">' . $i . '</a>';
  241.             }
  242.  
  243.             //add next button if there is one
  244.             if ($pageNumber < $numberOfPages) {
  245.                 $paging .= '<a  href="#top" data-num="' . ($pageNumber + 1) . '" class="paging-link"><pan class="glyphicon glyphicon-chevron-right"></span></a>';
  246.             }
  247.             //add back button if not first page
  248.             if ($pageNumber > 1) {
  249.                 $paging = '<a  href="#top" data-num="' . ($pageNumber - 1) . '" class="paging-link"><pan class="glyphicon glyphicon-chevron-left"></span></a>' . $paging;
  250.             }
  251.             //back to the start (showed on after fourth page)
  252.             if ($pageNumber > 4) {
  253.                 $paging = '<a  href="#top" data-num="1" class="paging-link"><pan class="glyphicon glyphicon-fast-backward"></span></a>' . $paging;
  254.             }
  255.  
  256.             $this->res->paging = $paging;
  257.         }
  258.  
  259.         $htmlList = array();
  260.         foreach ($estateList as $estate) {
  261.             if ($this->version) {
  262.                 $htmlList[] = $this->getItemHTMLMobile($estate);
  263.             } else {
  264.                 $htmlList[] = $this->getItemHTML($estate);
  265.             }
  266.         }
  267.         $this->res->version = $this->version;
  268.         $this->res->html = $htmlList;
  269.     }
  270.  
  271.     /**
  272.      * Generate HTML for single Estate-Object
  273.      * @param Object Estate-Object
  274.      * @return string HTML
  275.      */
  276.     private function getItemHTML($estate) {
  277.         ob_start();
  278.         echo 'TEST';
  279.         ?>
  280.  
  281.         <li class="listing large">
  282.             <a href="<?= $estate->url ?>" class="outline">
  283.                 <span style="background-image: url(<?= (strlen($estate->picture) > 1) ? $estate->picture : '/assets/images/kein-bild-vorhanden.png' ?>)" class="preview"></span>
  284.  
  285.  
  286.             </a><div class="detail-wrapper"><a href="<?= $estate->url ?>" class="outline">
  287.                     <p class="price"><span class="number"><?= ( number_format($estate->price, 0, '', ' ') > 0) ? number_format($estate->price, 0, '', ' ') ."&euro;" : '' ?></span> </p>
  288.                     <p class="title"><?= $estate->title ?></p>
  289.                     <p class="address"><?= $estate->address ?></p>
  290.  
  291.                 </a><a class="button red button" href="<?= $estate->url ?>"><?php echo $this->viewButton; ?></a>
  292.                 <span class="provider idealista float-right"></span>
  293.  
  294.             </div>
  295.  
  296.         </li>
  297.         <?php
  298.         return ob_get_clean();
  299.     }
  300.  
  301.     /**
  302.      * Generate HTML for single Estate-Object (mobile Version)
  303.      * @param Object Estate-Object
  304.      * @return string HTML
  305.      */
  306.     private function getItemHTMLMobile($estate) {
  307.         ob_start();
  308.         ?>
  309.  
  310.         <div class="entry mobile">
  311.  
  312.             <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' ?>);">
  313.  
  314.             </a>
  315.  
  316.             <div class="row whiteout result">
  317.                 <div class="col-xs-12">
  318.  
  319.                     <a data-event="Immobilien:ImmobilienScout24" href="<?= $estate->url ?>" target="_blank">
  320.                         <h2><?= $estate->title ?></h2>
  321.                     </a>
  322.  
  323.                     <p><?= $estate->address ?></p>
  324.                     <!-- Price format without decimal part of the number -->
  325.                     <p><?= ( number_format($estate->price, 0, '', ' ') > 0) ? number_format($estate->price, 0, '', ' ') . "&#8381;" : '' ?><?= ((strlen($estate->rooms) > 0) ? ' | ' . $estate->rooms . ' Zimmer' : '') ?><?= ((number_format($estate->livingSpace, 0) > 0) ? ' | ' . number_format($estate->livingSpace, 0) . '  m²' : '') ?>
  326.                         <?= ((number_format($estate->roomSize, 0) > 0) ? ' | ' . number_format($estate->roomSize, 0) . '  m² Zimmer' : '') ?>
  327.                         <?= ((number_format($estate->netFloorSpace, 0) > 0) ? ' | ' . number_format($estate->netFloorSpace, 0) . '  m² Erdgeschoss (Netto)' : '') ?></p>
  328.  
  329.                 </div>
  330.             </div>
  331.         </div>
  332.         <?php
  333.         return ob_get_clean();
  334.     }
  335.  
  336. }
  337. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement