Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

📹 YouTube Data API v3: videoandmete toomine PHP-ga (2026)

📹 YouTube Data API v3: videoandmete toomine PHP-ga (2026)

Miks parsida videoandmeid API kaudu, kui saab lihtsalt lehe avada?

Kümnete videote kohta info käsitsi kogumine võtab tunde. Pealkiri, kestus, vaatamiste arv, avaldamiskuupäev: selle kõige YouTube'ist käsitsi kopeerimine on kindel tee vigade ja läbipõlemiseni.

YouTube Data API v3 lahendab probleemi programmeeritult. Üks HTTP päring ja saad struktureeritud JSONi koos snippet, contentDetails ja statistics andmetega. Ei mingit HTMLi parsimist ega captchasid.

Selles õpetuses: samm-sammult juhised alates API võtme loomisest kuni töötava PHP skriptini, mis tõmbab iga YouTube'i video URLi järgi selle info välja. Kood on päris, testitud, iga rea selgitusega.

💡 Kiirülevaade:

  • Loo Google Cloud Console'is API võti ja luba YouTube Data API v3
  • Võta lahti /videos lõpp-punkti struktuur ning selle part, id ja key parameetrid
  • Kirjuta PHP funktsioon video ID eraldamiseks mis tahes YouTube'i lingist
  • Tee päring file_get_contents() abil ja parsi JSON vastus
  • Käsitle vigu: vale võti, vale ID, kvoot ületatud
  • Vaata alternatiivi: valmis madcoda/php-youtube-api teek

1. Samm: YouTube Data API võtme hankimine

APIga töötamiseks on vaja võtit. Siin on lühim tee:

  • Ava Google Cloud Console ja loo uus projekt (või vali olemasolev).
  • Mine APIs & Services → Library, otsi "YouTube Data API v3" ja klõpsa Enable.
  • Mine Credentials → Create Credentials → API Key.
  • (Soovitatav) Piira võtit: jaotises API restrictions vali YouTube Data API v3, et võti ei töötaks teiste Google'i teenustega.

Võti näeb välja nagu string, näiteks AIzaSyD-..., 39 tähemärgiga. Ilma selleta tagastab API 403 vea.

Päevakvoot on 10 000 ühikut. Üks päring /videos lõpp-punkti maksab 1 ühiku. Testimiseks ja väikeprojektide jaoks on see enam kui piisav. Kui plaanid tootmistaseme koormust, taotle samas Console'i jaotises kvoodi suurendamist.

2. Samm: API lõpp-punkt ja selle parameetrid

URL video info saamiseks:

1GET https://www.googleapis.com/youtube/v3/videos

Parameetrid antakse edasi päringustringina:

Parameeter

Kohustuslik

Kirjeldus

part

Jah

Komaga eraldatud väljade loend: snippet, contentDetails, statistics, status, topicDetails jne.

id

Jah

YouTube'i video ID (11 tähemärki, nt 1ejTKov_Sm4)

key

Jah

Sinu API võti

hl

Ei

Tekstiväljade keel (nt ru venekeelsete pealkirjade jaoks)

maxResults

Ei

Tulemuste arv (1-50, vaikimisi 5)

Kolm peamist part väärtust, mis katavad enamiku stsenaariume:

  • snippet: põhiinfo: pealkiri, kirjeldus, channelId, channelTitle, publishedAt, thumbnails (pisipiltide URLide komplekt eri resolutsioonides), tags, categoryId.
  • contentDetails: karakteristikud: kestus (ISO 8601 formaadis, nt PT4M13S), dimension (2d/3d), definition (sd/hd), caption (kas subtiitrid on olemas).
  • statistics: numbrid: viewCount, likeCount, commentCount.

Oluline märkus: dislikeCount väli statistikas on keelatud alates detsembrist 2021, API tagastab alati 0. Ka favoriteCount väli on aegunud (alati 0 alates augustist 2015). Ära neile oma koodis tugine.

3. Samm: video ID eraldamine URList

Enne API väljakutsumist pead lingist video ID eraldama. YouTube'il on mitu URLi formaati:

  • Standardne: https://www.youtube.com/watch?v=1ejTKov_Sm4
  • Lühike: https://youtu.be/1ejTKov_Sm4
  • Manustatud: https://www.youtube.com/embed/1ejTKov_Sm4
  • Parameetritega: https://www.youtube.com/watch?v=1ejTKov_Sm4&t=120

Lihtne PHP funktsioon käsitleb kõiki neid variante:

