
📹 YouTube Data API v3: henting av videodata med PHP (2026)
Hvorfor parse videodata via API når du bare kan åpne siden?
Å samle informasjon om dusinvis av videoer manuelt tar timer. Tittel, varighet, visningstall, publiseringsdato: å kopiere alt dette for hånd fra YouTube er en garantert vei til feil og utbrenthet.
YouTube Data API v3 løser problemet programmatisk. Én HTTP-forespørsel, og du får strukturert JSON med snippet, contentDetails og statistics. Ingen HTML-parsing, ingen captchaer.
I denne veiledningen: trinnvise instruksjoner fra å opprette en API-nøkkel til et klart til bruk PHP-skript som henter informasjon om enhver YouTube-video via URL-en. Koden er ekte, testet, med forklaringer for hver linje.
💡 Rask oversikt:
- Opprett en API-nøkkel i Google Cloud Console og aktiver YouTube Data API v3
- Bryt ned
/videos-endepunktstrukturen og parameterne part, id og key - Skriv en PHP-funksjon for å trekke ut video-ID fra enhver YouTube-lenke
- Gjør en forespørsel via
file_get_contents()og parse JSON-svaret - Håndter feil: ugyldig nøkkel, feil ID, overskredet kvote
- Se på et alternativ: det ferdige biblioteket
madcoda/php-youtube-api
Trinn 1: Skaffe en YouTube Data API-nøkkel
For å jobbe med API-et trenger du en nøkkel. Her er den korteste veien:
- Åpne Google Cloud Console og opprett et nytt prosjekt (eller velg et eksisterende).
- Gå til APIs & Services → Library, finn «YouTube Data API v3» og klikk Enable.
- Gå til Credentials → Create Credentials → API Key.
- (Anbefalt) Begrens nøkkelen: i API restrictions-delen velger du YouTube Data API v3 slik at nøkkelen ikke fungerer med andre Google-tjenester.
Nøkkelen ser ut som en streng som AIzaSyD-... med 39 tegn. Uten den returnerer API-et en 403-feil.
Daglig kvote er 10 000 enheter. Én forespørsel til /videos koster 1 enhet. For testing og små prosjekter er dette mer enn nok. Hvis du planlegger produksjonslast, be om en kvoteøkning i samme konsollseksjon.
Trinn 2: API-endepunkt og parametere
URL for å hente videoinformasjon:
1 GET https://www.googleapis.com/youtube/v3/videos
Parametere sendes som spørrestreng:
Parameter | Påkrevd | Beskrivelse |
|---|---|---|
| Ja | Kommaseparert liste over felt: snippet, contentDetails, statistics, status, topicDetails, osv. |
| Ja | YouTube-video-ID (11 tegn, f.eks. |
| Ja | Din API-nøkkel |
| Nei | Språk for tekstfelt (f.eks. |
| Nei | Antall resultater (1-50, standard er 5) |
Tre hovedverdier for part som dekker de fleste scenarioer:
- snippet: grunnleggende informasjon: tittel, beskrivelse, channelId, channelTitle, publishedAt, thumbnails (sett med miniatyrbilde-URL-er i ulike oppløsninger), tags, categoryId.
- contentDetails: egenskaper: varighet (i ISO 8601-format, f.eks.
PT4M13S), dimension (2d/3d), definition (sd/hd), caption (om undertekster finnes). - statistics: tall: viewCount, likeCount, commentCount.
Viktig merknad: feltet dislikeCount i statistics har vært deaktivert siden desember 2021, API-et returnerer alltid 0. Feltet favoriteCount er også utdatert (alltid 0 siden august 2015). Ikke stol på dem i koden din.
Trinn 3: Trekke ut video-ID fra URL
Før du kaller API-et, må du trekke ut video-ID-en fra lenken. YouTube har flere URL-formater:
- Standard:
https://www.youtube.com/watch?v=1ejTKov_Sm4 - Kort:
https://youtu.be/1ejTKov_Sm4 - Embed:
https://www.youtube.com/embed/1ejTKov_Sm4 - Med parametere:
https://www.youtube.com/watch?v=1ejTKov_Sm4&t=120
En enkel PHP-funksjon håndterer alle disse variantene:
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
Funksjonen bruker bare innebygde PHP-muligheter: parse_url() bryter URL-en ned i komponenter, parse_str() parser spørrestrengen til en matrise. Ingen eksterne avhengigheter.
Trinn 4: API-forespørsel og responsparsing
Setter alt sammen. Vi bygger URL-en ved å sette inn ID og nøkkel, gjør en GET-forespørsel og dekoder JSON-en:
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 }
Koden er merkbart mer robust enn en ren file_get_contents() fra en utkastversjon. Lagt til: sjekk for ID-uthenting, nettverksfeilhåndtering, JSON-validering, respons på Google API-feil (feltet error), sjekk for tom respons og ??-fallback-operator for valgfrie statistikkfelt.
CURL som et alternativ
Hvis direktivet allow_url_fopen er deaktivert på din hosting, vil ikke file_get_contents() fungere. I så fall, bruk cURL:
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 }
Ferdig bibliotek: madcoda/php-youtube-api
Å skrive en wrapper manuelt for produksjon er ekstra arbeid. For prosjekter som trenger regelmessig API-interaksjon i stedet for et engangsoppslag, finnes madcoda/php-youtube-api, en lett PHP-wrapper uten eksterne avhengigheter. Installasjon:
1 composer require madcoda/php-youtube-api
Bruk:
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;
Biblioteket håndterer rutineoppgaver: paginering, nye forsøk på forespørsler, formatering av varighet fra ISO 8601 til et lesbart format. For engangsskript er det overkill; for en fungerende tjeneste er det berettiget.
Videoguiden over viser tydelig hele prosessen: fra aktivering av API-et i konsollen til den første vellykkede forespørselen. Vi anbefaler å se den før du skriver kode: 15 minutter med video sparer en time med dokumentasjonslesing.

