Esempio n. 1
0
 protected function parse($st)
 {
     $st = preg_replace('/[\\w\\d]{100,}/', '', $st);
     // убираем слишком длинную строку, иначе рушится регулярка
     if (!preg_match_all('#' . '.*?<strong>(?<_name>[^<]+?\\d[^<]+?)<' . '.*?Телефон: (?<phone>.+?)<br>' . '.*?Режим работы: (?<hours>.+?)<br>' . '(?<wheel>[^<]+?маломобильн)?' . '.*?Адрес: .+?, (?<_addr>.+?)<br>' . '(.{0,1500}?viewPointOnMap..(?<lon>[\\d.]+).,.(?<lat>[\\d.]+).)?' . '#su', $st, $m, PREG_SET_ORDER)) {
         return;
     }
     foreach ($m as $obj) {
         if ($obj['wheel']) {
             $obj['wheelchair'] = 'yes';
         }
         $obj['contact:phone'] = $this->phone($obj['phone']);
         // номер отделения
         if (preg_match('#[\\d/]+#', $obj['_name'], $m_)) {
             $obj['ref'] = $m_[0];
         }
         // формируем часы работы
         $obj['opening_hours'] = $this->time($this->parseTime($obj['hours']));
         // обрабатываем адрес
         $obj['_addr'] = preg_replace('/\\d{6}/i', '', $obj['_addr']);
         // убираем индекс
         $obj['_addr'] = preg_replace('/(^[^а-я0-9]+|[^а-я0-9]+$)/ui', '', $obj['_addr']);
         // мусор на границах
         $obj['_addr'] = preg_replace('/\\(.+/ui', '', $obj['_addr']);
         // убираем все что в скобках и правее
         // отделение
         if (preg_match('/[а-я]+ отделение/iu', $obj['_name'], $m)) {
             $obj['department'] = $m[0];
         }
         if (strpos($obj[0], 'не обслуживаются')) {
             $obj['disused'] = 'yes';
             $obj['opening_hours'] = '';
         }
         // заменяем координаты с сайта сбербанка на геокодированные
         $geocoder = new Geocoder();
         $obj = array_merge($obj, $geocoder->getCoordsByAddress($obj['_addr']));
         $this->addObject($this->makeObject($obj));
     }
 }
Esempio n. 2
0
 /** создание объекта с нужными полями */
 protected function makeObject($fields)
 {
     if (!empty($fields['_addr'])) {
         $fields['_addr'] = trim(strip_tags($fields['_addr']));
     }
     // добавляем координаты
     if (empty($fields['lat']) && !empty($fields['_addr'])) {
         $geocoder = new Geocoder();
         $fields += $geocoder->getCoordsByAddress($fields['_addr']);
     }
     $obj = array();
     foreach ($this->fields as $k => $v) {
         if (isset($fields[$k]) && $fields[$k] !== '') {
             $obj[$k] = '' . $fields[$k];
         } else {
             if (is_array($v)) {
                 $v = @$v[$this->region];
             }
             if ($v) {
                 $obj[$k] = '' . $v;
             }
         }
     }
     return $obj;
 }