
У нас есть текст фрейма поделиться, но нужно получить картинку превью.
Для этого нам нужно выпарсить ID видео и подставить в нужную ссылку:
Youtube генерирует несколько таких ссылок:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg
Что соответствует размерам и аналогично ссылкам в том же порядке:
По умолчанию:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg
Для картинок в высоком качестве:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
Среднее качество:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Стандартный размер картинки:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Максимальный размер картинки:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Просто выбираем подходящую ссылку.
Я парсил из кода следующей регуляркой:
//кусок кода выбирающий превью для ютуба
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $this->body, $matches);
//preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&"'>]+)/", $this->body, $matches);
if (!empty($matches[1])) $vid_id = $matches[1];
if (!empty($vid_id)) return "http://img.youtube.com/vi/".$vid_id."/0.jpg";
Такой код вернет нам ссылку с подставленным айди видео, что нам и требовалось.