YouTube API에서 YouTube 동영상 미리보기 이미지를 얻으려면 어떻게해야하나요?


2397

YouTube 비디오 URL이있는 경우 PHP 및 cURL을 사용하여 YouTube API에서 연결된 미리보기 이미지를 얻는 방법이 있습니까?


다음은이 페이지의 많은 좋은 답변을 바탕으로 API를 핑하지 않고 URL 메소드에서 사용 가능한 최상의 축소판을 얻기 위해 만든 일부 PHP 함수입니다. gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

답변:


4609

각 YouTube 동영상에는 4 개의 생성 된 이미지가 있습니다. 그것들은 다음과 같이 예측 가능한 형식입니다 :

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg

목록의 첫 번째 이미지는 전체 크기 이미지이고 다른 이미지는 축소판 이미지입니다. 기본 썸네일 이미지 (즉, 하나 1.jpg, 2.jpg, 3.jpg)입니다 :

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

썸네일의 고품질 버전에는 다음과 유사한 URL을 사용하십시오.

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

HQ와 유사한 URL을 사용하여 중간 품질 버전의 썸네일도 있습니다.

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

썸네일의 표준 정의 버전의 경우 다음과 유사한 URL을 사용하십시오.

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

썸네일의 최대 해상도 버전의 경우 다음과 유사한 URL을 사용하십시오.

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

위의 모든 URL은 HTTP를 통해서도 사용할 수 있습니다. 또한 i3.ytimg.com위의 img.youtube.com예제 URL 대신 약간 짧은 호스트 이름이 작동 합니다.

또는 YouTube Data API (v3) 를 사용하여 미리보기 이미지를 얻을 수 있습니다.


27
경우 다른 사람이 바보 같은 실수를 그냥에서 - 당신은 사용할 수 없습니다 http://www.img.youtube.comhttp://img.youtube.com
인 Ciaran 필립스

36
@NickG mqdefault는 16 : 9
tomtastico

57
공식적으로 문서화되어 있습니까?
bjunix

14
고해상도 썸네일이 존재하지 않을 수도 있습니다.
Salman A

63
@ clami219도 거짓입니다-분명히 작동합니다 (2015-04) : i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , 진실 : sddefault그리고 maxresdefault항상 일부 비디오 는 가능하지 않습니다 ....
jave.web

398

YouTube Data API 를 사용 하여 동영상 미리보기 이미지, 캡션, 설명, 평가, 통계 등을 검색 할 수 있습니다 . API 버전 3에는 키 *가 필요합니다. 키를 얻고 비디오 : 목록 요청을 작성하십시오 .

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

PHP 코드 예

$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);

산출

object(stdClass)#5 (5) {
  ["default"]=>
  object(stdClass)#6 (3) {
    ["url"]=>
    string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
    ["width"]=>
    int(120)
    ["height"]=>
    int(90)
  }
  ["medium"]=>
  object(stdClass)#7 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
    ["width"]=>
    int(320)
    ["height"]=>
    int(180)
  }
  ["high"]=>
  object(stdClass)#8 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
    ["width"]=>
    int(480)
    ["height"]=>
    int(360)
  }
  ["standard"]=>
  object(stdClass)#9 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
    ["width"]=>
    int(640)
    ["height"]=>
    int(480)
  }
  ["maxres"]=>
  object(stdClass)#10 (3) {
    ["url"]=>
    string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
    ["width"]=>
    int(1280)
    ["height"]=>
    int(720)
  }
}

* 키가 필요할뿐만 아니라 API 요청 횟수에 따라 청구 정보를 묻는 메시지가 표시 될 수 있습니다. 그러나 하루에 수백만 건의 요청이 무료입니다.

소스 기사 .


6
참고 : 새로운 JSON 구조에 맞게 코드를 변경하지 않았습니다. getJSON의 코드가 잘못되었습니다. getJSON jsonc대신에 사용 했습니다 json. 잘못된 JSON 구조로 인해 실패했습니다.
mauris

5
첫 번째 예제 만을 사용할 수 있습니다 jsonc. jQuery와 PHP 예제는 반드시 사용해야 json합니다. 그리고 새로운 JSON 구조에 맞게 코드를 업데이트했습니다. 지금 코드를 사용하고 있으며 라이브로 작동 중입니다. 변경 사항을 읽지 않으면 작동하지 않는다고 말하지 마십시오. 감사!
mauris

