Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

🔍 Videote otsimine YouTube'ist Data API v3 abil: täielik juhend

🔍 Videote otsimine YouTube'ist Data API v3 abil: täielik juhend

Teie sait vajab YouTube'i videovoogu, kuid valmis pistikprogrammi selle ülesande jaoks pole ja te kujutate juba ette nädal aega OAuthi, tokenite ja kohmakate teekidega maadlemist. YouTube Data API v3 lahendab selle töö umbes tunniga. Pole OAuthi, pole kasutajatokenit, pole väliseid sõltuvusi. Ainult API võti ja korrektselt kokku pandud URL.

Otsingu lõpp-punkt tagastab videoid, kanaleid ja esitusloendeid märksõnade alusel. See filtreerib kuupäeva, kestuse ja kanali järgi. See sorteerib asjakohasuse või vaatamiste arvu järgi. Praktikas katab see enamiku stsenaariume alates konkreetse kanali videovoost kuni viimase kuu „wordpress tutorial" kogumikuni.

Allpool on samm-sammuline juhend koos reaalajas päringunäidete ja PHP koodiga. Lõpuks on teil töötav otsingumoodul: struktureeritud JSON sisse, videogalerii välja, null kolmanda osapoole teeki.

💡 Kiire ülevaade:

  • Looge Google Cloudi konsoolis projekt, lubage YouTube Data API v3 ja hankige API võti.
  • Koostage otsingupäringu URL: lõpp-punkt /youtube/v3/search, nõutavad parameetrid part=snippet, key ja q (alates juunist 2025 on q nõutav; ilma selleta tagastab API tühja massiivi).
  • Lisage filtrid: type (video/channel/playlist), channelId, publishedAfter/publishedBefore, maxResults, order, videoDuration, videoEmbeddable.
  • Käivitage päring cURL-i abil PHP-s, parsige JSON-vastus, kuvage tulemused ja seadistage vahemälu WordPressi transientide kaudu.

1. Samm: API võtme hankimine

Ilma võtmeta ei välju ühtegi API päringut. Võti on seotud projektiga Google Cloud Console'is ja tuvastab teie rakenduse; pole vaja midagi keerulisemat kui Google'i kontole sisselogimine.

Tehke järgmist:

  • Avage Google Cloud Console ja looge uus projekt või valige olemasolev.
  • Minge jaotisesse APIs & Services → Library, otsige „YouTube Data API v3" ja klõpsake Enable.
  • Avage APIs & Services → Credentials, klõpsake Create Credentials → API Key.
  • Kopeerige võti. Seadke kohe piirang: Restrict Key → YouTube Data API v3, et võtit ei saaks kasutada teiste Google'i teenuste jaoks.

Võti näeb välja nagu string AIzaSyD-... ja edastatakse igas päringus key parameetri kaudu. Avaliku video otsinguks sellest piisab; OAuthi pole vaja. Kui aga plaanite päringuid kasutaja nimel (video üleslaadimine, esitusloendi haldamine), vajate OAuth 2.0.

Kiirtest: saatke GET-päring search lõpp-punkti suvalise otsinguterminiga. Kui saate JSON-i koos items massiiviga, siis võti töötab.

2. Samm: Otsingupäringu URL ja nõutavad parameetrid

Otsingu lõpp-punkt:

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

Kaks parameetrit on alati nõutavad:

Parameeter

Eesmärk

part

Millised ressursi atribuudid vastusesse kaasata. Otsingu jaoks vajate snippet-i. Snippet sisaldab pealkirja, kirjeldust, pisipilte ja channelTitle'i.

key

Teie API võti.

q

Otsingupäring. Aktsepteerib vaba teksti, täpselt nagu youtube.com-i otsinguriba.

Parameeter q aktsepteerib vaba teksti, täpselt nagu youtube.com-i otsinguriba. Saate edastada mitu sõna, eraldades need tühikute või plussmärkidega: q=wordpress+speed+optimization. Tähesuurus ei ole oluline.

Minimaalne töötav päring:

1https://www.googleapis.com/youtube/v3/search?part=snippet&q=wordpress&key=YOUR_KEY

See tagastab 5 tulemust (vaikimisi), mida API tagastab, kui maxResults pole üle kirjutatud.

Parameeter type kitsendab otsitava ressursi tüüpi:

  • video, ainult videod;
  • channel, ainult kanalid;
  • playlist, ainult esitusloendid.

