{"id":29173,"date":"2021-06-08T17:42:00","date_gmt":"2021-06-08T14:42:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29173"},"modified":"2021-10-18T03:36:13","modified_gmt":"2021-10-18T00:36:13","slug":"jak-korzystac-z-interfejsu-api-youtube-do-przesylania-filmow-na-kanal-youtube","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-korzystac-z-interfejsu-api-youtube-do-przesylania-filmow-na-kanal-youtube\/","title":{"rendered":"Jak korzysta\u0107 z interfejsu API YouTube do przesy\u0142ania film\u00f3w na kana\u0142 YouTube"},"content":{"rendered":"<p>Wszyscy wiedz\u0105 o YouTube. YouTube to najlepsza platforma do udost\u0119pniania film\u00f3w na \u015bwiecie. Mo\u017cemy u\u017cywa\u0107 YouTube do hostowania naszych film\u00f3w. Oszcz\u0119dza to nam du\u017co miejsca na serwerze i mo\u017cna \u0142atwo umie\u015bci\u0107 film z YouTube na stronie internetowej. Ka\u017cdy mo\u017ce przes\u0142a\u0107 film na YouTube. Wszystko, co musisz zrobi\u0107, to zalogowa\u0107 si\u0119 na swoje konto YouTube i przes\u0142a\u0107 film. Prosty i nieskomplikowany proces. Ale co, je\u015bli kto\u015b musi przesy\u0142a\u0107 filmy za po\u015brednictwem interfejsu API YouTube na kana\u0142 YouTube? Czy to mo\u017cliwe? Tak to mozliwe. W tym artykule dowiemy si\u0119, jak u\u017cywa\u0107 interfejsu API YouTube do przesy\u0142ania wideo za pomoc\u0105 PHP.<\/p>\n<h3>Zarejestruj aplikacj\u0119 i utw\u00f3rz po\u015bwiadczenia<\/h3>\n<p>Aby rozpocz\u0105\u0107 korzystanie z interfejsu YouTube API, potrzebujesz konta Google. Po za\u0142o\u017ceniu konta Google zarejestruj aplikacj\u0119 i uzyskaj klucze API.<\/p>\n<p>Poni\u017cej znajduj\u0105 si\u0119 kroki, aby zarejestrowa\u0107 aplikacj\u0119 i uzyska\u0107 klucze 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 identyfikator klienta Oauth w obszarze Utw\u00f3rz po\u015bwiadczenia. Wybierz przycisk radiowy dla aplikacji internetowej.<\/li>\n<li>Podaj imi\u0119. W obszarze Autoryzowane \u017ar\u00f3d\u0142a JavaScript wpisz adres URL swojej domeny. W Autoryzowanych identyfikatorach URI przekierowania podaj link do adresu URL przekierowania. W moim przypadku przekaza\u0142em adres URL <a href=\"http:\/\/localhost\/youtube\/callback.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http:\/\/localhost\/youtube\/callback.php<\/a>.<\/li>\n<li>Kliknij przycisk Utw\u00f3rz. W wyskakuj\u0105cym okienku otrzymasz identyfikator klienta i klucz klienta. Skopiuj te dane. Za chwil\u0119 b\u0119dzie nam potrzebny.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20298-6081da1616456.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-20298-6081da1616456.png\" alt=\"Jak korzysta\u0107 z interfejsu API YouTube do przesy\u0142ania film\u00f3w na kana\u0142 YouTube\" ><\/a><\/p>\n<h3>Skonfiguruj konfiguracj\u0119 podstawow\u0105<\/h3>\n<p>Przesy\u0142anie wideo za pomoc\u0105 interfejsu API YouTube wymaga utworzenia tokena dost\u0119pu. Token dost\u0119pu to nic innego jak identyfikator konta YouTube.<\/p>\n<p>Ale token dost\u0119pu wygasa po pewnym czasie. Gdy token dost\u0119pu wyga\u015bnie, pojawi si\u0119 b\u0142\u0105d \u201eNieautoryzowany dost\u0119p&quot;. Rozwi\u0105zaniem jest ponowne uruchomienie procesu autoryzacji lub ponowne wygenerowanie tokena dost\u0119pu w tle i zako\u0144czenie procesu przesy\u0142ania. W tym artykule wybieram drugie rozwi\u0105zanie. Zregenerujemy token dost\u0119pu, je\u015bli wygas\u0142 w tle, bez przerywania procesu przesy\u0142ania. Dzi\u0119ki temu nie musisz wielokrotnie wykonywa\u0107 procesu autoryzacji.<\/p>\n<p>Bior\u0105c to pod uwag\u0119, musisz najpierw autoryzowa\u0107 konto, aby wygenerowa\u0107 token dost\u0119pu. Wykorzystam bibliotek\u0119 <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth<\/a> do autoryzacji i wygenerowania tokena dost\u0119pu. Otw\u00f3rz sw\u00f3j <code>composer.json<\/code>plik i dodaj do niego poni\u017csze wiersze.<\/p>\n<pre><code>{\n\u00a0\u00a0\u00a0\u00a0\"require\": {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"google\/apiclient\": \"2.0\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"hybridauth\/hybridauth\": \"~3.0\"\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Zanotuj YouTube to produkt Google, a API YouTube to nic innego jak interfejs API Google. Dlatego u\u017cywamy biblioteki \u201egoogle\/apiclient&#8221;. Nast\u0119pnie uruchom poni\u017csze polecenie, aby zainstalowa\u0107 te biblioteki.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<h4>Konfiguracja bazy danych<\/h4>\n<p>Przy ka\u017cdym wywo\u0142aniu API musimy wys\u0142a\u0107 token dost\u0119pu, wi\u0119c przechowuj go w bazie danych. Utw\u00f3rz tabel\u0119 \u201etoken&#8221; w swojej bazie danych, korzystaj\u0105c z poni\u017cszego zapytania.<\/p>\n<pre><code>CREATE TABLE `token` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`access_token` text NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4<\/code><\/pre>\n<p>W dalszej cz\u0119\u015bci tego artyku\u0142u musimy wchodzi\u0107 w interakcj\u0119 z t\u0105 tabel\u0105 \u201etoken\u00f3w&#8221;, aby pobra\u0107 i zaktualizowa\u0107 szczeg\u00f3\u0142y token\u00f3w. Wymaga to napisania po\u0142\u0105czenia z baz\u0105 danych i kilku zapyta\u0144. Utw\u00f3rz plik <code>class-db.php<\/code>i dodaj do niego nast\u0119puj\u0105cy kod.<\/p>\n<p><strong>klasa-db.php<\/strong><\/p>\n<pre><code>&lt;?php\nclass DB {\n\u00a0\u00a0\u00a0\u00a0private $dbHost\u00a0\u00a0\u00a0\u00a0 = \"DB_HOST\";\n\u00a0\u00a0\u00a0\u00a0private $dbUsername = \"DB_USERNAME\";\n\u00a0\u00a0\u00a0\u00a0private $dbPassword = \"DB_PASSWORD\";\n\u00a0\u00a0\u00a0\u00a0private $dbName\u00a0\u00a0\u00a0\u00a0 = \"DB_NAME\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!isset($this-&gt;db)){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Connect to the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$conn = new mysqli($this-&gt;dbHost, $this-&gt;dbUsername, $this-&gt;dbPassword, $this-&gt;dbName);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($conn-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die(\"Failed to connect with MySQL: \". $conn-&gt;connect_error);\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\u00a0$this-&gt;db = $conn;\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\n\u00a0\u00a0\u00a0\u00a0public function is_table_empty() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;db-&gt;query(\"SELECT id FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($result-&gt;num_rows) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_access_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sql = $this-&gt;db-&gt;query(\"SELECT access_token FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $sql-&gt;fetch_assoc();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return json_decode($result['access_token']);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_refersh_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $result-&gt;refresh_token;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function update_access_token($token) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($this-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"INSERT INTO token(access_token) VALUES('$token')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Przeka\u017c swoje po\u015bwiadczenia bazy danych w powy\u017cszym pliku. Zak\u0142adam, \u017ce chcesz u\u017cywa\u0107 jednego konta YouTube. Je\u015bli zamierzasz korzysta\u0107 z wielu kont, zmodyfikuj powy\u017csze zapytania zgodnie ze swoimi wymaganiami.<\/p>\n<h3>Wygeneruj token dost\u0119pu<\/h3>\n<p>Zainstalowa\u0142e\u015b biblioteki i utworzy\u0142e\u015b tabel\u0119 do przechowywania tokena. Teraz zr\u00f3bmy proces autoryzacji, pobierz token dost\u0119pu i zapisz go w tabeli \u201etoken&#8221;.<\/p>\n<p>Utw\u00f3rz <code>config.php<\/code>plik i napisz konfiguracj\u0119 zgodnie z wytycznymi biblioteki HybridAuth.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once 'class-db.php';\n\u00a0\ndefine('GOOGLE_CLIENT_ID', 'PASTE_CLIENT_ID_HERE');\ndefine('GOOGLE_CLIENT_SECRET', 'PASTE_CLIENT_SECRET_HERE');\n\u00a0\n$config = [\n\u00a0\u00a0\u00a0\u00a0'callback' =&gt; 'YOUR_DOMAIN_URL\/callback.php',\n\u00a0\u00a0\u00a0\u00a0'keys'\u00a0\u00a0\u00a0\u00a0 =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'id' =&gt; GOOGLE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; GOOGLE_CLIENT_SECRET\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0'scope'\u00a0\u00a0\u00a0 =&gt; 'https:\/\/www.googleapis.com\/auth\/youtube https:\/\/www.googleapis.com\/auth\/youtube.upload',\n\u00a0\u00a0\u00a0\u00a0'authorize_url_parameters' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'approval_prompt' =&gt; 'force', \/\/ to pass only when you need to acquire a new refresh token.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_type' =&gt; 'offline'\n\u00a0\u00a0\u00a0\u00a0]\n];\n\u00a0\n$adapter = new HybridauthProviderGoogle( $config );<\/code><\/pre>\n<p>Zast\u0105p symbole zast\u0119pcze rzeczywistymi warto\u015bciami swoich danych logowania Google. Dodaj ten sam adres URL wywo\u0142ania zwrotnego, kt\u00f3ry poda\u0142e\u015b podczas tworzenia aplikacji konsolowej. Oznacza to, \u017ce po zako\u0144czeniu procesu autoryzacji u\u017cytkownik przekieruje do <code>callback.php<\/code>pliku.<\/p>\n<p>W <code>callback.php<\/code>pliku pobierzemy szczeg\u00f3\u0142y tokena dost\u0119pu i zapiszemy go w bazie danych.<\/p>\n<p><strong>callback.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$adapter-&gt;authenticate();\n\u00a0\u00a0\u00a0\u00a0$token = $adapter-&gt;getAccessToken();\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0if($db-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($token));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Access token inserted successfully.\";\n\u00a0\u00a0\u00a0\u00a0}\n}\ncatch( Exception $e ){\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage() ;\n}<\/code><\/pre>\n<p>Przejd\u017a do przegl\u0105darki i uruchom YOUR_DOMAIN_URL\/callback.php, nast\u0105pi przekierowanie do konta Google, zako\u0144czysz proces autoryzacji i powiniene\u015b zobaczy\u0107 komunikat o powodzeniu. Sprawd\u017a tabel\u0119 bazy danych \u201etoken&#8221;. Powinna zawiera\u0107 dane Twojego tokena. A to oznacza, \u017ce \u200b\u200bmo\u017cesz przes\u0142a\u0107 film na sw\u00f3j kana\u0142 YouTube.<\/p>\n<h3>Prze\u015blij wideo na kana\u0142 YouTube za pomoc\u0105 interfejsu API YouTube<\/h3>\n<p>Otrzyma\u0142e\u015b token dost\u0119pu, kt\u00f3ry zostanie u\u017cyty do przes\u0142ania filmu na kana\u0142 YouTube za po\u015brednictwem Google API. Ale tak jak wspomnia\u0142em wcze\u015bniej, token dost\u0119pu wyga\u015bnie po jakim\u015b czasie i zregenerujemy go w tle bez ponownego proszenia o autoryzacj\u0119.<\/p>\n<p>Mo\u017cemy to zrobi\u0107 za pomoc\u0105 'refersh_token&#8217;. Je\u015bli spojrzysz na kolumn\u0119 \u201eaccess_token&#8221; w tabeli, zobaczysz, \u017ce zawiera ona r\u00f3wnie\u017c wpis \u201erefresh_token&#8221;. U\u017cywaj\u0105c \u201erefresh_token&#8221; wywo\u0142ujemy punkt ko\u0144cowy \u201e\/o\/oauth2\/token&#8221; i regenerujemy token dost\u0119pu w tle.<\/p>\n<p>Nast\u0119pnie potrzebujesz formularza HTML, za pomoc\u0105 kt\u00f3rego mo\u017cesz przegl\u0105da\u0107 wideo i wysy\u0142a\u0107 je na serwer w celu przes\u0142ania. Stw\u00f3rzmy prosty formularz HTML w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"text\" name=\"title\" placeholder=\"Enter Video Title\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;textarea name=\"summary\" cols=\"30\" rows=\"10\" placeholder=\"Video description\"&gt;&lt;\/textarea&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"file\"\/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Formularz ma 3 pola \u2013 tytu\u0142, opis i plik. Po przes\u0142aniu tego formularza film wideo powinien zosta\u0107 przes\u0142any na Tw\u00f3j kana\u0142 YouTube wraz z podanym tytu\u0142em i opisem.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\u00a0\u00a0\u00a0$arr_data = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title' =&gt; $_POST['title'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'summary' =&gt; $_POST['summary'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'video_path' =&gt; $_FILES['file']['tmp_name'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0upload_video_on_youtube($arr_data);\n}\n\u00a0\nfunction upload_video_on_youtube($arr_data) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$client = new Google_Client();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_token = (array) $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_token' =&gt; $arr_token['access_token'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'expires_in' =&gt; $arr_token['expires_in'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$client-&gt;setAccessToken($accessToken);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$service = new Google_Service_YouTube($client);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$video = new Google_Service_YouTube_Video();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$videoSnippet = new Google_Service_YouTube_VideoSnippet();\n\u00a0\u00a0\u00a0\u00a0$videoSnippet-&gt;setDescription($arr_data['summary']);\n\u00a0\u00a0\u00a0\u00a0$videoSnippet-&gt;setTitle($arr_data['title']);\n\u00a0\u00a0\u00a0\u00a0$video-&gt;setSnippet($videoSnippet);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$videoStatus = new Google_Service_YouTube_VideoStatus();\n\u00a0\u00a0\u00a0\u00a0$videoStatus-&gt;setPrivacyStatus('public');\n\u00a0\u00a0\u00a0\u00a0$video-&gt;setStatus($videoStatus);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $service-&gt;videos-&gt;insert(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'snippet,status',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$video,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'data' =&gt; file_get_contents($arr_data['video_path']),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'mimeType' =&gt; 'video\/*',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'uploadType' =&gt; 'multipart'\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\u00a0\u00a0\u00a0\u00a0echo \"Video uploaded successfully. Video id is \". $response-&gt;id;\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/accounts.google.com']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/o\/oauth2\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; GOOGLE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; GOOGLE_CLIENT_SECRET,\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\u00a0$data = (array) json_decode($response-&gt;getBody());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['refresh_token'] = $refresh_token;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($data));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0upload_video_on_youtube($arr_data);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/echo $e-&gt;getMessage(); \/\/print the error just in case your video is not uploaded.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>Powy\u017cszy kod pobiera plik wideo z formularza HTML i przesy\u0142a go za po\u015brednictwem interfejsu API na Tw\u00f3j kana\u0142 YouTube. Je\u015bli Tw\u00f3j token dost\u0119pu wygas\u0142, ponownie generuje token w tle i kontynuuje proces bez jego \u0142amania.<\/p>\n<h3>Prze\u015blij niestandardow\u0105 miniatur\u0119 do filmu na YouTube<\/h3>\n<p>Je\u015bli tworzysz niestandardow\u0105 aplikacj\u0119, kt\u00f3ra zarz\u0105dza filmami z YouTube, prawdopodobnie chcesz przes\u0142a\u0107 miniatur\u0119 na film z YouTube. Aby przes\u0142a\u0107 niestandardow\u0105 miniatur\u0119, u\u017cytkownicy powinni zweryfikowa\u0107 sw\u00f3j numer telefonu na koncie YouTube. Odwied\u017a link<a href=\"https:\/\/www.youtube.com\/features\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><a href=\"https:\/\/www.youtube.com\/features\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/www.youtube.com\/features<\/a> i przeprowad\u017a weryfikacj\u0119 numeru telefonu.<\/p>\n<p>Po zweryfikowaniu numeru telefonu mo\u017cesz u\u017cy\u0107 naszego poprzedniego formularza i kodu z niewielkimi modyfikacjami i ustawi\u0107 niestandardow\u0105 miniatur\u0119 dla przes\u0142anego filmu. Najpierw dodaj pole formularza, kt\u00f3re umo\u017cliwia wgrywanie zdj\u0119\u0107. Zalecany rozmiar miniatury YouTube to <code>1280x720<\/code>.<\/p>\n<pre><code>&lt;p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;label&gt;Image&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"image\" accept=\"image\/*\" \/&gt;\n&lt;\/p&gt;<\/code><\/pre>\n<p>Na formularzu zg\u0142oszeniowym zbudowali\u015bmy tablic\u0119, <code>$arr_data<\/code>kt\u00f3ra zawiera wszystkie dane formularza. Dodaj now\u0105 par\u0119 dla obrazu do tablicy <code>$arr_data<\/code>w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>$arr_data = array(\n\u00a0\u00a0\u00a0\u00a0'title' =&gt; $_POST['title'],\n\u00a0\u00a0\u00a0\u00a0'summary' =&gt; $_POST['summary'],\n\u00a0\u00a0\u00a0\u00a0'video_path' =&gt; $_FILES['file']['tmp_name'],\n\u00a0\u00a0\u00a0\u00a0'image_path' =&gt; $_FILES['image']['tmp_name'], \/\/ here we are passing image\n);<\/code><\/pre>\n<p>Nast\u0119pnie, gdy nasz kod prze\u015ble wideo na YouTube, musimy pobra\u0107 identyfikator wideo i przypisa\u0107 do niego niestandardow\u0105 miniatur\u0119.<\/p>\n<pre><code>&lt;?php\n...\n...\necho \"Video uploaded successfully. Video id is \". $response-&gt;id;\n\u00a0\n\/\/upload thumbnail\n$videoId = $response-&gt;id;\n\u00a0\n$chunkSizeBytes = 1 * 1024 * 1024;\n\u00a0\n$client-&gt;setDefer(true);\n\u00a0\n$setRequest = $service-&gt;thumbnails-&gt;set($videoId);\n\u00a0\n$media = new Google_Http_MediaFileUpload(\n\u00a0\u00a0\u00a0\u00a0$client,\n\u00a0\u00a0\u00a0\u00a0$setRequest,\n\u00a0\u00a0\u00a0\u00a0'image\/png',\n\u00a0\u00a0\u00a0\u00a0null,\n\u00a0\u00a0\u00a0\u00a0true,\n\u00a0\u00a0\u00a0\u00a0$chunkSizeBytes\n);\n$imagePath = $arr_data['image_path'];\n$media-&gt;setFileSize(filesize($imagePath));\n\u00a0\n$status = false;\n$handle = fopen($imagePath, \"rb\");\n\u00a0\nwhile (!$status &amp;&amp; !feof($handle)) {\n\u00a0\u00a0\u00a0\u00a0$chunk\u00a0 = fread($handle, $chunkSizeBytes);\n\u00a0\u00a0\u00a0\u00a0$status = $media-&gt;nextChunk($chunk);\n}\n\u00a0\nfclose($handle);\n\u00a0\n$client-&gt;setDefer(false);\necho \"&lt;br&gt;Thumbanil: \". $status['items'][0]['default']['url'];<\/code><\/pre>\n<h3>Usu\u0144 wideo z kana\u0142u YouTube za pomoc\u0105 interfejsu API YouTube<\/h3>\n<p>Mo\u017cesz r\u00f3wnie\u017c chcie\u0107 kod do usuwania film\u00f3w za pomoc\u0105 interfejsu API YouTube. Aby usun\u0105\u0107 wideo, potrzebujesz dodatkowego zakresu, <code>https:\/\/www.googleapis.com\/auth\/youtube<\/code>kt\u00f3ry ju\u017c umie\u015bci\u0142em powy\u017cej w pliku konfiguracyjnym. Oznacza to, \u017ce token dost\u0119pu wygenerowany zgodnie z powy\u017cszymi krokami mo\u017ce zosta\u0107 u\u017cyty do usuni\u0119cia filmu.<\/p>\n<p>Poni\u017cej znajduje si\u0119 kod, kt\u00f3ry usunie film z Twojego kana\u0142u YouTube.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\ndelete_video('VIDEO_ID_HERE');\n\u00a0\nfunction delete_video($id) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$client = new Google_Client();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_token = (array) $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_token' =&gt; $arr_token['access_token'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'expires_in' =&gt; $arr_token['expires_in'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client-&gt;setAccessToken($accessToken);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$service = new Google_Service_YouTube($client);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$service-&gt;videos-&gt;delete($id);\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/accounts.google.com']);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/o\/oauth2\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; GOOGLE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; GOOGLE_CLIENT_SECRET,\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\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = (array) json_decode($response-&gt;getBody());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['refresh_token'] = $refresh_token;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($data));\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0delete_video($id);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/echo $e-&gt;getMessage(); \/\/print the error just in case your video is not uploaded.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Ot\u00f3\u017c \u200b\u200bto! Mam nadziej\u0119, \u017ce wiesz, jak przes\u0142a\u0107 film na kana\u0142 YouTube za pomoc\u0105 interfejsu API YouTube. Chcia\u0142bym us\u0142ysze\u0107 Twoje przemy\u015blenia lub sugestie 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-przeslac-wideo-na-youtube-w-aplikacji-laravel\/\" title=\"Jak przes\u0142a\u0107 wideo na YouTube w aplikacji Laravel\">Jak przes\u0142a\u0107 wideo na YouTube w aplikacji Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-uzyskac-tagi-wideo-youtube-za-pomoca-interfejsu-api-youtube\/\" title=\"Jak uzyska\u0107 tagi wideo YouTube za pomoc\u0105 interfejsu API YouTube?\">Jak uzyska\u0107 tagi wideo YouTube za pomoc\u0105 interfejsu API YouTube?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/youtube-api-jak-uzyskac-liste-filmow-z-youtube-na-swoim-kanale\/\" title=\"YouTube API \u2013 jak uzyska\u0107 list\u0119 film\u00f3w z YouTube na swoim kanale\">YouTube API \u2013 jak uzyska\u0107 list\u0119 film\u00f3w z YouTube na swoim kanale<\/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<\/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>Chcesz nauczy\u0107 si\u0119 API YouTube, aby przesy\u0142a\u0107 filmy? W tym artykule poka\u017cemy, jak zarejestrowa\u0107 aplikacj\u0119, utworzy\u0107 klucze API, zainstalowa\u0107 bibliotek\u0119 klienta Google.<\/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-29173","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\/29173","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=29173"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29173\/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=29173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}