7
jQuery와 PHP 예제는 반드시 json을 사용해야합니다 ... 참조를 제공 할 수 있습니까? 또한 특정 API 버전 번호 ( v=2)를 요청하면 API 변경이 처리됩니다.
살만 A

4
gdata 호출은 maxresdefault.jpg가 사용 가능한 비디오에 대해 mq / hq / sd 만 사용할 수 있는지 여부를 반환하지 않습니다.
Aaron

2
API v3은 매우 잘못 설명되어 있습니다. 샘플 코드를 제공하지만 "참조"섹션은 매우 짧습니다. 상대적으로 "명백한"것 중 일부는 극단적 인 해결 방법이 필요한 것 같습니다.
CashCow

256

아삽이 말한 것은 옳습니다. 그러나 모든 YouTube 동영상에 9 개의 미리보기 이미지가 모두 포함되어있는 것은 아닙니다. 또한 섬네일의 이미지 크기는 비디오에 따라 다릅니다 (아래 숫자는 하나를 기준으로 함).

존재하는 7 개의 썸네일이 있습니다.

| Thumbnail Name      | Size (px) | URL                                              |
|---------------------|-----------|--------------------------------------------------|
| Player Background   | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/0.jpg         |
| Start               | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/1.jpg         |
| Middle              | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/2.jpg         |
| End                 | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/3.jpg         |
| High Quality        | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg |
| Medium Quality      | 320x180   | https://i1.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg |
| Normal Quality      | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/default.jpg   |

또한 두 개의 다른 축소판 그림이있을 수도 있고 없을 수도 있습니다. 그들의 존재는 아마도 비디오가 고품질인지 아닌지에 달려있을 것입니다.

| Thumbnail Name      | Size (px) | URL                                                  |
|---------------------|-----------|------------------------------------------------------|
| Standard Definition | 640x480   | https://i1.ytimg.com/vi/<VIDEO ID>/sddefault.jpg     |
| Maximum Resolution  | 1920x1080 | https://i1.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg |

다음에서 축소판 및 기타 YouTube 정보를 검색하는 JavaScript 및 PHP 스크립트를 찾을 수 있습니다.

URL 또는 비디오 ID를 제출 하여 YouTube 비디오 정보 생성기 도구를 사용하여 YouTube 비디오 에 대한 모든 정보를 얻을 수도 있습니다 .


5
공식 YouTube 링크 img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg를 사용 하여 동일한 결과를 얻을 수도 있습니다. 여기서 mJ8tq8AnNis는 비디오 ID입니다
Ragaisis

4
때때로 어떤 사람은 존재하지 않는다 - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg이 비록 가짜입니다 i1.ytimg.com/vi/r5R8gSgedh4/0.jpg는 예를 들어 괜찮습니다.
NoBugs

이것을 게시 해 주셔서 감사합니다. 이 데이터의 출처가 있습니까? 맞지만 유튜브 / 구글의 링크를 찾고 싶습니다.
Jonathan Vanasco

@JonathanVanasco, 죄송합니다. 정확한 내용에 대한 공식 리소스를 의미한다면, 나는 모른다. 그리고 나는 그들의 관점에서 그런 것을 출판 할 목적이 없다고 생각합니다.
AGMG

4
"YouTube 비디오 정보 생성기"도구가 현재 작동하지 않습니다. 답을 편집 해보십시오.
giovannipds

74

YouTube API V3에서는 이러한 URL을 사용하여 미리보기 이미지를 얻을 수 있습니다. 품질에 따라 분류됩니다.

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg -   default
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - medium 
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - high
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/sddefault.jpg - standard

그리고 최대 해상도 ..

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

첫 번째 답변의 URL에 비해 이러한 URL의 한 가지 장점은 이러한 URL이 방화벽에 의해 차단되지 않는다는 것입니다.


3
이러한 이미지는 img 태그에 배치하는 가정 및 I 오른쪽 유튜브 동영상 ID와 링크를 포함하고 img 태그 안에 넣어 그냥 작업을 시도하고해야하기 때문에하지만 난 404 점점 계속 있습니까
Lion789