⁉️🤔 Ofte stilte spørsmål
Hvor mye koster det å bruke YouTube Data API?
Selve API-et er gratis. Du betaler bare med kvote: 10 000 enheter per dag for hvert prosjekt. En forespørsel til
/videoskoster 1 enhet, så du kan hente data om 10 000 videoer daglig uten å bruke en krone. For kommersielle prosjekter med last over terskelen tilbyr Google et skjema for forespørsel om kvoteøkning; de godkjenner det med adekvat begrunnelse. YouTube Data API har ingen separate betalte nivåer.
Hvordan skiller YouTube Data API v3 seg fra HTML-sideparsing?
API-et returnerer strukturert JSON med et dokumentert skjema. Når felt endres, publiserer Google et varsel om utfasing flere måneder i forveien. HTML-parsing bryter sammen ved enhver sideomdesign, krever nettleseremulering og er eksplisitt forbudt i henhold til seksjon 3.2 i YouTubes tjenestevilkår.
Kan jeg få data om en privat video?
Med en API-nøkkel, bare offentlige videoer. For tilgang til private, ulistede og begrensede videoer kreves OAuth 2.0 med eiers tillatelse. Teknisk sett er det det samme /videos-endepunktet, men med et tilgangstoken i stedet for en nøkkel.
Hvordan får jeg YouTube-kanal-ID-en min?
Den mest pålitelige måten: YouTube Studio → Innstillinger → Kanal → Avanserte innstillinger. Der vises YouTube-kanal-ID-en som den er, uten noen API-forespørsler. Alternativt: kall
/channels?part=id&mine=truemed et OAuth-token. For kanaler med egendefinerte brukernavn fungerer/channels?part=id&forUsername=NAME-metoden bare for de som ble opprettet før 2014.
Hva bør jeg gjøre når jeg får en «quotaExceeded»-feil?
Dagskvoten tilbakestilles kl. 00:00 Pacific Time (UTC-8). Midlertidig løsning: mellomlagre svar på din side (fil, Redis). For en permanent økning: Google Cloud Console → IAM & Admin → Quotas → YouTube Data API v3 → requests per day → Edit Quota.
Hvor kan YouTube Data API brukes: endelig oppsummering
Vi har dekket hele syklusen: API-nøkkel, parameteroversikt for endepunkt, uthenting av video-ID fra URL, GET-forespørsel og parsing av JSON-respons. Resultatet er et fungerende PHP-skript som henter tittel, statistikk, varighet og miniatyrbilder for enhver offentlig video på et sekund.
Hvor du kan gå videre:
- Videokort på et nettsted. Integrer skriptet i et WordPress-backend (
save_post-hook) eller Laravel, og når en YouTube-lenke legges til, hentes videoinformasjon automatisk. - Konkurrentovervåking. Én gang om dagen, samle
viewCountoglikeCountfor en liste over kanaler, så er dynamikktabellen din klar. - Automatisk import. Hvis du driver en videoblogg på ditt eget nettsted, hent
snippet.titleogsnippet.descriptionsom en utkasttekstbeskrivelse for innbygging.
YouTube Data API v3 er et modent, stabilt og gratis verktøy. Når du har mestret det grunnleggende kallet fra denne veiledningen, åpner du døren til dusinvis av andre metoder: søk, spillelister, kommentarer, abonnementer. 🔗 Offisiell YouTube Data API v3-dokumentasjon