1/**
2 * Extracts video ID from YouTube URL.
3 * Supports formats: watch?v=, youtu.be/, /embed/
4 *
5 * @param string $url YouTube video URL
6 * @return string|null Video ID (11 characters) or null on error
7 */
8function getYouTubeVideoId(string $url): ?string
9{
10 $parsed = parse_url($url);
11
12 // Short link youtu.be/VIDEO_ID
13 if (isset($parsed['host']) && str_contains($parsed['host'], 'youtu.be')) {
14 return ltrim($parsed['path'], '/') ?: null;
15 }
16
17 // Standard link watch?v=VIDEO_ID
18 if (isset($parsed['query'])) {
19 parse_str($parsed['query'], $params);
20 if (!empty($params['v'])) {
21 return $params['v'];
22 }
23 }
24
25 // Embed link /embed/VIDEO_ID
26 if (isset($parsed['path']) && str_starts_with($parsed['path'], '/embed/')) {
27 return substr($parsed['path'], 7);
28 }
29
30 return null;
31}
32
33// Usage example
34$videoUrl = 'https://www.youtube.com/watch?v=1ejTKov_Sm4';
35$videoId = getYouTubeVideoId($videoUrl);
36echo $videoId; // 1ejTKov_Sm4

Funktsioon kasutab ainult PHP sisseehitatud võimalusi: parse_url() tükeldab URLi komponentideks, parse_str() parsimise päringustringi massiiviks. Väliseid sõltuvusi pole.

4. Samm: API päring ja vastuse parsimine

Paneme kõik kokku. Ehitame URLi, asendades ID ja võtme, teeme GET päringu ja dekodeerime JSONi:

1<?php
2
3$apiKey = 'AIzaSyD-YOUR_KEY';
4$videoUrl = 'https://www.youtube.com/watch?v=1ejTKov_Sm4';
5$videoId = getYouTubeVideoId($videoUrl);
6
7if (!$videoId) {
8 die('Failed to extract video ID from URL.');
9}
10
11$endpoint = sprintf(
12 'https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id=%s&key=%s',
13 $videoId,
14 $apiKey
15);
16
17// Option with file_get_contents (requires allow_url_fopen = On in php.ini)
18$context = stream_context_create([
19 'http' => [
20 'timeout' => 10,
21 'ignore_errors' => true, // do not crash on HTTP errors
22 ],
23]);
24
25$response = @file_get_contents($endpoint, false, $context);
26
27if ($response === false) {
28 die('Network request failed. Check your connection or use cURL.');
29}
30
31$data = json_decode($response);
32
33if (json_last_error() !== JSON_ERROR_NONE) {
34 die('API response is not JSON. The key might be invalid.');
35}
36
37// API returns error in error field, not HTTP status
38if (isset($data->error)) {
39 die('API Error: ' . $data->error->message);
40}
41
42if (empty($data->items)) {
43 die('No video found with this ID.');
44}
45
46$video = $data->items[0];
47
48echo 'Title: ' . $video->snippet->title . PHP_EOL;
49echo 'Channel: ' . $video->snippet->channelTitle . PHP_EOL;
50echo 'Published: ' . $video->snippet->publishedAt . PHP_EOL;
51echo 'Duration: ' . $video->contentDetails->duration . PHP_EOL;
52echo 'Views: ' . number_format($video->statistics->viewCount ?? 0) . PHP_EOL;
53echo 'Likes: ' . number_format($video->statistics->likeCount ?? 0) . PHP_EOL;
54echo 'Comments: ' . number_format($video->statistics->commentCount ?? 0) . PHP_EOL;
55
56// Max resolution thumbnail URL
57if (isset($video->snippet->thumbnails->maxres)) {
58 echo 'Thumbnail: ' . $video->snippet->thumbnails->maxres->url . PHP_EOL;
59}

Kood on märgatavalt robustsem kui paljas file_get_contents() mustandversioonist. Lisatud: ID eraldamise kontroll, võrguvea käsitlus, JSONi valideerimine, reageerimine Google API veale (väli error), tühja vastuse kontroll ja ?? varuoperaator valikuliste statistika väljade jaoks.

CURL alternatiivina

Kui sinu hostingul on allow_url_fopen direktiiv keelatud, siis file_get_contents() ei tööta. Sel juhul kasuta cURLi:

1$ch = curl_init();
2curl_setopt_array($ch, [
3 CURLOPT_URL => $endpoint,
4 CURLOPT_RETURNTRANSFER => true,
5 CURLOPT_TIMEOUT => 10,
6 CURLOPT_FOLLOWLOCATION => true,
7]);
8$response = curl_exec($ch);
9$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
10curl_close($ch);
11
12if ($httpCode !== 200 || $response === false) {
13 die('Request failed. HTTP code: ' . $httpCode);
14}

Valmisteek: madcoda/php-youtube-api

