
🔍 Söka efter videor på YouTube med Data API v3: en komplett guide
Din webbplats behöver ett YouTube-videoflöde, men det finns inget färdigt plugin för uppgiften, och du föreställer dig redan en veckas kamp med OAuth, tokens och klumpiga bibliotek. YouTube Data API v3 löser detta på ungefär en timme. Ingen OAuth, inga användartokens, inga externa beroenden. Bara en API-nyckel och en korrekt sammansatt URL.
Sökändpunkten returnerar videor, kanaler och spellistor baserat på nyckelord. Den filtrerar efter datum, längd och kanal. Den sorterar efter relevans eller visningsantal. I praktiken täcker detta de flesta scenarier, från en specifik kanals videoflöde till en sammanställning av "wordpress tutorial" från den senaste månaden.
Nedan följer en steg-för-steg-genomgång med live-exempel på förfrågningar och PHP-kod. När du är klar kommer du att ha en fungerande sökmodul: strukturerad JSON in, videogalleri ut, inga tredjepartsbibliotek.
💡 Snabb översikt:
- Skapa ett projekt i Google Cloud Console, aktivera YouTube Data API v3 och skaffa en API-nyckel.
- Bygg sökförfrågans URL: ändpunkt
/youtube/v3/search, obligatoriska parametrarpart=snippet,keyochq(sedan juni 2025 ärqobligatorisk; utan den returnerar API:et en tom array). - Lägg till filter: type (video/channel/playlist), channelId, publishedAfter/publishedBefore, maxResults, order, videoDuration, videoEmbeddable.
- Kör förfrågan via cURL i PHP, tolka JSON-svaret, visa resultat och sätt upp cachning via WordPress transients.
Steg 1: Skaffa din API-nyckel
Ingen nyckel, ingen API-förfrågan skickas. Nyckeln är knuten till ett projekt i Google Cloud Console och identifierar din applikation; inget mer komplicerat än att logga in på ett Google-konto krävs.
Så här gör du:
- Öppna Google Cloud Console och skapa ett nytt projekt eller välj ett befintligt.
- Gå till APIs & Services → Library, sök efter "YouTube Data API v3" och klicka på Enable.
- Öppna APIs & Services → Credentials, klicka på Create Credentials → API Key.
- Kopiera nyckeln. Sätt omedelbart en begränsning: Restrict Key → YouTube Data API v3, så att nyckeln inte kan användas för andra Google-tjänster.
Nyckeln ser ut som en sträng, till exempel AIzaSyD-..., och skickas med i varje förfrågan via parametern key. För offentlig videosökning räcker detta; OAuth behövs inte. Om du däremot planerar förfrågningar för en användares räkning (videouppladdning, hantering av spellistor) behöver du OAuth 2.0.
Snabbtest: skicka en GET-förfrågan till search-ändpunkten med valfri sökterm. Om du får JSON med en items-array fungerar nyckeln.
Steg 2: URL för sökförfrågan och obligatoriska parametrar
Ändpunkt för sökning:
1 GET https://www.googleapis.com/youtube/v3/search
Två parametrar är alltid obligatoriska:
Parameter | Syfte |
|---|---|
| Vilka resursegenskaper som ska inkluderas i svaret. För sökning behöver du |
| Din API-nyckel. |
| Sökfrågan. Accepterar fritext, precis som sökfältet på youtube.com. |
Parametern q accepterar fritext, precis som sökfältet på youtube.com. Du kan skicka flera ord separerade med mellanslag eller plustecken: q=wordpress+speed+optimization. Versaler eller gemener spelar ingen roll.
Minimal fungerande förfrågan:
1 https://www.googleapis.com/youtube/v3/search?part=snippet&q=wordpress&key=YOUR_KEY
Den returnerar 5 resultat (standard), vilket är vad API:et returnerar när maxResults inte åsidosätts.
Parametern type begränsar vilken resurstyp som söks:
video, endast videor;channel, endast kanaler;playlist, endast spellistor.
Du kan lista flera värden separerade med kommatecken: type=video,channel. Om den utelämnas söker API:et efter allt. De återstående parametrarna är valfria, men de förvandlar en rå fråga till ett precist verktyg.
Steg 3: Söka efter videor med nyckelord
Ett klassiskt scenario: en användare anger en sökfras på din webbplats, du skickar den till YouTubes API och visar ett urval av videor.
Exempel på förfrågan för att söka efter videor med ordet "swimming":
1 https://www.googleapis.com/youtube/v3/search?part=snippet&q=swimming&type=video&key=YOUR_KEY
Svaret kommer i JSON. Inuti items[] finns en array med hittade resurser. För varje video har du:
id.videoId, den unika identifieraren (sätts in ihttps://www.youtube.com/watch?v=...);snippet.title, videons titel;snippet.description, beskrivningen;snippet.thumbnails, förhandsvisningar i flera upplösningar (default, medium, high);snippet.channelTitle, kanalnamnet.
I PHP är det enklaste sättet att hämta svaret via file_get_contents. Här är minimal bearbetningskod:
1 $apiKey = 'YOUR_KEY'; 2 $query = 'swimming'; 3 $url = "https://www.googleapis.com/youtube/v3/search?part=snippet&q={$query}&type=video&key={$apiKey}"; 4 5 $response = file_get_contents($url); 6 $data = json_decode($response, true); 7 8 foreach ($data['items'] as $item) { 9 echo '<h3>' . htmlspecialchars($item['snippet']['title']) . '</h3>'; 10 echo '<p>' . htmlspecialchars($item['snippet']['description']) . '</p>'; 11 echo '<img src="' . $item['snippet']['thumbnails']['medium']['url'] . '" alt="">'; 12 echo '<a href="https://www.youtube.com/watch?v=' . $item['id']['videoId'] . '">Watch</a>'; 13 }
file_get_contents är okej för tester och små projekt. I produktion, använd cURL: det ger dig kontroll över timeouter, headers och felhantering. Och ja, om allow_url_fopen är inaktiverat på ditt webbhotell kommer file_get_contents inte att fungera för externa URL:er. I så fall är cURL ditt enda alternativ.
Steg 4: Hämta videor från en specifik kanal
För att samla alla videor från en kanal, skicka med parametern channelId. Att hitta kanalens identifierare är enkelt: öppna kanalsidan på YouTube och kopiera värdet efter /channel/ från adressfältet (till exempel UC3VyA8KN_VgCF93EurnAQXw).
Förfrågan:
1 https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UC3VyA8KN_VgCF93EurnAQXw&type=video&order=date&key=YOUR_KEY
Parametern order=date sorterar efter publiceringsdatum, nyast först. Utan den returnerar API:et de mest relevanta resultaten, men för ett kanalflöde är kronologisk ordning mer meningsfull.
Samma förfrågan i PHP med cURL och grundläggande felhantering:
1 $apiKey = 'YOUR_KEY'; 2 $channelId = 'UC3VyA8KN_VgCF93EurnAQXw'; 3 $url = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={$channelId}&type=video&order=date&key={$apiKey}"; 4 5 $ch = curl_init(); 6 curl_setopt_array($ch, [ 7 CURLOPT_URL => $url, 8 CURLOPT_RETURNTRANSFER => true, 9 CURLOPT_TIMEOUT => 15, 10 CURLOPT_SSL_VERIFYPEER => true, 11 ]); 12 13 $response = curl_exec($ch); 14 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 15 curl_close($ch); 16 17 if ($httpCode !== 200) { 18 echo 'Request error. Code: ' . $httpCode; 19 exit; 20 } 21 22 $data = json_decode($response, true); 23 24 foreach ($data['items'] as $item) { 25 printf( 26 '<div><a href="https://www.youtube.com/watch?v=%s">%s</a></div>', 27 $item['id']['videoId'], 28 htmlspecialchars($item['snippet']['title']) 29 ); 30 }
En kanal kan ha hundratals videor, men en enskild förfrågan returnerar högst 50. För att hämta allt, använd fältet pageToken från API-svaret: skicka dess värde i nästa förfrågan som pageToken=<token>. Upprepa tills nextPageToken är tomt.
Steg 5: Begränsningar, sortering och kvoter
På en riktig webbplats behöver du sällan "alla videor för en fråga". Oftare vill du ha topp 10 från den senaste månaden eller ett urval som exkluderar Shorts. För detta tillhandahåller API:et fem finjusteringsparametrar.
maxResults: hur många objekt som ska returneras. Giltiga värden: 1 till 50. Standard är 5. För ett galleri eller flöde, sätt 20-30, men ha kvoter i åtanke.
order: sorteringsfält:
Värde | Vad det gör |
|---|---|
| Efter relevans för frågan (standard) |
| Nyast först |
| Efter betyg (gilla/ogilla) |
| Efter antal visningar |
| Alfabetiskt efter titel |
publishedAfter** / **publishedBefore: filtrera efter publiceringsdatum. Format: ISO 8601 (RFC 3339). Exempel: publishedAfter=2026-01-01T00:00:00Z. Sållar bort arkiverade videor när du bara behöver färskt innehåll.
videoDuration: filtrera efter längd:
short, under 4 minuter;medium, från 4 till 20 minuter;long, över 20 minuter;- inte angivet, alla.
videoEmbeddable med värdet true väljer endast videor som är tillåtna för inbäddning på tredjepartswebbplatser. För en webbplats som bäddar in YouTube-spelaren är detta en obligatorisk parameter.
Kombinerad förfrågan: 10 inbäddningsbara videor om WordPress, inte äldre än 2026, längre än 4 minuter, sorterade efter visningsantal:
1 https://www.googleapis.com/youtube/v3/search?part=snippet&q=wordpress+tutorial&type=video&videoEmbeddable=true&videoDuration=medium&publishedAfter=2026-01-01T00:00:00Z&maxResults=10&order=viewCount&key=YOUR_KEY
Kvoter: hur man undviker en tom skärm
Varje anrop till search.list kostar 100 enheter av din dagliga kvot. Som standard får ett Google Cloud-projekt 10 000 enheter per dag gratis, vilket motsvarar ungefär 100 sökanrop. För en webbplats med mer än hundra besökare per dag räcker inte det.
Lösningen är att cacha API-svar. I WordPress fungerar transients utmärkt för detta:
1 $cache_key = 'yt_search_' . md5($query); 2 $videos = get_transient($cache_key); 3 4 if ($videos === false) { 5 $response = wp_remote_get($url); 6 $body = json_decode(wp_remote_retrieve_body($response), true); 7 $videos = $body['items'] ?? []; 8 9 set_transient($cache_key, $videos, 6 * HOUR_IN_SECONDS); 10 } 11 12 // Display $videos in a gallery...
En transient på sex timmar innebär maximalt 4 API-förfrågningar per dag för en enskild sökfras. Även med tio olika frågor över webbplatsens sidor stannar du under 40 anrop, mindre än hälften av den dagliga kvoten. Om du behöver mer, begär en kvotökning via Google Cloud Console: Quotas → YouTube Data API v3 → Edit.
Live-exemplet ovan visar hur man bygger ett videogalleri för en kanal via Data API v3 i PHP på 15 minuter.
⁉️🤔 Vanliga frågor
Behövs OAuth för att söka efter videor via YouTube API:et?
Nej. För sökförfrågningar till
/youtube/v3/searchräcker en API-nyckel. OAuth krävs endast för operationer på användarnivå: ladda upp videor, hantera spellistor, prenumerationer. En API-nyckel hämtas i Google Cloud Console på ett par minuter och används omedelbart.
Hur många förfrågningar per dag kan göras gratis?
Varje Google Cloud-projekt får 10 000 kvotenheter per dag gratis. Ett
search.list-anrop kostar 100 enheter, så ungefär 100 sökförfrågningar per dag. Med cachning via WordPress transients räcker detta för en genomsnittlig webbplats. Om du behöver mer, begär en kvotökning via Google Cloud Console (Quotas-sektionen).
Hur får jag fler än 50 resultat från en enskild fråga?
Genom paginering. I JSON-svaret returnerar API:et ett
nextPageToken-fält. Skicka dess värde som parameternpageTokeni nästa förfrågan för att få nästa sida. Upprepa tillsnextPageTokenär tomt. En fullständig genomgång av en kanal med 500 videor tar 10 förfrågningar och 1 000 kvotenheter.
Kan jag söka efter videor på andra språk än engelska?
Ja. Parametern
qaccepterar vilket språk som helst, inklusive svenska. YouTubes sökalgoritm avgör språkrelevans automatiskt. För att tvinga fram en avgränsning, lägg till parameternrelevanceLanguage=ru; resultaten rankas då till förmån för ryskspråkigt innehåll.
Varför returnerar API:et en tom array trots att förfrågan är korrekt?
Den vanligaste orsaken:
publishedAfterär satt till ett framtida datum eller till dagens datum med en exakt tid. Använd början av dagen:T00:00:00Z. Den andra orsaken: en kombination av filter som utesluter alla resultat. Till exempel kanvideoDuration=longochvideoEmbeddable=truetillsammans medchannelIdför en liten kanal ge noll träffar. Förenkla förfrågan tillpart=snippet&q=...&key=...och lägg till filter ett i taget, och kontrollera resultaten vid varje steg.
Bygga sök på en timme: vilka verktyg passar vilken uppgift
Ditt val av verktyg beror på exakt vad du bygger. Om du behöver ett enkelt videogalleri för en kanal på en småföretagswebbplats, ta en färdig PHP-wrapper som madcoda/php-youtube-api: ett Composer-paket, tre rader kod, resultat på fem minuter. Om du bygger en anpassad sökning med filter, cachning och paginering, skriv din egen hanterare med cURL plus WordPress transients. För en webbplats med hög trafik och tiotusentals besökare, lägg till ett Redis-cache-lager ovanpå transients och sätt upp bakgrundssynkronisering via WP-Cron; då laddas sidor på millisekunder, och API-kvoter används endast för cache-ogiltigförklaring.
Du har redan din API-nyckel. Cachning är konfigurerad. Allt som återstår är att sätta ihop URL:en för din uppgift och skriva utdataloop. Resultatet är ett levande videoflöde som inte är beroende av tredjepartstjänster och inte slår i kvottaken.



