Skip to content

Allt om WordPress, webbutveckling — och mer därtill

🔍 Söka efter videor på YouTube med Data API v3: en komplett guide

🔍 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 parametrar part=snippet, key och q (sedan juni 2025 är q obligatorisk; 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:

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

Två parametrar är alltid obligatoriska:

Parameter

Syfte

part

Vilka resursegenskaper som ska inkluderas i svaret. För sökning behöver du snippet. Snippet innehåller titel, beskrivning, miniatyrbilder och channelTitle.

key

Din API-nyckel.

q

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:

1https://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":

1https://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 i https://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
8foreach ($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:

1https://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();
6curl_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);
15curl_close($ch);
16
17if ($httpCode !== 200) {
18 echo 'Request error. Code: ' . $httpCode;
19 exit;
20}
21
22$data = json_decode($response, true);
23
24foreach ($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

relevance

Efter relevans för frågan (standard)

date

Nyast först

rating

Efter betyg (gilla/ogilla)

viewCount

Efter antal visningar

title

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:

1https://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
4if ($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/search rä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 parametern pageToken i nästa förfrågan för att få nästa sida. Upprepa tills nextPageToken ä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 q accepterar 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 parametern relevanceLanguage=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 kan videoDuration=long och videoEmbeddable=true tillsammans med channelId för en liten kanal ge noll träffar. Förenkla förfrågan till part=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.