public function parse(GoogleDom $dom, \DomElement $node, IndexedResultSet $resultSet)
 {
     $xpath = $dom->getXpath();
     $aTag = $xpath->query("descendant::h3[@class='r'][1]/a", $node)->item(0);
     if (!$aTag) {
         return false;
     }
     $destinationTag = $xpath->query("descendant::div[@class='f kv _SWb']/cite", $node)->item(0);
     $data = ['title' => $aTag->nodeValue, 'url' => $dom->getUrl()->resolveAsString($aTag->getAttribute('href')), 'destination' => $destinationTag ? $destinationTag->nodeValue : null, 'description' => null, 'videoLarge' => true, 'thumb' => null, 'videoCover' => function () use($dom, $node) {
         $imageTag = $dom->cssQuery('._ELb img', $node)->item(0);
         if ($imageTag) {
             return MediaFactory::createMediaFromSrc($imageTag->getAttribute('src'));
             // TODO 1p gif ?
         } else {
             return null;
         }
     }];
     $resultSet->addItem(new BaseResult([NaturalResultType::CLASSICAL_VIDEO, NaturalResultType::CLASSICAL], $data));
 }
 public function parse(GoogleDom $dom, \DomElement $node, IndexedResultSet $resultSet)
 {
     $data = $this->parseNode($dom, $node);
     $resultTypes = [NaturalResultType::CLASSICAL];
     // classical result can have a video thumbnail
     $thumb = $dom->getXpath()->query("descendant::g-img[@class='_ygd']/img", $node)->item(0);
     if ($thumb) {
         $resultTypes[] = NaturalResultType::CLASSICAL_ILLUSTRATED;
         $data['thumb'] = function () use($thumb) {
             if ($thumb) {
                 return MediaFactory::createMediaFromSrc($thumb->getAttribute('src'));
             } else {
                 return null;
             }
         };
     }
     $videoDuration = $dom->cssQuery('.vdur', $node);
     if ($videoDuration->length == 1) {
         $resultTypes[] = array_unshift($resultTypes, NaturalResultType::CLASSICAL_VIDEO);
         $data['videoLarge'] = false;
     }
     $item = new BaseResult($resultTypes, $data);
     $resultSet->addItem($item);
 }
 /**
  * @param GoogleDOM $googleDOM
  * @param \DOMElement $imgNode
  * @return array
  */
 private function parseItem(GoogleDOM $googleDOM, \DOMElement $imgNode)
 {
     $data = ['sourceUrl' => function () use($imgNode, $googleDOM) {
         $img = $googleDOM->getXpath()->query('descendant::img', $imgNode)->item(0);
         if (!$img) {
             return $googleDOM->getUrl()->resolve('/');
         }
         return $googleDOM->getUrl()->resolveAsString($img->getAttribute('title'));
     }, 'targetUrl' => function () use($imgNode, $googleDOM) {
         return $googleDOM->getUrl()->resolveAsString($imgNode->getAttribute('href'));
     }, 'image' => function () use($imgNode, $googleDOM) {
         $img = $googleDOM->getXpath()->query('descendant::img', $imgNode)->item(0);
         if (!$img) {
             return '';
         }
         return MediaFactory::createMediaFromSrc($img->getAttribute('src'));
     }];
     return new BaseResult(NaturalResultType::IMAGE_GROUP_IMAGE, $data);
 }