/** * @param Crawler $crawler * @return ExtractedVideo */ public function extract(Crawler $crawler) { $video = new ExtractedVideo(); $video->setEmbedUrl($this->url); $urlParts = explode('/', $this->url); $videoId = end($urlParts); $thumbnailUrl = 'https://i.ytimg.com/vi/' . $videoId . '/maxresdefault.jpg'; $video->setThumbnailByUrl($thumbnailUrl); return $video; }
/** * @param Crawler $crawler * @return ExtractedVideo */ public function extract(Crawler $crawler) { $video = new ExtractedVideo(); $video->setEmbedUrl(trim($crawler->filter("meta[property='og:video:url']")->attr('content'))); $video->setDescription(trim($crawler->filter('#eow-description')->html())); $video->setTitle(trim($crawler->filter('#eow-title')->html())); $video->setThumbnailByUrl(trim($crawler->filter("meta[property='og:image']")->attr('content'))); $publishedText = str_replace('Published on ', '', $crawler->filter("#watch-uploader-info")->text()); $video->setPublishedOn(\DateTime::createFromFormat('M j, Y', $publishedText)); $video->setStats($this->extractStats($crawler)); $video->setOwner($this->extractOwner($crawler)); return $video; }
/** * @param Crawler $crawler * @return ExtractedVideo */ public function extract(Crawler $crawler) { $video = new ExtractedVideo(); $video->setEmbedUrl($this->url); preg_match_all('/https?:\\/\\/i\\.vimeocdn\\.com\\/video\\/([0-9]*)_([0-9]*)\\.([a-z]*)/i', $crawler->filter('html')->html(), $matches); if (count($matches) == 4) { list($urls, $videoIds, $sizes, $extensions) = $matches; $url = $urls[0]; $size = $sizes[0]; foreach ($urls as $i => $url) { if ($sizes[$i] > $size) { $url = $urls[$i]; $size = $sizes[$i]; } } $video->setThumbnailByUrl($url); } return $video; }
/** * @param Crawler $crawler * @return ExtractedVideo */ public function extract(Crawler $crawler) { $oembedData = $this->getOEmbedData($crawler); $video = new ExtractedVideo(); if (is_array($oembedData) && isset($oembedData['description'])) { $video->setDescription($oembedData['description']); } else { $video->setDescription(trim($crawler->filter(".description_wrapper")->text())); } if (is_array($oembedData) && isset($oembedData['title'])) { $video->setTitle($oembedData['title']); } else { $video->setTitle(trim($crawler->filter("h1.js-clip_title")->html())); } if (is_array($oembedData) && isset($oembedData['thumbnail_url'])) { $thumbnail = ExtractedImageFactory::createFromUrl($oembedData['thumbnail_url'], isset($oembedData['thumbnail_width']) ? $oembedData['thumbnail_width'] : null, isset($oembedData['thumbnail_height']) ? $oembedData['thumbnail_height'] : null); $video->setThumbnail($thumbnail); } if (is_array($oembedData) && isset($oembedData['html'])) { $doc = new DOMDocument(); $doc->loadHTML($oembedData['html']); /** @var DOMNodeList $iframes */ $iframes = $doc->getElementsByTagName('iframe'); if ($iframes->length > 0) { $video->setEmbedUrl($iframes->item(0)->getAttribute('src')); } } $publishedOn = $crawler->filter("time")->attr('datetime'); $publishedDatetime = new \DateTime($publishedOn); $video->setPublishedOn($publishedDatetime); $video->setStats($this->extractStats()); $video->setOwner($this->extractOwner($crawler, $oembedData)); return $video; }
/** * @param Crawler $crawler * @return \pmill\Extract\ExtractedImage[] */ public function extractVideos(Crawler $crawler) { $foundVideos = $crawler->filter("#primary-project-content .project-module-embed iframe")->extract(array('src')); $extract = new Extract(); /** @var ExtractedImage[] $videos */ $videos = array(); foreach ($foundVideos as $url) { $providerClassName = $extract->findProvider($url); if ($providerClassName == '\\pmill\\Extract\\Provider\\Basic') { $video = new ExtractedVideo(); $video->setEmbedUrl($url); } else { $pageFetcher = new Curl(); $videoPageContent = $pageFetcher->fetch($url); $videoCrawler = new Crawler($videoPageContent); /** @var \pmill\Extract\Interfaces\ExtractProvider $provider */ $provider = new $providerClassName(); $provider->setUrl($url); $video = $provider->extract($videoCrawler); } $videos[] = $video; } return $videos; }