5
@ Lion789이 URL은 img 태그에 배치 될 때 제대로 작동합니다. 문제가 잘못된 비디오 ID이거나 요청 된 해상도를 사용할 수 없지만 이러한 오류와 함께 404를 얻지 못할 수 있습니다. img 태그.
Naren

2
API v2가 중지 된 후에도 URL이 계속 작동한다는 것이 확인 되었습니까?
Daniele B

1
@DanieleB이 URL은 여전히 ​​작동합니다. API v2 이후에 이러한 URL이 작동하는지 확인하는 방법을 알고 있습니까?
Naren

53

특정 동영상 ID에 대해 YouTube에서 가장 큰 이미지를 원한다면 URL은 다음과 같아야합니다.

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

API를 사용하여 기본 썸네일 이미지를 선택할 수 있습니다. 간단한 코드는 다음과 같아야합니다.

//Grab the default thumbnail image
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";

// Grab the third thumbnail image
$thumb2 = $thumbnail."2.jpg";

// Grab the fourth thumbnail image.
$thumb3 = $thumbnail."3.jpg";

// Using simple cURL to save it your server.
// You can extend the cURL below if you want it as fancy, just like
// the rest of the folks here.

$ch = curl_init ("$thumb1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata = curl_exec($ch);
curl_close($ch);

// Using fwrite to save the above
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');

// Write the file
fwrite($fp, $rawdata);

// And then close it.
fclose($fp);

2
0.jpg의 해상도는 480x360이고 maxresdefault.jpg의 해상도는 1280x720입니다.
Nico Haase

45

"검은 색 막대"를 없애고 YouTube처럼하는 경우 다음을 사용할 수 있습니다.

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp

.webp파일 확장자를 사용할 수 없으면 다음과 같이 할 수 있습니다.

https://i.ytimg.com/vi/<video id>/mqdefault.jpg

스케일링되지 않은 버전이 필요한 경우 maxresdefault대신을 사용하십시오 mqdefault.

참고 : 사용하려는 경우 가로 세로 비율에 대해 잘 모르겠습니다 maxresdefault.


2
많은 비디오에서 사용할 수 없습니다. 예 : i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG : _webp확장을 제거 하고로 변경 하면 작동합니다 .jpg. 실제 예 : i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , 종횡비가 확실하지 않습니다.
LuTz

34

YouTube에서 기존 이미지 만 가져 오는 기능을 만들었습니다.

function youtube_image($id) {
    $resolution = array (
        'maxresdefault',
        'sddefault',
        'mqdefault',
        'hqdefault',
        'default'
    );

    for ($x = 0; $x < sizeof($resolution); $x++) {
        $url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';
        if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {
            break;
        }
    }
    return $url;
}

32

에서 유튜브 데이터 API V3 , 당신은과 비디오의 썸네일을 얻을 수있는 개 -> 목록 기능. 에서 snippet.thumbnails. (키) , 기본, 중간 또는 높은 해상도 썸네일을 선택하고, 폭, 높이 및 URL을 얻을 수 있습니다.

썸네일-> 설정 기능으로 썸네일을 업데이트 할 수도 있습니다.

예를 들어 YouTube API 샘플 프로젝트를 확인할 수 있습니다 . ( PHP들 .)


1
나는이 그것을 할 수있는 올바른 방법 것 같다는 유튜브 API에 대한 구글 데브 관계 멤버에서 오는 년대 이후
아도니스 K. Kakoulidis을

31

비디오 섬네일의 URL이 포함 된 비디오 항목 을 얻을 수 있습니다 . 링크에 예제 코드가 있습니다. 또는 XML을 구문 분석하려면 여기에 정보가 있습니다 . 반환 된 XML media:thumbnail에는 축소판의 URL이 포함 된 요소가 있습니다.


2
simpleXML을 사용하여 가져올 수 없습니다. 꽤 어렵다!
Aditya MP

25
// Get image form video URL
$url = $video['video_url'];

$urls = parse_url($url);

//Expect the URL to be http://youtu.be/abcd, where abcd is the video ID
if ($urls['host'] == 'youtu.be') :

    $imgPath = ltrim($urls['path'],'/');

//Expect the URL to be http://www.youtube.com/embed/abcd
elseif (strpos($urls['path'],'embed') == 1) :

    $imgPath = end(explode('/',$urls['path']));

//Expect the URL to be abcd only
elseif (strpos($url,'/') === false):

    $imgPath = $url;

//Expect the URL to be http://www.youtube.com/watch?v=abcd
else :

    parse_str($urls['query']);

    $imgPath = $v;

endif;

2
이것은 나쁜 해결책입니다! 왜 Youtube api v3를 사용하지 않습니까?
mpgn

19

YouTube는 Google이 소유하고 있으며 Google은 다양한 화면 크기에 적합한 수의 이미지를 보유하기를 원하므로 이미지가 다른 크기로 저장됩니다. 미리보기 이미지의 모양에 대한 예는 다음과 같습니다.

저품질 썸네일 :

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

중간 품질 썸네일 :

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

고품질 썸네일 :

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

최대 품질 썸네일 :

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg

16

2 분 안에 YouTube API 버전 3 시작 및 실행

YouTube를 검색하고 관련 속성을 가져 오면됩니다.

  1. 공개 API 받기 - 이 링크는 좋은 방향을 제시합니다

  2. 아래 쿼리 문자열을 사용하십시오. URL 문자열에서 검색 쿼리 ( q = 로 표시 )는 예제 목적으로 스택 오버 플로우 입니다. 그런 다음 YouTube는 미리보기, 스 니펫, 작성자 등을 파싱 할 수있는 JSON 응답을 다시 보냅니다.

    https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE


16

또 다른 좋은 대안은 YouTube에서 지원 하는 oEmbed API 를 사용하는 것 입니다.

YouTube URL을 oEmbed URL에 추가하기 만하면 미리보기 이미지와 임베드 용 HTML 코드가 포함 된 JSON이 제공됩니다.

예:

http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ

당신에게 줄 것입니다 :

{
  "height":270,
  "width":480,
  "title":"example video for 2020",
  "thumbnail_width":480,
  "html":"...",
  "thumbnail_height":360,
  "version":"1.0",
  "provider_name":"YouTube",
  "author_url":"https:\/\/www.youtube.com\/channel\/UCza6VSQUzCON- AzlsrOLwaA",
  "thumbnail_url":"https:\/\/i.ytimg.com\/vi\/xUeJdWYdMmQ\/hqdefault.jpg",
  "author_name":"Pokics",
  "provider_url":"https:\/\/www.youtube.com\/",
  "type":"video"
}

자세한 내용 은 설명서를 읽으십시오 .


15

사용하다:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID**

위의 링크입니다. 이를 사용하여 비디오의 YouTube 특성을 찾을 수 있습니다. 특성을 찾은 후 선택한 카테고리의 비디오를 얻을 수 있습니다. 그런 다음 Asaph의 답변을 사용하여 선택한 비디오 이미지를 찾을 수 있습니다 .

위의 방법을 시도하면 YouTube API 에서 모든 것을 파싱 할 수 있습니다 .


14

이런 식으로 YouTube 미리보기 이미지를 사용했습니다.

$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_'  . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));

YouTube는 서버에서 직접 이미지를 포함하지 못합니다.



13

주어진 솔루션을 추가 / 확장하기 위해이 문제를 직접 겪었을 때 실제로 하나의 HTTP 요청으로 여러 YouTube 동영상 콘텐츠 (이 경우 축소판)를 가져올 수 있습니다.

Rest 클라이언트 (이 경우 HTTPFUL)를 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

<?php
header("Content-type", "application/json");

//download the httpfull.phar file from http://phphttpclient.com
include("httpful.phar");

$youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q");


$response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."")

