11.07.2017 08:52:17 am
На досуге написал класс, который парсит страницу видео с 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');
Теперь у нас есть девять переменных с информацией о видеоролике. И так, что это за переменные:
$video->data['url']
- Содержит адрес данного видео, адрес, что был указан при обращении к объекту common.$video->data['title']
- Заголовок видео, то есть название видеоролика.$video->data['description']
- Описание видеоролика.$video->data['image']
- Адрес картинки (превьюшки) для видеоролика.$video->data['img']
- Картинка, размером 120 на 90 пикселей.$video->data['duration']
- Продолжительность видеоролика, минуты и секунды.$video->data['embed']
- Адрес видео для вставки в тег iframe.$video->data['iframe']
- Плеер с указанным видеороликом.$video->data['html']
- Исходный код страницы, на случай, если надо получить, что-то ещё.
Класс писал на "скорую руку". Если найдете ошибку, пожалуйста сообщите.
- Жалоба