
📹 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
/videoslõpp-punkti struktuur ning sellepart,idjakeyparameetrid - 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-apiteek
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:
1 GET https://www.googleapis.com/youtube/v3/videos
Parameetrid antakse edasi päringustringina:
Parameeter | Kohustuslik | Kirjeldus |
|---|---|---|
| Jah | Komaga eraldatud väljade loend: snippet, contentDetails, statistics, status, topicDetails jne. |
| Jah | YouTube'i video ID (11 tähemärki, nt |
| Jah | Sinu API võti |
| Ei | Tekstiväljade keel (nt |
| 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 */ 8 function 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); 36 echo $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 7 if (!$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 27 if ($response === false) { 28 die('Network request failed. Check your connection or use cURL.'); 29 } 30 31 $data = json_decode($response); 32 33 if (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 38 if (isset($data->error)) { 39 die('API Error: ' . $data->error->message); 40 } 41 42 if (empty($data->items)) { 43 die('No video found with this ID.'); 44 } 45 46 $video = $data->items[0]; 47 48 echo 'Title: ' . $video->snippet->title . PHP_EOL; 49 echo 'Channel: ' . $video->snippet->channelTitle . PHP_EOL; 50 echo 'Published: ' . $video->snippet->publishedAt . PHP_EOL; 51 echo 'Duration: ' . $video->contentDetails->duration . PHP_EOL; 52 echo 'Views: ' . number_format($video->statistics->viewCount ?? 0) . PHP_EOL; 53 echo 'Likes: ' . number_format($video->statistics->likeCount ?? 0) . PHP_EOL; 54 echo 'Comments: ' . number_format($video->statistics->commentCount ?? 0) . PHP_EOL; 55 56 // Max resolution thumbnail URL 57 if (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(); 2 curl_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); 10 curl_close($ch); 11 12 if ($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:
1 composer require madcoda/php-youtube-api
Kasutamine:
1 $youtube = new Madcoda\Youtube(['key' => 'YOUR_KEY']); 2 $video = $youtube->getVideoInfo('1ejTKov_Sm4'); 3 4 echo $video->snippet->title; 5 echo $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.

⁉️🤔 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
/videoslõ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=trueOAuth tokeniga. Kohandatud kasutajanimedega kanalite puhul töötab/channels?part=id&forUsername=NAMEmeetod 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_postkonks) või Laraveli ja YouTube'i lingi lisamisel tõmmatakse video info automaatselt. - Konkurentide monitooring. Kord päevas kogu
viewCountjalikeCountkanalite nimekirja kohta ja sinu dünaamika tabel on valmis. - Automaatne import. Kui pead oma saidil videoblogi, siis too
snippet.titlejasnippet.descriptionmanustamise 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