->send();

print ($response);

?>

13

YouTube 데이터 API

YouTube는 예를 들어 Data API (v3)를 통해 모든 동영상에 대해 4 개의 생성 된 이미지를 제공합니다.

  1. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  2. https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg

  3. https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg

  4. https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg

API를 통해 이미지에 액세스하기

  1. 먼저 Google API Console 에서 공개 API 키를 받으십시오 .
  2. API 설명서 의 YouTube 미리보기 이미지 참조에 따라 snippet.thumbnails의 리소스에 액세스해야합니다.
  3. 이에 따라 다음과 같이 URL을 문구로 지정해야합니다.

    www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`

이제 비디오 ID와 API 키를 각각의 비디오 ID와 API 키로 변경하면 스 니펫 변수의 썸네일에 네 개의 링크를 제공하는 JSON 출력이 응답으로 표시됩니다 (모두 사용 가능한 경우).


13

parse_url , parse_str을 사용하여 YouTube 비디오 URL에서 비디오 ID를 가져온 다음 이미지의 예측 URL에 삽입 할 수 있습니다. 예측 URL을위한 YouTube에 감사합니다

$videoUrl = "https://www.youtube.com/watch?v=8zy7wGbQgfw";
parse_str( parse_url( $videoUrl, PHP_URL_QUERY ), $my_array_of_vars );
$ytID = $my_array_of_vars['v']; //gets video ID

print "https://img.youtube.com/vi/$ytID/maxresdefault.jpg";
print "https://img.youtube.com/vi/$ytID/mqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/hqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/sddefault.jpg";
print "https://img.youtube.com/vi/$ytID/default.jpg";

이 도구를 사용하여 YouTube 미리보기 이미지를 생성 할 수 있습니다

https://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails


11

YouTube 축소판을 위해 만든 간단한 PHP 함수와 유형은

  • 기본
  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault

 

function get_youtube_thumb($link,$type){

    $video_id = explode("?v=", $link);

    if (empty($video_id[1])){
        $video_id = explode("/v/", $link);
        $video_id = explode("&", $video_id[1]);
        $video_id = $video_id[0];
    }
    $thumb_link = "";

    if($type == 'default'   || $type == 'hqdefault' ||
       $type == 'mqdefault' || $type == 'sddefault' ||
       $type == 'maxresdefault'){

        $thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';

    }elseif($type == "id"){
        $thumb_link = $video_id;
    }
    return $thumb_link;}

10

공개 API를 사용하는 경우 가장 좋은 방법은 if명령문을 사용하는 것입니다.

동영상이 공개 또는 미등록 인 경우 URL 방법을 사용하여 미리보기 이미지를 설정합니다. 동영상이 비공개 인 경우 API를 사용하여 미리보기 이미지를 가져옵니다.

<?php
    if($video_status == 'unlisted'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Unlisted';
    }
    elseif($video_status == 'public'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-eye"></i>&nbsp;Public';
    }
    elseif($video_status == 'private'){
        $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Private';
    }

8

미리보기 이미지에 대한 답변은 많지만 YouTube 미리보기 이미지를 쉽게 얻을 수 있도록 다른 URL을 추가하고 싶습니다. Asaph의 답변에서 텍스트를 가져옵니다. YouTube 미리보기 이미지를 얻을 수있는 URL은 다음과 같습니다.

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg

썸네일의 고품질 버전에는 다음과 유사한 URL을 사용하십시오.

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

고품질과 유사한 URL을 사용하여 중간 품질 버전의 썸네일도 있습니다.

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

썸네일의 표준 정의 버전의 경우 다음과 유사한 URL을 사용하십시오.

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

썸네일의 최대 해상도 버전의 경우 다음과 유사한 URL을 사용하십시오.

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

6
    function get_video_thumbnail( $src ) {
            $url_pieces = explode('/', $src);
            if( $url_pieces[2] == 'dai.ly'){
                $id = $url_pieces[3];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if($url_pieces[2] == 'www.dailymotion.com'){
                $id = $url_pieces[4];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if ( $url_pieces[2] == 'vimeo.com' ) { // If Vimeo
                $id = $url_pieces[3];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'youtu.be' ) { // If Youtube
                $extract_id = explode('?', $url_pieces[3]);
                $id = $extract_id[0];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            }else if ( $url_pieces[2] == 'player.vimeo.com' ) { // If Vimeo
                $id = $url_pieces[4];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'www.youtube.com' ) { // If Youtube
                $extract_id = explode('=', $url_pieces[3]);
                $id = $extract_id[1];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            } else{
                $thumbnail = tim_thumb_default_image('video-icon.png', null, 147, 252);
            }
            return $thumbnail;
        }

get_video_thumbnail('https://vimeo.com/154618727');
get_video_thumbnail('https://www.youtube.com/watch?v=SwU0I7_5Cmc');
get_video_thumbnail('https://youtu.be/pbzIfnekjtM');
get_video_thumbnail('http://www.dailymotion.com/video/x5thjyz');

5

다음 은 수동 사용에 최적화 된 최고의 답변 입니다. 구분 기호가없는 비디오 ID 토큰을 사용하면 두 번 클릭으로 선택할 수 있습니다.

각 YouTube 동영상에는 4 개의 생성 된 이미지가 있습니다. 그것들은 다음과 같이 예측 가능한 형식입니다 :

https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/3.jpg

목록의 첫 번째 이미지는 전체 크기 이미지이고 다른 이미지는 축소판 이미지입니다. (. 즉, 하나의 기본 썸네일 이미지 1.jpg, 2.jpg, 3.jpg)입니다 :

https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg

썸네일의 고품질 버전에는 다음과 유사한 URL을 사용하십시오.

https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg

HQ와 유사한 URL을 사용하여 중간 품질 버전의 썸네일도 있습니다.

https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg

썸네일의 표준 정의 버전의 경우 다음과 유사한 URL을 사용하십시오.

https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg

썸네일의 최대 해상도 버전의 경우 다음과 유사한 URL을 사용하십시오.

https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg

위의 모든 URL은 HTTP를 통해서도 사용할 수 있습니다. 또한 i3.ytimg.com위의 img.youtube.com예제 URL 대신 약간 짧은 호스트 이름이 작동 합니다.

또는 YouTube Data API (v3) 를 사용하여 미리보기 이미지를 얻을 수 있습니다.


4

방법 1 :

"thumbnail_url", http://www.youtube.com/oembed?format=json&url= {동영상 URL은 여기}입니다.

최종 URL 모양 + PHP 테스트 코드

$data = file_get_contents("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=_7s-6V_0nwA");
$json = json_decode($data);
var_dump($json);

산출

object(stdClass)[1]
  public 'width' => int 480
  public 'version' => string '1.0' (length=3)
  public 'thumbnail_width' => int 480
  public 'title' => string 'how to reminder in window as display message' (length=44)
  public 'provider_url' => string 'https://www.youtube.com/' (length=24)
  public 'thumbnail_url' => string 'https://i.ytimg.com/vi/_7s-6V_0nwA/hqdefault.jpg' (length=48)
  public 'author_name' => string 'H2 ZONE' (length=7)
  public 'type' => string 'video' (length=5)
  public 'author_url' => string 'https://www.youtube.com/channel/UC9M35YwDs8_PCWXd3qkiNzg' (length=56)
  public 'provider_name' => string 'YouTube' (length=7)
  public 'height' => int 270
  public 'html' => string '<iframe width="480" height="270" src="https://www.youtube.com/embed/_7s-6V_0nwA?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>' (length=171)
  public 'thumbnail_height' => int 360

자세한 내용은 id 또는 https://www.youtube.com/watch?v=mXde7q59BI8 비디오 자습서 1을 사용하여 YouTube 비디오 축소판 그림을 얻는 방법을 참조하십시오.

방법 2 :

YouTube 이미지 링크를 사용하여 https://img.youtube.com/vi/ "insert-youtube-video-id-here"/default.jpg

방법 3 :

비디오 URL 링크를 사용하여 썸네일을 얻는 데 브라우저 소스 코드 사용-비디오 소스 코드로 이동하여 thumbnailurl을 검색하십시오. 이제이 URL을 소스 코드에 사용할 수 있습니다.

{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}

자세한 내용은 id 또는 https://www.youtube.com/watch?v=9f6E8MeM6PI 비디오 자습서 2를 사용하여 YouTube 비디오 썸네일을 얻는 방법을 참조하십시오.


링크 https://www.youtube.com/watch?v=mXde7q59BI8되어 https://www.youtube.com/watch?v=9f6E8MeM6PI있고 (효과적으로) 손상되었습니다.
Peter Mortensen

유튜브 내가이 문서에서는 www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/ 도움이되기를 바랍니다 때문에 정책의 동영상을 금지
하산 사이드

3

사용하다 img.youtube.com/vi/YouTubeID/ImageFormat.jpg

여기서 이미지 형식은 default, hqdefault, maxresdefault와 다릅니다.


2

이것은 클라이언트 측 전용 API 키가 필요없는 솔루션입니다.

YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))

코드:

import { parseURL, parseQueryString } from './url'
import { getImageSize } from './image'

const PICTURE_SIZE_NAMES = [
    // 1280 x 720.
    // HD aspect ratio.
    'maxresdefault',
    // 629 x 472.
    // non-HD aspect ratio.
    'sddefault',
    // For really old videos not having `maxresdefault`/`sddefault`.
    'hqdefault'
]

// - Supported YouTube URL formats:
//   - http://www.youtube.com/watch?v=My2FRPA3Gf8
//   - http://youtu.be/My2FRPA3Gf8
export default
{
    parse: async function(url)
    {
        // Get video ID.
        let id
        const location = parseURL(url)
        if (location.hostname === 'www.youtube.com') {
            if (location.search) {
                const query = parseQueryString(location.search.slice('/'.length))
                id = query.v
            }
        } else if (location.hostname === 'youtu.be') {
            id = location.pathname.slice('/'.length)
        }

        if (id) {
            return {
                source: {
                    provider: 'YouTube',
                    id
                },
                picture: await this.getPicture(id)
            }
        }
    },

    getPicture: async (id) => {
        for (const sizeName of PICTURE_SIZE_NAMES) {
            try {
                const url = getPictureSizeURL(id, sizeName)
                return {
                    type: 'image/jpeg',
                    sizes: [{
                        url,
                        ...(await getImageSize(url))
                    }]
                }
            } catch (error) {
                console.error(error)
            }
        }
        throw new Error(`No picture found for YouTube video ${id}`)
    },

    getEmbeddedVideoURL(id, options = {}) {
        return `https://www.youtube.com/embed/${id}`
    }
}