Saate loetleda mitu väärtust komadega eraldatult: type=video,channel. Kui see jätta välja, otsib API kõike. Ülejäänud parameetrid on valikulised, kuid need muudavad toore päringu täpseks tööriistaks.

3. Samm: Videote otsimine märksõnade järgi

Klassikaline stsenaarium: kasutaja sisestab teie saidil otsingufraasi, te saadate selle YouTube'i API-le ja kuvate valiku videoid.

Näidispäring videote otsimiseks sõnaga „swimming":

1https://www.googleapis.com/youtube/v3/search?part=snippet&q=swimming&type=video&key=YOUR_KEY

Vastus tuleb JSON-is. items[] sees on leitud ressursside massiiv. Iga video kohta on teil:

  • id.videoId, unikaalne identifikaator (ühendatakse URL-i https://www.youtube.com/watch?v=...);
  • snippet.title, video pealkiri;
  • snippet.description, kirjeldus;
  • snippet.thumbnails, eelvaated mitmes resolutsioonis (default, medium, high);
  • snippet.channelTitle, kanali nimi.

PHP-s on lihtsaim viis vastuse toomiseks file_get_contents. Siin on minimaalne töötluskood:

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 sobib testide ja väikeste projektide jaoks. Tootmiskeskkonnas kasutage cURL-i: see annab teile kontrolli ajalõppude, päiste ja veakäsitluse üle. Ja jah, kui allow_url_fopen on teie hostingus keelatud, ei tööta file_get_contents väliste URL-ide puhul. Sel juhul on cURL teie ainus võimalus.

4. Samm: Videote toomine konkreetselt kanalilt

Kõigi videote kogumiseks kanalilt edastage parameeter channelId. Kanali identifikaatori leidmine on lihtne: avage YouTube'is kanali leht ja kopeerige aadressiribalt väärtus pärast /channel/ (näiteks UC3VyA8KN_VgCF93EurnAQXw).

Päring:

1https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UC3VyA8KN_VgCF93EurnAQXw&type=video&order=date&key=YOUR_KEY

Parameeter order=date sorteerib avaldamiskuupäeva järgi, uusimad eespool. Ilma selleta tagastab API kõige asjakohasemad tulemused, kuid kanali voo jaoks on kronoloogiline järjestus mõistlikum.

Sama päring PHP-s cURL-i ja põhilise veakäsitlusega:

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}

Kanalil võib olla sadu videoid, kuid üks päring ei tagasta rohkem kui 50. Kõige toomiseks kasutage API vastuse välja pageToken: edastage selle väärtus järgmises päringus kui pageToken=<token>. Korrake, kuni nextPageToken on tühi.

5. Samm: Piirangud, sorteerimine ja kvoodid

Päris saidil vajate harva „kõiki päringu videoid". Sagedamini soovite viimase kuu top 10 või valikut, mis välistab Shorts'id. Selleks pakub API viit täpsustavat parameetrit.

maxResults: mitu üksust tagastada. Lubatud väärtused: 1 kuni 50. Vaikimisi on 5. Galerii või voo jaoks seadke 20-30, kuid pidage silmas kvoote.

order: sorteerimisväli:

Väärtus

Mida see teeb

relevance

Asjakohasuse järgi päringule (vaikimisi)

date

Uusimad eespool

rating

Hinnangu järgi (meeldimised/mittemeeldimised)

viewCount

Vaatamiste arvu järgi

title

Tähestikulises järjekorras pealkirja järgi

publishedAfter** / **publishedBefore: filtreerimine avaldamiskuupäeva järgi. Vorming: ISO 8601 (RFC 3339). Näide: publishedAfter=2026-01-01T00:00:00Z. Lõikab ära arhiveeritud videod, kui vajate ainult värsket sisu.

videoDuration: filtreerimine pikkuse järgi:

  • short, alla 4 minuti;
  • medium, 4 kuni 20 minutit;
  • long, üle 20 minuti;
  • määramata, kõik.

videoEmbeddable väärtusega true valib ainult videod, mis on lubatud manustamiseks kolmandate osapoolte saitidel. Saidi jaoks, mis manustab YouTube'i pleieri, on see nõutav parameeter.

Kombineeritud päring: 10 manustatavat videot WordPressi kohta, mitte vanemad kui 2026, pikemad kui 4 minutit, sorteeritud vaatamiste arvu järgi:

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

Kvoodid: kuidas vältida tühja ekraani

