Парсер YouTube на PHP

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Парсер YouTube на PHP

Сообщение Slash » Пт июл 29, 2016 4:59 pm

На досуге написал класс, который парсит страницу видео с YouTube и возвращает информацию о видео ролике. Я постарался, чтобы класс собирал, как можно больше информации о видеоролике. Выкладываю, возможно кому-то это будет полезным.
Сам класс выглядит так:

Код: Выделить всё

class youtube
{
    public $data;

    public function __construct()
    {
        $this->data = array();
    }

    public function common($url)
    {
        $this->data['url'] = $url;

        $this->parse();
        $this->title();
        $this->description();
        $this->image();
        $this->duration();
        $this->embed();

        return $this;
    }

    private function parse()
    {
        $this->data['html'] = file_get_contents($this->data['url']);

        return $this;
    }

    private function title()
    {
        preg_match('|<meta property="og:title" content="(.*?)">|', $this->data['html'], $title);
        if ($title)
        {
            $this->data['title'] = $title[1];

            return $this;
        }

        return false;
    }

    private function description()
    {
        preg_match('|<meta property="og:description" content="(.*?)">|', $this->data['html'], $description);
        if ($description)
        {
            $this->data['description'] = $description[1];

            return $this;
        }

        return false;
    }

    private function image()
    {
        preg_match('|<meta property="og:image" content="(.*?)">|', $this->data['html'], $image);
        if ($image)
        {
            $this->data['image'] = $image[1];
            $this->data['img']   = '<img width="120" height="90" src="' . $image[1] . '">';

            return $this;
        }

        return false;
    }

    private function duration()
    {
        preg_match('|<meta itemprop="duration" content="(.*?)">|', $this->data['html'], $duration);
        if ($duration)
        {
            $duration    = preg_replace('|PT(.*?)M(.*?)S|', '$1:$2', $duration[1]);
            list($m, $s) = explode(':', $duration);
            $duration    = ((mb_strlen($m) == 1) ? '0' . $m : $m) . ':' . ((mb_strlen($s) == 1) ? '0' . $s : $s);

            $this->data['duration'] = $duration;

            return $this;
        }

        return false;
    }

    private function embed()
    {
        $embed = explode('/', $this->data['url']);
        $embed = end($embed);
        if (preg_match('|=|', $embed))
        {
            $embed = explode('=', $embed);
            $embed = end($embed);
        }

        $this->data['embed']  = 'https://www.youtube.com/embed/' . $embed;        
        $this
->data['iframe'] = '<iframe width="420" height="315" src="https://www.youtube.com/embed/' . $embed . '" frameborder="0" allowfullscreen></iframe>';
    }

Работа с классом. Подключаем файл с классом, затем вызываем его:

Код: Выделить всё

$youtube = new youtube;
$video   = $youtube->common('url video'); 

Теперь у нас есть девять переменных с информацией о видеоролике. И так, что это за переменные:
  1. $video->data['url'] - Содержит адрес данного видео, адрес, что был указан при обращении к объекту common.
  2. $video->data['title'] - Заголовок видео, то есть название видеоролика.
  3. $video->data['description'] - Описание видеоролика.
  4. $video->data['image'] - Адрес картинки (превьюшки) для видеоролика.
  5. $video->data['img'] - Картинка, размером 120 на 90 пикселей.
  6. $video->data['duration'] - Продолжительность видеоролика, минуты и секунды.
  7. $video->data['embed'] - Адрес видео для вставки в тег iframe.
  8. $video->data['iframe'] - Плеер с указанным видеороликом.
  9. $video->data['html'] - Исходный код страницы, на случай, если надо получить, что-то ещё.
Класс писал на "скорую руку". Если найдете ошибку, пожалуйста сообщите.
Реклама

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость