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); }