const getPictureSizeURL = (id, sizeName) => `https://img.youtube.com/vi/${id}/${sizeName}.jpg`

유틸리티 image.js:

// Gets image size.
// Returns a `Promise`.
function getImageSize(url)
{
    return new Promise((resolve, reject) =>
    {
        const image = new Image()
        image.onload = () => resolve({ width: image.width, height: image.height })
        image.onerror = reject
        image.src = url
    })
}

유틸리티 url.js:

// Only on client side.
export function parseURL(url)
{
    const link = document.createElement('a')
    link.href = url
    return link
}

export function parseQueryString(queryString)
{
    return queryString.split('&').reduce((query, part) =>
    {
        const [key, value] = part.split('=')
        query[decodeURIComponent(key)] = decodeURIComponent(value)
        return query
    },
    {})
}

1

다음은 축소판 그림을 얻기 위해 만든 간단한 기능입니다. 이해하고 사용하기 쉽습니다.

$ link는 브라우저에서와 같이 정확하게 복사 된 YouTube 링크입니다 (예 : https://www.youtube.com/watch?v=BQ0mxQXmLsk).

function get_youtube_thumb($link){
    $new = str_replace('https://www.youtube.com/watch?v=', '', $link);
    $thumbnail = 'https://img.youtube.com/vi/' . $new . '/0.jpg';
    return $thumbnail;
}

URL에 다른 쿼리 매개 변수가없는 경우에만 작동합니다.
Ma Kobi

예, 모든 YouTube 동영상은 시청하는 동안 형식을 따릅니다. 브라우저에서 링크를 복사 할 수 있습니다
Sodruldeen Mustapha

다른 매개 변수가 있으면 어떻게 &t=227s됩니까?
Ma Kobi

1
요점을 이해하지만 표준 YouTube 동영상에는 다른 매개 변수가 없지만 필요한 경우 기능의 첫 번째 줄 전에 링크를 필터링 할 수 있습니다. 링크를 필터링하여 필요한 것 이외의 다른 모든 것을 무시하도록하는 데 도움이 필요하십니까?
Sodruldeen Mustapha

1

이 코드를 빈 .php 파일로 저장하고 테스트하십시오.

<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
    switch ($size) {
        case 'medium':
            $size = 'mqdefault';
            break;
        case 'high':
            $size = 'hqdefault';
            break;
        case 'standard':
            $size = 'sddefault';
            break;
        default:
            $size = 'default';
            break;
    }
    if ($ID) {
        return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
    }
    return 'https://img.youtube.com/vi/ERROR/1.jpg';
}

감사.


-2
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.