카테고리 글 목록: CodeIgniter

[PHP] Youtube 썸네일 주소 가져오는 헬퍼

Youtube Video ID를 이용해 썸네일을 가져올 때 매번 구글링을 하다가 헬퍼로 묶어보았습니다. CI용 헬퍼로 작업했지만 CI 헬퍼가 다 그렇듯 굳이 CI가 아니더라도 활용 가능합니다.

유투브 영상 http://youtu.be/rGAgCKV1xMg에 대한 썸네일은

  • http://img.youtube.com/vi/rGAgCKV1xMg/0.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/1.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/2.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/3.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/default.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/hqdefault.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/mqdefault.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/sddefault.jpg
  • http://img.youtube.com/vi/rGAgCKV1xMg/maxresdefault.jpg

입니다.

헬퍼로 만들어 놓으면 코드 어시스트의 도움을 받을 수 있습니다.

사용 예 )

echo get_yt_thumb( 'http://youtu.be/rGAgCKV1xMg' );
// >>​ http://img.youtube.com/vi/rGAgCKV1xMg/default.jpg
echo get_yt_thumb( 'http://youtu.be/rGAgCKV1xMg', 'hq' );
// >> http://img.youtube.com/vi/rGAgCKV1xMg/hqdefault.jpg
echo get_yt_thumb_hq( 'https://www.youtube.com/watch?v=rGAgCKV1xMg' );
// >> http://img.youtube.com/vi/rGAgCKV1xMg/hqdefault.jpg

Video ID 추출을 위한 get_video_id 부분은 좀 더 좋은 처리방법이 있을 것도 같은데… 의견 주시면 감사히 받겠습니다.
아래는 헬퍼 코드 전체입니다.

/**
 * Get Video ID
 * 유투브 주소에서 Video ID를 추출합니다.
 *
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists( 'get_video_id' ) )
{
	function get_video_id( $str )
	{
		if( substr( $str, 0, 4 ) == 'http' )
		{
			if( strpos( $str, 'youtu.be' ) )
			{
				return array_pop( explode( '/', $str ) );
			}
			else if( strpos( $str, '/embed/' ) )
			{
				return array_pop( explode( '/', $str ) );
			}
			else if( strpos( $str, '/v/' ) )
			{
				return array_pop( explode( '/', $str ) );
			}
			else
			{
				$params = explode( '&', array_shift( explode( '#', array_pop( explode( '?', $str ) ) ) ) );
				foreach( $params as $data )
				{
					$arr = explode( '=', $data );
					if( $arr[ 0 ] == 'v' )
					{
						return $arr[ 1 ];
					}
				}
			}
		}
		else
		{
			return $str;
		}

		return '';
	}
}

/**
 * Get Thumbnail URL
 * 썸네일 주소를 가져옵니다. 기본값은 default 입니다.
 *
 * @param $url_or_id
 * @param $type
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb' ) )
{
	function get_yt_thumb( $url_or_id, $type )
	{
		switch( $type )
		{
			case '0' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/0.jpg';
				break;
			case '1' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/1.jpg';
				break;
			case '2' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/2.jpg';
				break;
			case '3' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/3.jpg';
				break;
			case 'hq' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/hqdefault.jpg';
				break;
			case 'mq' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/mqdefault.jpg';
				break;
			case 'sd' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/sddefault.jpg';
				break;
			case 'maxres' :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/maxresdefault.jpg';
				break;
			default :
				return '//img.youtube.com/vi/'.get_video_id( $url_or_id ).'/default.jpg';
		}
	}
}

/**
 * Get Thumbnail URL 0
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_0' ) )
{
	function get_yt_thumb_0( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, '0' );
	}
}

/**
 * Get Thumbnail URL 1
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_1' ) )
{
	function get_yt_thumb_1( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, '1' );
	}
}

/**
 * Get Thumbnail URL 2
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_2' ) )
{
	function get_yt_thumb_2( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, '2' );
	}
}

/**
 * Get Thumbnail URL 3
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_3' ) )
{
	function get_yt_thumb_3( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, '3' );
	}
}

/**
 * Get Thumbnail URL HQ
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_hq' ) )
{
	function get_yt_thumb_hq( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, 'hq' );
	}
}

/**
 * Get Thumbnail URL MQ
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_mq' ) )
{
	function get_yt_thumb_mq( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, 'mq' );
	}
}

/**
 * Get Thumbnail URL SD
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_sd' ) )
{
	function get_yt_thumb_sd( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, 'sd' );
	}
}

/**
 * Get Thumbnail URL Max Resolution
 *
 * @param $url_or_id
 * @return string
 */
if ( ! function_exists( 'get_yt_thumb_maxres' ) )
{
	function get_yt_thumb_maxres( $url_or_id )
	{
		return get_yt_thumb( $url_or_id, 'maxres' );
	}
}