{"id":28668,"date":"2021-05-29T15:28:00","date_gmt":"2021-05-29T12:28:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28668"},"modified":"2021-10-18T03:38:59","modified_gmt":"2021-10-18T00:38:59","slug":"youtube-api-jak-uzyskac-liste-filmow-z-youtube-na-swoim-kanale","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/youtube-api-jak-uzyskac-liste-filmow-z-youtube-na-swoim-kanale\/","title":{"rendered":"YouTube API \u2014 jak uzyska\u0107 list\u0119 film\u00f3w z YouTube na swoim kanale"},"content":{"rendered":"<p>Ostatnio jeden z naszych czytelnik\u00f3w zapyta\u0142, jak zdoby\u0107 list\u0119 film\u00f3w z kana\u0142u YouTube? Chcieli pokaza\u0107 list\u0119 swoich film\u00f3w w formacie tabelarycznym. W tym artykule dowiemy si\u0119, jak korzysta\u0107 z interfejsu API YouTube, aby uzyska\u0107 list\u0119 film\u00f3w YouTube z Twojego kana\u0142u.<\/p>\n<p>U\u017cytkownik mo\u017ce zobaczy\u0107 wszystkie swoje filmy w samej witrynie YouTube. Ale je\u015bli chcesz udost\u0119pni\u0107 list\u0119 film\u00f3w komu\u015b innemu, musisz zachowa\u0107 te dane w trybie offline. Z drugiej strony niekt\u00f3rzy u\u017cytkownicy mog\u0105 chcie\u0107 wy\u015bwietli\u0107 list\u0119 film\u00f3w na swojej stronie internetowej.<\/p>\n<p>Bior\u0105c to pod uwag\u0119, sp\u00f3jrzmy, jak uzyska\u0107 list\u0119 film\u00f3w z YouTube za pomoc\u0105 interfejsu API YouTube.<\/p>\n<p><strong>Uwaga:<\/strong> Korzystaj\u0105c z kodu tego artyku\u0142u, mo\u017cesz r\u00f3wnie\u017c uzyska\u0107 list\u0119 film\u00f3w dowolnego kana\u0142u YouTube, podaj\u0105c prawid\u0142owy identyfikator kana\u0142u YouTube.<\/p>\n<h3>Uzyskaj klucz API<\/h3>\n<p>Aby rozpocz\u0105\u0107 korzystanie z interfejsu API YouTube, musisz najpierw utworzy\u0107 klucz API na swoim koncie Google. Ten klucz jest niezb\u0119dny podczas interakcji z interfejsami API YouTube. Bez tego klucza YouTube traktuje wszystkie przychodz\u0105ce \u017c\u0105dania API jako nieautoryzowane.<\/p>\n<p>Wykonaj poni\u017csze czynno\u015bci, aby utworzy\u0107 klucz API.<\/p>\n<ul>\n<li>Przejd\u017a do Konsoli programisty Google <a href=\"https:\/\/console.developers.google.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><a href=\"https:\/\/console.developers.google.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/console.developers.google.com<\/a>.<\/li>\n<li>Utw\u00f3rz nowy projekt. Mo\u017cesz r\u00f3wnie\u017c wybra\u0107 istniej\u0105cy projekt.<\/li>\n<li>Wpisz nazw\u0119 swojego projektu. Konsola Google utworzy unikalny identyfikator projektu.<\/li>\n<li>Po utworzeniu projektu pojawi si\u0119 on na g\u00f3rze lewego paska bocznego.<\/li>\n<li>Kliknij Biblioteka. Zobaczysz list\u0119 interfejs\u00f3w Google API.<\/li>\n<li>W\u0142\u0105cz interfejs API danych YouTube.<\/li>\n<li>Kliknij po\u015bwiadczenia. Wybierz klucz API w obszarze Utw\u00f3rz po\u015bwiadczenia.<\/li>\n<li>Skopiuj klucz API. Za chwil\u0119 b\u0119dzie nam potrzebny.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20424-6081ef644e221.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20424-6081ef644e221.png\" alt=\"YouTube API \u2014 jak uzyska\u0107 list\u0119 film\u00f3w z YouTube na swoim kanale\" ><\/a><\/p>\n<h3>Uzyskaj list\u0119 film\u00f3w z YouTube<\/h3>\n<p>Gdy b\u0119dziesz gotowy z kluczem API, utw\u00f3rz 3 pliki w swoim projekcie. Te pliki oznaczaj\u0105 konfiguracj\u0119 i metody pomocnicze, obs\u0142ug\u0119 Ajax i wy\u015bwietlaj\u0105 wynik ko\u0144cowy.<\/p>\n<ul>\n<li><code>config.php<\/code>: W tym pliku ustawiamy klucz API jako sta\u0142\u0105. Posiada r\u00f3wnie\u017c metod\u0119 pomocnicz\u0105, kt\u00f3ra daje wywo\u0142anie API i otrzymuje odpowied\u017a.<\/li>\n<li><code>ajax.php<\/code>: Ten plik wywo\u0142a API, aby uzyska\u0107 nast\u0119pny zestaw wynik\u00f3w, pod warunkiem, \u017ce maksymalna liczba wynik\u00f3w zostanie zwr\u00f3cona.<\/li>\n<li><code>index.php<\/code>: Zawiera formularz, kod dla po\u0142\u0105czenia Ajax, wy\u015bwietla list\u0119 wideo.<\/li>\n<\/ul>\n<p>W <code>config.php<\/code>pliku zadeklarujmy klucz API jako zmienn\u0105 sta\u0142\u0105. Definiujemy r\u00f3wnie\u017c metod\u0119 pomocnika, kt\u00f3ra wsp\u00f3\u0142dzia\u0142a z punktami ko\u0144cowymi API.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\ndefine('GOOGLE_API_KEY', 'PASTE_YOUR_API_KEY');\n\u00a0\nfunction getYTList($api_url = '') {\n\u00a0\u00a0\u00a0\u00a0$ch = curl_init();\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_URL, $api_url);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\u00a0\u00a0\u00a0\u00a0$response = curl_exec($ch);\n\u00a0\u00a0\u00a0\u00a0$arr_result = json_decode($response);\n\u00a0\u00a0\u00a0\u00a0if (isset($arr_result-&gt;items)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $arr_result;\n\u00a0\u00a0\u00a0\u00a0} elseif (isset($arr_result-&gt;error)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/var_dump($arr_result); \/\/this line gives you error info if you are not getting a video list.\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Pami\u0119taj, aby zast\u0105pi\u0107 symbol zast\u0119pczy rzeczywistym kluczem API. Musisz tak\u017ce mie\u0107 w\u0142\u0105czone rozszerzenie cURL na swoim serwerze.<\/p>\n<h4>Utw\u00f3rz formularz<\/h4>\n<p>Nast\u0119pnie potrzebujemy prostego formularza, w kt\u00f3rym mo\u017cemy wpisa\u0107 identyfikator kana\u0142u YouTube i liczb\u0119 film\u00f3w do zwr\u00f3cenia. YouTube API zwraca jednocze\u015bnie maksymalnie 50 film\u00f3w.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;form method=\"get\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"text\" name=\"channel\" placeholder=\"Enter Channel ID\" value=\"&lt;?php if(array_key_exists('channel', $_GET)) echo $_GET['channel']; ?&gt;\" required&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"number\" name=\"max_result\" placeholder=\"Max Results\" min=\"1\" max=\"50\" value=\"&lt;?php if(array_key_exists('max_result', $_GET)) echo $_GET['max_result']; ?&gt;\" required&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"submit\" value=\"Submit\"&gt;&lt;\/p&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Po przes\u0142aniu formularza przesy\u0142am identyfikator kana\u0142u i max_result metod\u0105 GET. Wi\u0119c na g\u00f3rze tego samego pliku napisz\u0119 kod w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code>&lt;?php\nrequire_once \"config.php\";\n\u00a0\n$arr_list = array();\nif (array_key_exists('channel', $_GET) &amp;&amp; array_key_exists('max_result', $_GET)) {\n\u00a0\u00a0\u00a0\u00a0$channel = $_GET['channel'];\n\u00a0\u00a0\u00a0\u00a0$url = \"https:\/\/www.googleapis.com\/youtube\/v3\/search?channelId=$channel&amp;order=date&amp;part=snippet&amp;type=video&amp;maxResults=\". $_GET['max_result'] .\"&amp;key=\". GOOGLE_API_KEY;\n\u00a0\u00a0\u00a0\u00a0$arr_list = getYTList($url);\n}\n?&gt;<\/code><\/pre>\n<p>Ten kod zawiera plik konfiguracyjny, pobiera parametry, buduje adres URL API, a nast\u0119pnie przekazuje go do metody pomocniczej, kt\u00f3r\u0105 utworzyli\u015bmy w poprzednim kroku. Aby wy\u015bwietli\u0107 wynik, dodaj poni\u017cszy kod po formularzu.<\/p>\n<p>Nie zamierzam skupia\u0107 si\u0119 na projektowaniu listy. G\u0142\u00f3wnym celem samouczka jest pobieranie film\u00f3w z YouTube. Wy\u015bwietl\u0119 to w formie listy.<\/p>\n<pre><code>&lt;?php\nif (!empty($arr_list)) {\n\u00a0\u00a0\u00a0\u00a0echo '&lt;ul class=\"video-list\"&gt;';\n\u00a0\u00a0\u00a0\u00a0foreach ($arr_list-&gt;items as $yt) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"&lt;li&gt;\". $yt-&gt;snippet-&gt;title .\" (\". $yt-&gt;id-&gt;videoId .\")&lt;\/li&gt;\";\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0echo '&lt;\/ul&gt;';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (isset($arr_list-&gt;nextPageToken)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo '&lt;input type=\"hidden\" class=\"nextpagetoken\" value=\"'. $arr_list-&gt;nextPageToken .'\" \/&gt;';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo '&lt;div id=\"loadmore\"&gt;Load More&lt;\/div&gt;';\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>Tutaj przegl\u0105damy filmy i drukujemy tytu\u0142 wideo i identyfikator wideo. Je\u015bli otrzymamy warto\u015b\u0107 'nextPageToken&#8217; dodajemy ukryte pole i element Load More. Dzieje si\u0119 tak, poniewa\u017c je\u015bli masz wi\u0119cej ni\u017c 50 film\u00f3w na kanale, mo\u017cemy uzyska\u0107 nast\u0119pny zestaw rekord\u00f3w przy u\u017cyciu tej warto\u015bci \u201enextPageToken&quot;. Nast\u0119pnie musimy wywo\u0142a\u0107 Ajax po klikni\u0119ciu Load More.<\/p>\n<h4>Po\u0142\u0105czenie Ajaksu<\/h4>\n<p>Kiedy klikniemy Load More, wywo\u0142a to <code>ajax.php<\/code>plik. Ten plik da nam nast\u0119pny zestaw rekord\u00f3w, kt\u00f3ry zostanie nast\u0119pnie do\u0142\u0105czony do istniej\u0105cego wpisu. Napisz poni\u017cszy kod JavaScript na ko\u0144cu <code>index.php<\/code>pliku.<\/p>\n<pre><code>&lt;script&gt;\nvar httpRequest, nextPageToken;\ndocument.getElementById(\"loadmore\").addEventListener('click', makeRequest);\nfunction makeRequest() {\n\u00a0\u00a0\u00a0\u00a0httpRequest = new XMLHttpRequest();\n\u00a0\u00a0\u00a0\u00a0nextPageToken = document.querySelector('.nextpagetoken').value;\n\u00a0\u00a0\u00a0\u00a0if (!httpRequest) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alert('Giving up: Cannot create an XMLHTTP instance');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0httpRequest.onreadystatechange = function(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (this.readyState == 4 &amp;&amp; this.status == 200) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var list = JSON.parse(this.responseText);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for(var i in list) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(list[i].title != undefined &amp;&amp; list[i].id != undefined) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var newElement = document.createElement('li');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0newElement.innerHTML = '&lt;li&gt;'+ list[i].title +'('+ list[i].id +')&lt;\/li&gt;';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0document.querySelector('.video-list').appendChild(newElement);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(list[list.length-1].nextPageToken != undefined) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0document.querySelector('.nextpagetoken').value = list[list.length-1].nextPageToken;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var loadmore = document.getElementById(\"loadmore\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0loadmore.parentNode.removeChild(loadmore);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0httpRequest.open('GET', 'ajax.php?channel=&lt;?php echo $_GET['channel']; ?&gt;&amp;max_result=&lt;?php echo $_GET['max_result']; ?&gt;&amp;nextPageToken='+nextPageToken, true);\n\u00a0\u00a0\u00a0\u00a0httpRequest.send();\n}\n&lt;\/script&gt;<\/code><\/pre>\n<p>W tym artykule u\u017cywam waniliowego JavaScript do wywo\u0142ania ajax i do\u0142\u0105czania odpowiedzi do DOM. Do pliku ajax wysy\u0142am warto\u015bci id kana\u0142u, max_result i 'nextPageToken&#8217;.<\/p>\n<p>W pliku ajax za pomoc\u0105 tych parametr\u00f3w budujemy URL API. Po otrzymaniu odpowiedzi utworzymy obiekt JSON zawieraj\u0105cy informacje o filmie i ode\u015blemy go z powrotem. Do ko\u0144cowego JSON do\u0142\u0105czam r\u00f3wnie\u017c warto\u015b\u0107 \u201enextPageToken&#8221;, aby uzyska\u0107 nast\u0119pny zestaw rekord\u00f3w w kolejnych wywo\u0142aniach Ajax.<\/p>\n<p><strong>ajax.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"config.php\";\n\u00a0\n$url = \"https:\/\/www.googleapis.com\/youtube\/v3\/search?channelId=\". $_GET['channel'] .\"&amp;order=date&amp;part=snippet&amp;type=video&amp;maxResults=\". $_GET['max_result'] .\"&amp;pageToken=\". $_GET['nextPageToken'] .\"&amp;key=\". GOOGLE_API_KEY;\n\u00a0\n$arr_list = getYTList($url);\n\u00a0\n$arr_result = array();\nif (!empty($arr_list)) {\n\u00a0\u00a0\u00a0\u00a0foreach ($arr_list-&gt;items as $yt) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array_push($arr_result, ['title' =&gt; $yt-&gt;snippet-&gt;title, 'id' =&gt; $yt-&gt;id-&gt;videoId]);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0if (isset($arr_list-&gt;nextPageToken)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array_push($arr_result, ['nextPageToken' =&gt; $arr_list-&gt;nextPageToken]);\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\necho json_encode($arr_result);<\/code><\/pre>\n<p>Nasz kod JavaScript otrzymuje t\u0119 odpowied\u017a JSON i do\u0142\u0105cza wynik do istniej\u0105cej listy film\u00f3w w YouTube. Ten proces trwa, dop\u00f3ki nie znajdziemy warto\u015bci \u201enextPageToken&#8221;.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak uzyska\u0107 list\u0119 film\u00f3w z kana\u0142u YouTube. Podziel si\u0119 swoimi przemy\u015bleniami lub sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-korzystac-z-interfejsu-api-youtube-do-przesylania-filmow-na-kanal-youtube\/\" title=\"Jak korzysta\u0107 z interfejsu API YouTube do przesy\u0142ania wideo na kana\u0142 YouTube?\">Jak korzysta\u0107 z interfejsu API YouTube do przesy\u0142ania wideo na kana\u0142 YouTube?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/uzyskaj-liste-filmow-z-youtube-wedlug-slow-kluczowych-za-pomoca-interfejsu-api-wyszukiwania-youtube\/\" title=\"Jak uzyska\u0107 list\u0119 film\u00f3w YouTube wed\u0142ug s\u0142\u00f3w kluczowych za pomoc\u0105 interfejsu API wyszukiwania YouTube YouTube\">Jak uzyska\u0107 list\u0119 film\u00f3w YouTube wed\u0142ug s\u0142\u00f3w kluczowych za pomoc\u0105 interfejsu API wyszukiwania YouTube YouTube<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-dodac-logowanie-google-oauth-do-witryny-za-pomoca-php\/\" title=\"Jak doda\u0107 logowanie Google OAuth do witryny za pomoc\u0105 PHP\">Jak doda\u0107 logowanie Google OAuth do witryny za pomoc\u0105 PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym artykule dowiemy si\u0119, jak uzyska\u0107 list\u0119 film\u00f3w z YouTube za pomoc\u0105 interfejsu API YouTube. Mo\u017cesz chcie\u0107 wy\u015bwietli\u0107 list\u0119 film\u00f3w, aby wy\u015bwietli\u0107 j\u0105 na stronie internetowej<\/p>\n","protected":false},"author":1,"featured_media":21640,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-28668","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28668"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28668\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21640"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}