<?php /** * Created by IntelliJ IDEA. * User: nosko * Date: 1/26/13 * Time: 10:57 PM * To change this template use File | Settings | File Templates. */ class Parser { private $restaurants = array(); private $logger; function __construct(iOutput $logger, $restaurants) { $this->logger = $logger; if (empty($restaurants) || !is_array($restaurants)) { throw new InvalidArgumentException("Array argument required"); } $this->restaurants = $restaurants; } public function parse() { foreach ($this->restaurants as $restaurant) { /** @var $restaurant Restaurant */ $source = file_get_contents($restaurant->getUrl()); if ($source === false) { continue; } $dom = new DOMDocument(); @$dom->loadHTML($source); $xpath_obj = new DOMXPath($dom); $this->logger->addHeader($restaurant); foreach ($restaurant->getXpaths() as $name => $xpath) { $found = $xpath_obj->query($xpath); if ($found === false || $found->length === 0) { continue; } $this->logger->addMealHeader($name); $this->logger->startListing(); $parsed = $restaurant->runCallbackParser($found, $this->logger); if ($parsed === false) { $exists = false; foreach ($found->item(0)->childNodes as $elem) { $meal = trim($elem->nodeValue); if (!empty($meal)) { $this->logger->addMeal($meal); $exists = true; } } } $this->logger->endListing(); if ($parsed === '' OR (isset($exists) AND !$exists)) { $this->logger->emptyRestaurant(); } } } } }