/** * @param Store $store * * @return int */ public function fetchStorePrice(Store $store) { $client = new Http(); /** @var \Symfony\Component\DomCrawler\Crawler $crawler */ $crawler = $client->request('GET', $store->getUrl()); /** @var \Symfony\Component\BrowserKit\Response $response */ $response = $client->getResponse(); if ($response->getStatus() != 200) { throw new \RuntimeException('Request failed "' . $store->getUrl() . '" (' . $response->getStatus() . ')'); } $element = $crawler->filter($store->getSelector()); $selectorValue = $store->getSelectorValue(); switch ($selectorValue) { case 'innerHTML': $value = $element->html(); break; default: $value = $element->attr($selectorValue); break; } return $this->getPriceValue($value); }
public function init() { setlocale(LC_MONETARY, $this->config['locale']); foreach ($this->config['product'] as $productData) { $product = new Product(); $product->setName($productData['name']); $product->setPictureUrl($productData['picture']); foreach ($productData['store'] as $storeData) { $store = new Store(); $store->setName($storeData['name']); $store->setUrl($storeData['url']); $selectorData = $storeData['selector']; $store->setSelector($selectorData['path']); $store->setSelectorValue($selectorData['value']); $store->setProduct($product); $product->addStore($store); } $this->addProduct($product); } }