[이윰] 유튜브 플레이리스트(playlist) 썸네일 추출과 올바르게 적용하기
페이지 정보

짧은주소
-
https://yadolee.com/tip/905 주소복사
평점
본문
📝 유튜브 플레이리스트(playlist) 썸네일 추출과 올바르게 적용하기
유튜브에서 제공하는 플레이리스트(playlist) 공유 주소에는 세가지 패턴이 있다.
그러므로 언급된 문제점을 해결하기 위해선 YouTube Data API Key가 있어야 하며 YouTube Data API Key가 없다면 https://console.cloud.google.com/를 통해 Key를 발급받아야 한다.
YouTube Data API Key 발급 과정은 구글신을 통해 해결하도록 한다.
그누보드5/eyoom/classes/eyoom.class.php를 열어 // 동영상 경로로 부터 동영상정보 가져오기를 검색한다.
수정 전
// 동영상 key 추출하기을 검색한다.
수정 전
// 수집된 동영상 정보를 iframe source로 구현을 검색한다.
수정 전
URL로부터 동영상 이미지 경로를 찾기를 검색한다.
수정 전
- https://youtu.be/QNdFgAAXQ_c?list=PLsOL9rj0pde4hqwb4afL8yhq3cZUFuj3s
- https://www.youtube.com/watch?v=QNdFgAAXQ_c&list=PLsOL9rj0pde4hqwb4afL8yhq3cZUFuj3s
- https://www.youtube.com/playlist?list=PLsOL9rj0pde4hqwb4afL8yhq3cZUFuj3s
그러므로 언급된 문제점을 해결하기 위해선 YouTube Data API Key가 있어야 하며 YouTube Data API Key가 없다면 https://console.cloud.google.com/를 통해 Key를 발급받아야 한다.
YouTube Data API Key 발급 과정은 구글신을 통해 해결하도록 한다.
그누보드5/eyoom/classes/eyoom.class.php를 열어 // 동영상 경로로 부터 동영상정보 가져오기를 검색한다.
수정 전
private function video_from_soruce($src) {
$url = $src[0];
$video_url = trim(strip_tags($url));
$video_url = preg_replace('/amp;/','&',$video_url);
$info = $this->eyoom_host($video_url);
$host = $info['host'];
$query = $info['query'];
$video['host'] = $host;
수정 후
private function video_from_soruce($src) {
$url = $src[0];
$video_url = trim(strip_tags($url));
$video_url = preg_replace('/amp;/','&',$video_url);
$info = $this->eyoom_host($video_url);
if(isset($info['host'])) $host = $info['host'];
if(isset($info['query'])) $query = $info['query'];
$video['host'] = $host ?? '';
if(isset($host)) {
$explode_url = explode($host.'/',$url);
$src[1] = $explode_url[1] ?? '';
//watch?v=가 포함된 공유주소에서 watch?v=제거 후 동영상 key 추출하기
if(stripos($src[1], 'watch?v=') !== false) $src[1] = str_replace('watch?v=', '', $src[1]);
}
// 동영상 key 추출하기을 검색한다.
수정 전
case 'youtube.com':
if ($src[1]) {
$video['key1'] = $src[1];
} else {
$video['key1'] = $query['v'];;
}
break;
수정 후
case 'youtu.be':
case 'youtube.com':
if (isset($src[1]) && $src[1] && !(isset($query['list']) && $query['list'])) {
$video['key1'] = $src[1];
} else {
//유튜브 재생목록 가져오기
if(isset($query['v']) && $query['v']) {
$video['key1'] = $query['v'];
$explode_key = explode("list=",$video['key1']);
$video['key1'] = $explode_key[0];
$video['vlist'] = $explode_key[1];
} else {
if(isset($query['list'])) $video['vlist'] = $query['list'];
}
}
break;
// 수집된 동영상 정보를 iframe source로 구현을 검색한다.
수정 전
case 'youtu.be':
case 'youtube.com':
$vlist = $video['key2'] ? '&list='.$video['key2'] : '';
$source = '<iframe width="'.$video['width'].'" height="'.$video['height'].'" src="http://www.youtube.com/embed/'.$video['key1'].'?wmode=opaque&autohide=1'.$vlist.'" frameborder="0" allowfullscreen></iframe>';
break;
수정 후
case 'youtu.be':
case 'youtube.com':
if(isset($video['vlist']) && $video['vlist']) {
$vlist = '&list='.$video['vlist']; //유튜브 재생목록 가져오기
$source = '<iframe width="'.$video['width'].'" height="'.$video['height'].'" src="https://www.youtube.com/embed/?wmode=opaque&autohide=1&showinfo=0&modestbranding=1&rel=0&enablejsapi=1&vq=hd1080'.$vlist.'" frameborder="0" allowfullscreen></iframe>';
} else {
$source = '<iframe width="'.$video['width'].'" height="'.$video['height'].'" src="https://www.youtube.com/embed/'.$video['key1'].'?wmode=opaque&autohide=1&showinfo=0&modestbranding=1&rel=0&enablejsapi=1&vq=hd1080" frameborder="0" allowfullscreen></iframe>';
}
break;
URL로부터 동영상 이미지 경로를 찾기를 검색한다.
수정 전
case 'youtu.be':
case 'youtube.com':
$path_name = mb_substr($video['key1'],0,11,"utf-8");
$video['img_url'] = "http://img.youtube.com/vi/{$path_name}/maxresdefault.jpg";
break;
수정 후
case 'youtu.be':
case 'youtube.com':
$path_name = mb_substr($video['key1'],0,11,"utf-8");
if(isset($video['key1']) && $video['key1']) {
$video['img_url'] = "https://img.youtube.com/vi/{$path_name}/maxresdefault.jpg";
} else {
$url = 'https://www.googleapis.com/youtube/v3/playlists?part=snippet&id='.$video['vlist'].'&key=YouTube Data API Key';
$data = $this->curl_web_scripping($url);
$json = json_decode($data,true);
//플레이리스트 썸네일 추출 용 Json 데이타에 maxresdefault.jpg 값이 존재하면 maxresdefault.jpg를 이용해 썸네일을 생성하고 존재하지 않으면 sddefault.jpg를 이용해 생성
$maxres = $json['items'][0]['snippet']['thumbnails']['maxres']['url'];
$standard = $json['items'][0]['snippet']['thumbnails']['standard']['url'];
if(isset($maxres)) $video['img_url'] = $maxres;
else $video['img_url'] = $standard;
}
break;
📌플레이리스트(playlist)가 아닌 단일 동영상이 올바르게 나타나지 않는 문제 해결
📌php8.x 대응 수정
📌글 작성 시에만 적용되던 유튜브 썸네일 생성 개선하기를 글 수정 시와 더불어 플레이리스트(playlist) 썸네일과 단일 동영상 간의 썸네일 교차 변경이 적용되도록 수정
📌2021년 9월 1일
- watch?v=가 포함된 공유주소에서 watch?v=제거 후 동영상 key 추출하기
- 플레이리스트(playlist) 썸네일 추출 용 Json 데이타에 maxresdefault.jpg 값이 존재하면 maxresdefault.jpg를 이용해 썸네일을 생성하고 존재하지 않으면 sddefault.jpg를 이용해 생성
끌어올림|2021.09.01 10:20|횟수 2 회
추천인 3

레벨 147
경험치 3,222,583
Progress Bar 7.45%
- 가입일 : 2015-03-10 12:21:44
- 서명 : 인간에게 가장 큰 선물은
자기 자신에게 기회를 주는 것이다.
- 크리스 가드너, Chris Gardner -
- 자기소개 : There's never a shortcut to happiness.
-
[이슈와 관심] 미약하나마 동참했습니다2025-05-04
-
[생활 정보] 음 180원 다른 운을 기대해봐야겠네요2025-04-26
-
[생활 정보] 나라가 혼돈의 시기를 겪다 보니 봄을 만끽할 겨를 조차 느낄 수 없었네요 정보 감사합니다2025-04-07
-
[생활 정보] 새해 복 많이 받으십시오2025-01-31
-
[자유 게시판] 하늘구장님과 내사랑님 그리고 회원 여러분들 모두의 가정과 일터에 행복과 행운이 가득한 한 해가 되시길 진심으로 기원드립니다 새해 복 많이 받으세요2025-01-27
-
[훈훈과 감동 이야기] 반려자를 옛스럽고 정겹게 표현한 말이 옆지기라고 한다지요 함께 같은 방향을 바라보며 인생을 사는 것이 크나큰 행복이라 생각합니다2025-01-26
-
[이슈와 관심] 페이스북에서 iframe의 부모 페이지에 접근할 수 있도록 CORS(Cross-Origin Resource Sharing) 정책을 설정해줘야 하는 부분이라 이 오류를 해결할 순 없을 것 같습니다 꼼수라면 상단 맨 왼편 프로필 이미지 오른편 포스팅 시간에 마우스 호버를 하게 되면 말풍선이 뜨며 스크립트 오류가 일어나고 그로 인해 제어가 가능해 집니다 참고하세요2025-01-13
-
[생활 정보] 해마다 도움을 받습니다 올해도 감사함을 전합니다2025-01-10
댓글7
내사랑님의 댓글
축하합니다. 지뢰폭탄 제거로 11경험치를 획득하였습니다.
하늘구장님의 댓글
shadow2fox님의 댓글
하늘구장님의 댓글
내사랑님의 댓글
축하합니다. 첫 댓글로 18경험치를 획득하였습니다.
shadow2fox님의 댓글
내사랑님의 댓글