Iga search.list kutse maksab 100 ühikut teie päevakvoodist. Vaikimisi saab Google Cloudi projekt tasuta 10 000 ühikut päevas, mis on umbes 100 otsingukutset. Rohkem kui saja külastajaga saidi jaoks päevas sellest ei piisa.

Lahendus on API vastuste vahemällu salvestamine. WordPressis töötavad selleks suurepäraselt transientid:

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...

Kuuetunnine transient tähendab maksimaalselt 4 API päringut päevas ühe otsingufraasi kohta. Isegi kümne erineva päringuga saidi lehtedel jääte alla 40 kutse, mis on vähem kui pool päevakvoodist. Kui vajate rohkem, taotlege kvoodi suurendamist Google Cloud Console'i kaudu: Quotas → YouTube Data API v3 → Edit.

Ülaltoodud reaalajas näide näitab, kuidas ehitada kanali videogalerii Data API v3 kaudu PHP-s 15 minutiga.

⁉️🤔 Korduma kippuvad küsimused

Kas YouTube'i API kaudu videote otsimiseks on vaja OAuthi?

Ei. Otsingupäringuteks aadressile /youtube/v3/search piisab API võtmest. OAuth on nõutav ainult kasutajataseme toiminguteks: videote üleslaadimine, esitusloendite haldamine, tellimused. API võti saadakse Google Cloud Console'is paari minutiga ja seda saab kohe kasutada.

Mitu päringut päevas saab tasuta teha?

Iga Google Cloudi projekt saab tasuta 10 000 kvoodiühikut päevas. Üks search.list kutse maksab 100 ühikut, seega umbes 100 otsingupäringut päevas. WordPressi transientidega vahemällu salvestamisel on see keskmise saidi jaoks piisav. Kui vajate rohkem, taotlege kvoodi suurendamist Google Cloud Console'i kaudu (Quotas jaotis).

Kuidas saada ühest päringust rohkem kui 50 tulemust?

Lehekülgede kaupa. JSON-vastuses tagastab API välja nextPageToken. Edastage selle väärtus parameetrina pageToken järgmises päringus, et saada järgmine leht. Korrake, kuni nextPageToken on tühi. Täielik läbimine kanalist, kus on 500 videot, võtab 10 päringut ja 1000 kvoodiühikut.

Kas ma saan otsida videoid muudes keeltes peale inglise keele?

Jah. Parameeter q aktsepteerib mis tahes keelt, sealhulgas vene keelt. YouTube'i otsingualgoritm määrab keele asjakohasuse automaatselt. Kitsendamise sundimiseks lisage parameeter relevanceLanguage=ru; tulemused järjestatakse venekeelse sisu kasuks.

Miks tagastab API tühja massiivi, kuigi päring on korrektne?

Kõige levinum põhjus: publishedAfter on seatud tulevasele kuupäevale või tänasele kuupäevale koos täpse kellaajaga. Kasutage päeva algust: T00:00:00Z. Teine põhjus: filtrite kombinatsioon, mis välistab kõik tulemused. Näiteks videoDuration=long ja videoEmbeddable=true koos väikese kanali channelId-ga võivad anda null vastet. Lihtsustage päringut kuni part=snippet&q=...&key=... ja lisage filtreid ükshaaval, kontrollides tulemusi igal sammul.

Otsingu ehitamine tunniga: millised tööriistad millise ülesande jaoks sobivad

Teie tööriistade valik sõltub sellest, mida täpselt ehitate. Kui vajate lihtsat videogaleriid väikeettevõtte saidi kanali jaoks, haarake valmis PHP wrapper nagu madcoda/php-youtube-api: Composer'i pakett, kolm rida koodi, tulemus viie minutiga. Kui ehitate kohandatud otsingut koos filtrite, vahemälu ja lehekülgede jagamisega, kirjutage oma töötleja, kasutades cURL-i ja WordPressi transiente. Suure liiklusega saidi jaoks, kus on kümneid tuhandeid külastajaid, lisage Redis'e vahemälu kiht transientide peale ja seadistage taustsünkroniseerimine WP-Croni kaudu; siis laaduvad lehed millisekunditega ja API kvoote kulutatakse ainult vahemälu tühjendamisele.

Teil on juba API võti olemas. Vahemälu on seadistatud. Jääb üle vaid oma ülesande jaoks URL kokku panna ja väljundtsükkel kirjutada. Tulemuseks on reaalajas videovoog, mis ei sõltu kolmandate osapoolte teenustest ega ületa kvoodipiiranguid.