Example #1
0
 private function parseReview($fieldName, Query $domDocument)
 {
     $query = 'div.prod_rvw time';
     // Review selector
     foreach ($domDocument->execute($query) as $result) {
         // Parse review date
         $this->content[$fieldName][] = date('d-m-y', strtotime($result->textContent));
     }
     $result = $domDocument->execute('span.js-prod-rvw-view-more');
     // Is more reviews button set
     if ($result->count() > 0) {
         $result = $result->offsetGet(0);
         $pageType = $result->getAttribute('data-page-type');
         $total = $result->getAttribute('data-total');
         if ($total > count($this->content[$fieldName])) {
             //Can get more reviews
             $cookie = Cookies::fromResponse($this->response, $this->url);
             $this->loader->resetParameters();
             $href = '/submit_review.php';
             if (!parse_url($href, PHP_URL_HOST)) {
                 $urlHost = parse_url($this->url, PHP_URL_HOST);
                 $urlScheme = parse_url($this->url, PHP_URL_SCHEME) . '://';
                 $href = $urlScheme . $urlHost . $href;
             }
             $this->loader->setParameterPost(array('action' => $this->getReviewAction($pageType), 'type' => $result->getAttribute('data-type'), 'id' => $result->getAttribute('data-id'), 'offset' => count($this->content[$fieldName])));
             $cookies = new Cookies();
             foreach ($cookie->getAllCookies() as $cookieRaw) {
                 //Zend Cookies Error hack
                 /** @var SetCookie $cookieRaw */
                 if ($cookieRaw->getDomain() != null) {
                     $cookies->addCookie($cookieRaw);
                 }
             }
             $this->loader->addCookie($cookies->getMatchingCookies($this->loader->getUri()));
             $this->loader->setUri($href);
             $request = $this->loader->getRequest();
             $request->getHeaders()->addHeaderLine('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
             $request->getHeaders()->addHeaderLine('X-Requested-With', ' XMLHttpRequest');
             $request->setContent($request->getPost()->toString());
             $this->response = $this->loader->setMethod('POST')->send();
             $body = $this->response->getBody();
             $domDocumentNew = new Query($body);
             if ($domDocumentNew->execute($query)->count() == 0) {
                 foreach ($domDocumentNew->execute($query) as $result) {
                     // Parse review date
                     $this->content[$fieldName][] = date('d-m-y', strtotime($result->textContent));
                 }
                 return false;
             } else {
                 $this->parseReview($fieldName, $domDocument);
             }
         }
     }
     return true;
 }