Esempio n. 1
0
File: Parser.php Progetto: n8b/VMN
 /**
  * Scrape metatags from DOM
  * @return array
  */
 public function dom()
 {
     $url = $this->url->getURL();
     $meta['url'] = $url;
     $meta['title'] = parse_url($url, PHP_URL_HOST);
     $meta['description'] = '';
     $html = $this->url->getContent();
     $doc = new DOMDocument();
     @$doc->loadHTML($html);
     // Get document title
     $node = $doc->getElementsByTagName('title');
     $title = $node->item(0)->nodeValue;
     if ($title) {
         $meta['title'] = $title;
     }
     // Get oEmbed content and canonical URLs
     $nodes = $doc->getElementsByTagName('link');
     foreach ($nodes as $node) {
         $rel = $node->getAttribute('rel');
         $href = $node->getAttribute('href');
         switch ($rel) {
             case 'icon':
                 $meta['icons'][] = $href;
                 break;
             case 'canonical':
                 $meta['canonical'] = $href;
                 break;
             case 'alternate':
                 $type = $node->getAttribute('type');
                 if ($type == 'application/json+oembed' || $type == 'text/json+oembed') {
                     $oembed_endpoint = $href;
                 }
                 break;
         }
     }
     if ($oembed_endpoint) {
         $oembed_handler = new UrlHandler($oembed_endpoint);
         $json = $oembed_handler->getContent();
         if ($json) {
             $oembed_params = json_decode($json, true);
             if ($oembed_params) {
                 foreach ($oembed_params as $key => $value) {
                     if (!$meta[$key]) {
                         $meta[$key] = $value;
                     }
                     if ($key == 'url') {
                         $meta['oembed_url'] = $value;
                     }
                     if ($key == 'thumbnail_url' && !$meta['oembed_url']) {
                         $meta['oembed_url'] = $value;
                     }
                 }
             }
         }
     }
     if ($title) {
         $meta['title'] = $title;
     }
     $nodes = $doc->getElementsByTagName('meta');
     if (!empty($nodes)) {
         foreach ($nodes as $node) {
             $name = $node->getAttribute('name');
             if (!$name) {
                 $name = $node->getAttribute('property');
             }
             if (!$name) {
                 continue;
             }
             $name = strtolower($name);
             $content = $node->getAttribute('content');
             switch ($name) {
                 default:
                     if ($name && !$meta[$name]) {
                         $name = str_replace(':', '_', $name);
                         $meta[$name] = $content;
                     }
                     break;
                 case 'title':
                 case 'og:title':
                 case 'twitter:title':
                     if (!$meta['title']) {
                         $meta['title'] = $content;
                     }
                     break;
                 case 'description':
                 case 'og:description':
                 case 'twitter:description':
                     if (!$meta['description']) {
                         $meta['description'] = $content;
                     }
                     break;
                 case 'keywords':
                     $meta['keywords'] = $content;
                     break;
                 case 'og:site_name':
                 case 'twitter:site':
                     if (!$meta['provider_name']) {
                         $meta['provider_name'] = $content;
                     }
                     break;
                 case 'og:type':
                     $meta['og_type'] = $content;
                     break;
                 case 'og:image':
                 case 'twitter:image':
                     $meta['thumbnails'][] = $content;
                     break;
             }
         }
     }
     if (count($meta['thumbnails'])) {
         // Display a thumbnail parsed from <meta> tags
         $meta['thumbnail_url'] = $meta['thumbnails'][0];
     } else {
         if (count($meta['icons'])) {
             // Display an icon parsed from <link> tags
             $meta['thumbnail_url'] = $meta['icons'][0];
         } else {
             $max_width = 0;
             $nodes = $doc->getElementsByTagName('img');
             foreach ($nodes as $node) {
                 $src = $node->getAttribute('src');
                 $width = $node->getAttribute('width');
                 if (!$meta['thumbnail_url'] || $width > $max_width) {
                     $meta['thumbnail_url'] = $src;
                     $max_width = $width;
                 }
             }
         }
     }
     /**
      * @todo: figure out what to do with relative URLs in DOM
      */
     if (!Validator::isImage($meta['thumbnail_url'])) {
         unset($meta['thumbnail_url']);
     }
     return $meta;
 }
Esempio n. 2
0
 /**
  * @covers ::setURL
  * @covers ::getURL
  */
 public function testSetURL()
 {
     $url = 'http://example.com';
     $this->object->setURL($url);
     $this->assertEquals($this->object->getURL(), $url);
 }
Esempio n. 3
0
File: Embedder.php Progetto: n8b/VMN
 /**
  * Prepare view/hook params
  * 
  * @param array $params Params to pass by default
  * @return array
  */
 public function prepareParams(array $params = array())
 {
     $embed_params = array_filter(array('src' => $this->url->getURL(), 'entity' => $this->getEntity(), 'meta' => $this->getMeta()));
     $params = array_merge($params, $embed_params);
     return $params;
 }