Käsitsi ümbrisfunktsiooni kirjutamine tootmise jaoks on lisatöö. Projektidele, mis vajavad regulaarset API suhtlust, mitte ühekordset päringut, on olemas madcoda/php-youtube-api, kerge PHP ümbris ilma väliste sõltuvusteta. Paigaldamine:

1composer require madcoda/php-youtube-api

Kasutamine:

1$youtube = new Madcoda\Youtube(['key' => 'YOUR_KEY']);
2$video = $youtube->getVideoInfo('1ejTKov_Sm4');
3
4echo $video->snippet->title;
5echo $video->statistics->viewCount;

Teek käsitleb rutiinseid ülesandeid: lehekülgedeks jaotamine, päringute kordamine, kestuse vormindamine ISO 8601 formaadist loetavasse vormingusse. Ühekordsete skriptide jaoks on see liialdus, töötava teenuse jaoks on see õigustatud.

Ülaltoodud videojuhend näitab selgelt kogu protsessi: API lubamisest konsoolis kuni esimese eduka päringuni. Soovitame seda enne koodi kirjutamist vaadata: 15 minutit videot säästab tunni dokumentatsiooni lugemist.

PHP kood monitoriekraanil lähivaates

⁉️🤔 Korduma kippuvad küsimused

Kui palju YouTube Data API kasutamine maksab?

API ise on tasuta. Maksad ainult kvoodiga: 10 000 ühikut päevas iga projekti kohta. Päring /videos lõpp-punkti maksab 1 ühiku, seega saad iga päev andmeid 10 000 video kohta, kulutamata sentigi. Äriprojektidele, mille koormus ületab läve, pakub Google kvoodi suurendamise taotluse vormi; piisava põhjendusega nad kinnitavad selle. YouTube Data API-l ei ole eraldi tasulisi astmeid.

Kuidas YouTube Data API v3 erineb HTML-lehe parsimisest?

API tagastab struktureeritud JSONi dokumenteeritud skeemiga. Kui väljad muutuvad, avaldab Google aegumisteate mitu kuud ette. HTMLi parsimine puruneb iga lehe ümberkujundusega, nõuab brauseri emuleerimist ja on YouTube'i teenusetingimuste punktiga 3.2 sõnaselgelt keelatud.

Kas ma saan privaatse video andmeid?

API võtmega ainult avalikke videoid. Privaatsetele, mitteavalikele ja piiratud videotele juurdepääsuks on vaja OAuth 2.0 omaniku loaga. Tehniliselt on see sama /videos lõpp-punkt, kuid võtme asemel pääsutokeniga.

Kuidas saada oma YouTube'i kanali ID?

Kõige usaldusväärsem viis: YouTube Studio → Settings → Channel → Advanced settings. Seal näidatakse YouTube'i kanali ID-d sellisena, nagu see on, ilma ühegi API päringuta. Alternatiiv: kutsu /channels?part=id&mine=true OAuth tokeniga. Kohandatud kasutajanimedega kanalite puhul töötab /channels?part=id&forUsername=NAME meetod ainult enne 2014. aastat loodud kanalite puhul.

Mida teha, kui saan "quotaExceeded" vea?

Päevakvoot lähtestub kell 00:00 Vaikse ookeani aja järgi (UTC-8). Ajutine lahendus: puhverda vastused enda poolel (fail, Redis). Püsivaks suurendamiseks: Google Cloud Console → IAM & Admin → Quotas → YouTube Data API v3 → requests per day → Edit Quota.

Kus YouTube Data API-t rakendada: lõppkokkuvõte

Oleme läbinud täistsükli: API võti, lõpp-punkti parameetrite lahtivõtmine, video ID eraldamine URList, GET päring ja JSON vastuse parsimine. Tulemuseks on töötav PHP skript, mis toob sekundiga kätte iga avaliku video pealkirja, statistika, kestuse ja pisipildid.

Kuhu edasi minna:

  • Videokaardid veebisaidil. Integreeri skript WordPressi taustasüsteemi (save_post konks) või Laraveli ja YouTube'i lingi lisamisel tõmmatakse video info automaatselt.
  • Konkurentide monitooring. Kord päevas kogu viewCount ja likeCount kanalite nimekirja kohta ja sinu dünaamika tabel on valmis.
  • Automaatne import. Kui pead oma saidil videoblogi, siis too snippet.title ja snippet.description manustamise mustandteksti kirjeldusena sisse.

YouTube Data API v3 on küps, stabiilne ja tasuta tööriist. Olles omandanud selle õpetuse põhipäringu, avad ukse kümnetele teistele meetoditele: otsing, esitusloendid, kommentaarid, tellimused. 🔗 Ametlik YouTube Data API v3 dokumentatsioon