Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/Embed/Providers/OpenGraph.php
Строк: 113
<?php

namespace EmbedProviders;

use 
EmbedAdaptersAdapter;
use 
EmbedUtils;

/**
 * Provider to get the data from the Open Graph elements in the HTML
 */
class OpenGraph extends Provider
{
    
/**
     * {@inheritdoc}
     */
    
public function __construct(Adapter $adapter)
    {
        
parent::__construct($adapter);

        if (!(
$html $adapter->getResponse()->getHtmlContent())) {
            return;
        }

        foreach (
$html->getElementsByTagName('meta') as $meta) {
            
$name trim(strtolower($meta->getAttribute('property')));
            
$value $meta->getAttribute('content');

            if (empty(
$name)) {
                
$name trim(strtolower($meta->getAttribute('name')));
            }

            if (empty(
$name) || empty($value)) {
                continue;
            }

            if (
strpos($name'og:') === 0) {
                
$name substr($name3);
            } elseif (
                    
strpos($name'article:') !== 0
                 
&& strpos($name'image:') !== 0
                 
&& strpos($name'video:') !== 0
                 
&& strpos($name'book:') !== 0
                 
&& strpos($name'music:') !== 0
                 
&& strpos($name'profile:') !== 0
            
) {
                continue;
            }


            switch (
$name) {
                case 
'image':
                case 
'image:url':
                case 
'image:secure_url':
                    
$this->bag->add('images'$value);
                    break;

                case 
'article:tag':
                case 
'video:tag':
                case 
'book:tag':
                    
$this->bag->add('tags'$value);
                    break;
                
                default:
                    
$this->bag->set($name$value);
            }
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function getTitle()
    {
        return 
$this->bag->get('title');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getDescription()
    {
        return 
$this->bag->get('description');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getType()
    {
        
$type $this->bag->get('type');

        if (
strpos($type':') !== false) {
            
$type substr(strrchr($type':'), 1);
        }

        switch (
$type) {
            case 
'video':
            case 
'photo':
            case 
'link':
            case 
'rich':
                return 
$type;

            case 
'article':
                return 
'link';
        }

        if (
$this->bag->has('video')) {
            return 
'video';
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function getCode()
    {
        
$names = ['video:secure_url''video:url''video'];

        foreach (
$names as $name) {
            if (
$this->bag->has($name)) {
                
$video $this->normalizeUrl($this->bag->get($name));

                if (!(
$videoPath parse_url($videoPHP_URL_PATH)) || !($type pathinfo($videoPathPATHINFO_EXTENSION))) {
                    
$type $this->bag->get('video:type');
                }

                switch (
$type) {
                    case 
'swf':
                    case 
'application/x-shockwave-flash':
                        return 
Utils::flash($video$this->getWidth(), $this->getHeight());

                    case 
'mp4':
                    case 
'ogg':
                    case 
'ogv':
                    case 
'webm':
                    case 
'application/mp4':
                    case 
'video/mp4':
                    case 
'video/ogg':
                    case 
'video/ogv':
                    case 
'video/webm':
                        
$images $this->getImagesUrls();

                        return 
Utils::videoHtml(current($images), $video$this->getWidth(), $this->getHeight());

                    case 
'text/html':
                        return 
Utils::iframe($video$this->getWidth(), $this->getHeight());
                }
            }
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function getUrl()
    {
        return 
$this->normalizeUrl($this->bag->get('url'));
    }

    
/**
     * {@inheritdoc}
     */
    
public function getTags()
    {
        return (array) 
$this->bag->get('tags') ?: [];
    }

    
/**
     * {@inheritdoc}
     */
    
public function getAuthorName()
    {
        return 
$this->bag->get('article:author') ?: $this->bag->get('book:author');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getProviderName()
    {
        return 
$this->bag->get('site_name');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getImagesUrls()
    {
        return 
$this->normalizeUrls($this->bag->get('images'));
    }

    
/**
     * {@inheritdoc}
     */
    
public function getWidth()
    {
        return 
$this->bag->get('image:width') ?: $this->bag->get('video:width');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getHeight()
    {
        return 
$this->bag->get('image:height') ?: $this->bag->get('video:height');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getPublishedTime()
    {
        return 
$this->bag->get('article:published_time')
            ?: 
$this->bag->get('article:modified_time')
            ?: 
$this->bag->get('video:release_date')
            ?: 
$this->bag->get('music:release_date');
    }

    
/**
     * {@inheritdoc}
     */
    
public function getProviderUrl()
    {
        return 
$this->bag->get('website');
    }
}
Онлайн: 0
Реклама