Example #1
0
 /**
  * Get array for an id
  * @param integer $id Menu Id
  * @return array Menu
  */
 public function getArrayData($id)
 {
     $id = intval($id);
     # Test id
     if (empty($id)) {
         $error = new ReceiverError();
         return $error->define('Bad request', 400);
     }
     $request = $this->client->get('/rss-menu-' . $id . '.htm');
     $resource = $request->getResource();
     # Test Code
     if (!$resource->code(200)) {
         $error = new ReceiverError();
         return $error->define('Impossible to contact distant website', 500);
     }
     # Get XML
     $content = $resource->getContent();
     $content = mb_convert_encoding($content, mb_internal_encoding(), 'CP1252');
     $rss = simplexml_load_string($content, 'SimpleXMLElement', LIBXML_NOCDATA);
     libxml_use_internal_errors(true);
     # Get all menu
     $items = $rss->channel[0]->item;
     $menus = array();
     foreach ($items as $item) {
         $description = trim((string) $item->description);
         if ($description != 'Restaurant fermé') {
             $menu = array();
             $menu['meals'] = array_values(array_filter(array_map('trim', explode('<br />', $description)), 'strlen'));
             $title = trim((string) $item->title);
             # Date Calcul
             $dateArray = explode(' ', $title);
             $dateTime = new \DateTime();
             $date = array_map('trim', explode('/', $dateArray[2]));
             $dateTime->setDate($date[2], $date[1], $date[0]);
             $start = clone $dateTime;
             $end = clone $dateTime;
             if ($dateArray[1] == 'midi') {
                 $start->setTime(11, 30);
                 $end->setTime(13, 15);
             } else {
                 $start->setTime(18, 30);
                 $end->setTime(19, 45);
             }
             $menu['start'] = $start->getTimestamp();
             $menu['end'] = $end->getTimestamp();
             $menu['rss'] = array('title' => $title, 'link' => trim((string) $item->link), 'pubDate' => trim((string) $item->pubDate));
             $menus[] = $menu;
         }
     }
     return $menus;
 }
Example #2
0
 /**
  * Parse to array
  * @return array
  */
 protected function parsing()
 {
     # Get the page
     $page = $this->page->getContent();
     $oldPage = $page;
     if (empty($page)) {
         $error = new ReceiverError();
         return $error->define('Not found', 404);
     }
     # Clean the page
     $page = preg_replace('#(.+)\\<table\\>(.+)\\<\\/table\\>(.+)#s', '<table>$2</table>', $page);
     $page = preg_replace('#\\<tr class\\=\\"subHeader1\\"\\>(.+)\\<\\/tr\\>#sU', '', $page);
     $page = preg_replace('#\\<a href\\=\\"javascript\\:ev\\(([0-9]+)\\)\\"\\>([^\\<\\/a\\>]+)\\<\\/a\\>#sU', '$2', $page);
     if ($page === $oldPage) {
         $error = new ReceiverError();
         return $error->define('Bad group ID', 400);
     }
     # Put in Dom
     $dom = new \DOMDocument();
     libxml_use_internal_errors(true);
     $dom->loadHTML($page);
     # Get values
     $raws = $dom->getElementsByTagName('tr');
     $matieres = array();
     foreach ($raws as $raw) {
         $cells = $raw->getElementsByTagName('td');
         $cellData = array();
         # Get cells values
         foreach ($cells as $cell) {
             $cellData[] = $cell->nodeValue;
         }
         # Transform to timestamp
         $dayMonthYear = explode('/', $cellData[0]);
         $hourMin = explode('h', $cellData[4]);
         $duration = str_replace('min', '', $cellData[5]);
         $duration = explode('h', $duration);
         if (preg_match('#min#', $cellData[5])) {
             # There is minutes
             if (!isset($duration[1])) {
                 $duration[1] = $duration[0];
                 $duration[0] = 0;
             }
         } else {
             if (preg_match('#h#', $cellData[5])) {
                 # There is hours but no mintes
                 if (!isset($duration[1])) {
                     $duration[1] = 0;
                 }
             } else {
                 # No specification about time format
                 $duration[0] = isset($duration[0]) ? $duration[0] : 0;
                 $duration[1] = isset($duration[1]) ? $duration[1] : 0;
             }
         }
         # Save Data
         $matiere = array();
         $matiere['code'] = trim($cellData[1]);
         $matiere['week'] = intval($cellData[2]);
         $matiere['start'] = mktime($hourMin[0], $hourMin[1], 0, $dayMonthYear[1], $dayMonthYear[0], $dayMonthYear[2]);
         $matiere['duration'] = $duration[0] * 60 * 60 + $duration[1] * 60;
         $matiere['end'] = $matiere['start'] + $matiere['duration'];
         $matiere['type'] = strtolower(trim($cellData[7]));
         $matiere['name'] = trim($cellData[12]);
         $matiere['teacher'] = trim($cellData[19]);
         $placeExtract = array();
         $placeExtract = explode('(', $cellData[20]);
         $matiere['place'] = trim($placeExtract[0]);
         $matiere['projector'] = false;
         $name = empty($matiere['name']) ? $matiere['code'] : $matiere['name'];
         $avec = empty($matiere['teacher']) ? '' : ' avec ' . $matiere['teacher'];
         $matiere['summary'] = $name . $avec;
         if (isset($placeExtract[1])) {
             # Seats calcul
             $capacityExtract = array();
             $capacityExtract = explode(')', $placeExtract[1]);
             if (preg_match('#([0-9]+)places#', $capacityExtract[0], $seats)) {
                 $matiere['seats'] = intval($seats[1]);
             }
             # There is a projector ?
             if (isset($capacityExtract[1])) {
                 if (preg_match('#vidéo\\.proj#', $capacityExtract[1])) {
                     $matiere['projector'] = true;
                 }
             }
         }
         $matieres[] = $matiere;
     }
     return $matieres;
 }