{"id":29304,"date":"2021-06-08T17:24:00","date_gmt":"2021-06-08T14:24:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29304"},"modified":"2021-10-17T04:23:05","modified_gmt":"2021-10-17T01:23:05","slug":"hur-man-anvander-youtube-api-for-att-ladda-upp-video-pa-youtube-kanal","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/hur-man-anvander-youtube-api-for-att-ladda-upp-video-pa-youtube-kanal\/","title":{"rendered":"Hur man anv\u00e4nder YouTube API f\u00f6r att ladda upp video p\u00e5 YouTube-kanal"},"content":{"rendered":"<p>Alla vet om YouTube. YouTube \u00e4r den fr\u00e4msta plattformen f\u00f6r videodelning i v\u00e4rlden. Vi kan anv\u00e4nda YouTube f\u00f6r att vara v\u00e4rd f\u00f6r v\u00e5ra videor. Detta sparar oss mycket serverutrymme och man kan enkelt b\u00e4dda in YouTube-videon p\u00e5 webbplatsen. Vem som helst kan ladda upp videon p\u00e5 YouTube. Allt du beh\u00f6ver g\u00f6ra \u00e4r att bara logga in p\u00e5 ditt YouTube-konto och ladda upp videon. Enkel och okomplicerad process. Men t\u00e4nk om n\u00e5gon beh\u00f6ver ladda upp videor via YouTube API p\u00e5 en YouTube-kanal? \u00c4r det m\u00f6jligt? Ja det \u00e4r m\u00f6jligt. I den h\u00e4r artikeln studerar vi hur du anv\u00e4nder YouTube API f\u00f6r att ladda upp en video med PHP.<\/p>\n<h3>Registrera en ans\u00f6kan och skapa referenser<\/h3>\n<p>F\u00f6r att komma ig\u00e5ng med YouTube API beh\u00f6ver du ett Google-konto. N\u00e4r du har ett Google-konto registrerar du din ans\u00f6kan och h\u00e4mtar API-nycklarna.<\/p>\n<p>Nedan f\u00f6ljer stegen f\u00f6r att registrera en applikation och h\u00e4mta dina API-nycklar.<\/p>\n<ul>\n<li>G\u00e5 till Googles utvecklarkonsol <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>Skapa ett nytt projekt. Du kan ocks\u00e5 v\u00e4lja befintligt projekt.<\/li>\n<li>Skriv ett namn p\u00e5 ditt projekt. Google Console skapar unikt projekt-ID.<\/li>\n<li>N\u00e4r du har skapat ett projekt visas det \u00f6verst i v\u00e4nster sidof\u00e4lt.<\/li>\n<li>Klicka p\u00e5 Bibliotek. Du kommer att se en lista \u00f6ver Google API: er.<\/li>\n<li>Aktivera YouTube Data API.<\/li>\n<li>Klicka p\u00e5 referenser. V\u00e4lj Oauth-klient-id under Skapa referenser. V\u00e4lj alternativknappen f\u00f6r webbapplikation.<\/li>\n<li>Ge namnet. Under Auktoriserat JavaScript-ursprung anger du din dom\u00e4n-URL. I de auktoriserade omdirigerings-URI: erna anger du l\u00e4nken till omdirigerings-URL: n. I mitt fall skickade jag webbadressen <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>Klicka p\u00e5 knappen Skapa. Du f\u00e5r klient-ID och klienthemlighet i popup-f\u00f6nstret. Kopiera dessa detaljer. Vi beh\u00f6ver det om ett \u00f6gonblick.<\/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=\"Hur man anv\u00e4nder YouTube API f\u00f6r att ladda upp video p\u00e5 YouTube-kanal\" ><\/a><\/p>\n<h3>St\u00e4ll in en grundl\u00e4ggande konfiguration<\/h3>\n<p>Att ladda upp video med YouTube API kr\u00e4ver att du skapar en \u00e5tkomsttoken. En \u00e5tkomsttoken \u00e4r inget annat \u00e4n en identifierare f\u00f6r ett YouTube-konto.<\/p>\n<p>Men \u00e5tkomsttoken upph\u00f6r efter en tid. N\u00e4r \u00e5tkomsttoken upph\u00f6r f\u00e5r du felmeddelandet &#8217;Obeh\u00f6rig \u00e5tkomst&#8217;. L\u00f6sningen f\u00f6r detta \u00e4r att k\u00f6ra auktoriseringsprocessen igen eller regenerera \u00e5tkomsttoken i bakgrunden och slutf\u00f6ra uppladdningsprocessen. I den h\u00e4r artikeln g\u00e5r jag efter en andra l\u00f6sning. Vi \u00e5terskapar \u00e5tkomsttoken om den har upph\u00f6rt att g\u00e4lla i bakgrunden utan att \u00f6verf\u00f6ra uppladdningsprocessen. Om du g\u00f6r det beh\u00f6ver du inte g\u00f6ra auktoriseringsprocessen om och om igen.<\/p>\n<p>Med detta sagt m\u00e5ste du f\u00f6rst auktorisera kontot att generera en \u00e5tkomsttoken. Jag ska anv\u00e4nda <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth-<\/a> biblioteket f\u00f6r auktorisering och generera \u00e5tkomsttoken. \u00d6ppna din <code>composer.json<\/code>fil och l\u00e4gg till nedanst\u00e5ende rader i den.<\/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>Observera YouTube \u00e4r Googles produkt och YouTube API \u00e4r inget annat \u00e4n ett Google API. D\u00e4rf\u00f6r anv\u00e4nder vi biblioteket &#8221;google \/ apiclient&quot;. K\u00f6r sedan kommandot nedan f\u00f6r installation av dessa bibliotek.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<h4>Databaskonfiguration<\/h4>\n<p>P\u00e5 varje API-samtal m\u00e5ste vi skicka en \u00e5tkomsttoken s\u00e5 lagra den i databasen. Skapa en tabell &#8217;token&#8217; i din databas med hj\u00e4lp av fr\u00e5gan nedan.<\/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>Senare del av den h\u00e4r artikeln m\u00e5ste vi interagera med denna &quot;token&quot; -tabell f\u00f6r att h\u00e4mta och uppdatera tokeninformation. Det kr\u00e4ver att du skriver en databasanslutning och n\u00e5gra fr\u00e5gor. Skapa en fil <code>class-db.php<\/code>och l\u00e4gg till f\u00f6ljande kod i den.<\/p>\n<p><strong>klass-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>Skicka dina databasuppgifter i ovanst\u00e5ende fil. H\u00e4r antar jag att du vill anv\u00e4nda ett enda YouTube-konto. Om du t\u00e4nker anv\u00e4nda flera konton kan du \u00e4ndra fr\u00e5gorna ovan enligt dina krav.<\/p>\n<h3>Skapa \u00e5tkomsttoken<\/h3>\n<p>Du har installerat biblioteken och skapat en tabell f\u00f6r att lagra token. L\u00e5t oss nu g\u00f6ra auktoriseringsprocessen, ta tag i \u00e5tkomsttoken och lagra den i tabellen &#8217;token&#8217;.<\/p>\n<p>Skapa en <code>config.php<\/code>fil och skriv en konfiguration enligt riktlinjerna f\u00f6r HybridAuth-biblioteket.<\/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>Ers\u00e4tt platsh\u00e5llarna med de faktiska v\u00e4rdena f\u00f6r dina Google-referenser. L\u00e4gg till samma URL f\u00f6r \u00e5teruppringning som du skickade n\u00e4r du skapade konsolprogrammet. Det betyder att n\u00e4r anv\u00e4ndaren slutf\u00f6r auktoriseringsprocessen kommer de att omdirigera till <code>callback.php<\/code>filen.<\/p>\n<p>I <code>callback.php<\/code>filen h\u00e4mtar vi \u00e5tkomsttoken detaljer och lagrar den i databasen.<\/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>G\u00e5 \u00f6ver till din webbl\u00e4sare och k\u00f6r YOUR_DOMAIN_URL \/ callback.php, du omdirigerar till Google-kontot, slutf\u00f6r auktoriseringsprocessen och du b\u00f6r se framg\u00e5ngsmeddelandet. Kontrollera databastabellen &#8217;token&#8217;. Det b\u00f6r ha dina tokenuppgifter lagrade. Och det betyder att du \u00e4r bra att forts\u00e4tta ladda upp en video p\u00e5 din YouTube-kanal.<\/p>\n<h3>Ladda upp video p\u00e5 YouTube Channel med YouTube API<\/h3>\n<p>Du har \u00e5tkomsttoken som kommer att anv\u00e4ndas f\u00f6r att ladda upp videon p\u00e5 YouTube-kanalen via Google API. Men som jag n\u00e4mnde tidigare skulle \u00e5tkomsttoken upph\u00f6ra efter en tid och vi kommer att \u00e5terskapa den i bakgrunden utan att be om auktoriseringsprocess igen.<\/p>\n<p>Vi kan g\u00f6ra det med &#8217;referh_token&#8217;. Om du tittar p\u00e5 kolumnen &quot;access_token&quot; i tabellen ser du att den ocks\u00e5 inneh\u00e5ller posten &quot;refresh_token&quot;. Med hj\u00e4lp av &#8217;refresh_token&#8217; kallar vi slutpunkten &#8217;\/ o \/ oauth2 \/ token&#8217; och \u00e5terskapar \u00e5tkomsttoken i bakgrunden.<\/p>\n<p>D\u00e4refter beh\u00f6ver du HTML-formul\u00e4ret genom vilket du kan bl\u00e4ddra i videon och skicka den till servern f\u00f6r uppladdning. L\u00e5t oss skapa ett enkelt HTML-formul\u00e4r enligt f\u00f6ljande.<\/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>Formul\u00e4ret har tre f\u00e4lt &#8211; titel, beskrivning och fil. N\u00e4r du skickar detta formul\u00e4r ska videon laddas upp p\u00e5 din YouTube-kanal tillsammans med den angivna titeln och beskrivningen.<\/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>Ovanst\u00e5ende kod tar en videofil fr\u00e5n HTML-formul\u00e4ret och laddar upp den via API p\u00e5 din YouTube-kanal. Om din \u00e5tkomsttoken har l\u00f6pt ut regenererar den token i bakgrunden och forts\u00e4tter processen utan att bryta den.<\/p>\n<h3>Ladda upp en anpassad miniatyrbild p\u00e5 YouTube-video<\/h3>\n<p>Om du bygger en anpassad applikation som hanterar YouTube-videor vill du f\u00f6rmodligen ladda upp miniatyrbild p\u00e5 YouTube-video. Att ladda upp en anpassad miniatyr kr\u00e4ver att anv\u00e4ndare ska verifiera sitt telefonnummer med sitt YouTube-konto. Bes\u00f6k l\u00e4nken<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> och g\u00f6r telefonnummerverifiering.<\/p>\n<p>N\u00e4r du har verifierat telefonnumret kan du anv\u00e4nda v\u00e5rt tidigare formul\u00e4r och kod med sm\u00e5 \u00e4ndringar och st\u00e4lla in den anpassade miniatyrbilden f\u00f6r den uppladdade videon. L\u00e4gg f\u00f6rst till formul\u00e4rf\u00e4ltet som g\u00f6r det m\u00f6jligt att ladda upp bilder. Den rekommenderade YouTube-miniatyrstorleken \u00e4r <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>P\u00e5 formul\u00e4ret skicka har vi byggt en matris <code>$arr_data<\/code>som inneh\u00e5ller all formdata. L\u00e4gg till det nya paret f\u00f6r bild i arrayen <code>$arr_data<\/code>enligt f\u00f6ljande.<\/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>D\u00e4refter, efter att v\u00e5r kod laddat upp videon p\u00e5 YouTube, m\u00e5ste vi ta video-id och tilldela en anpassad miniatyr till videon.<\/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>Ta bort video fr\u00e5n YouTube Channel med YouTube API<\/h3>\n<p>Du kanske ocks\u00e5 vill ha en kod f\u00f6r att radera videor med YouTube API. F\u00f6r att ta bort en video beh\u00f6ver du ett extra omf\u00e5ng <code>https:\/\/www.googleapis.com\/auth\/youtube<\/code>som jag redan har inkluderat ovan i en konfigurationsfil. Det betyder att \u00e5tkomsttoken som genereras genom att f\u00f6lja stegen ovan kan anv\u00e4ndas f\u00f6r att radera en video.<\/p>\n<p>Nedan \u00e4r koden som tar bort en video fr\u00e5n din YouTube-kanal.<\/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>Det \u00e4r allt! Jag hoppas att du fick veta hur du laddar upp en video p\u00e5 YouTube-kanalen med YouTube API. Jag skulle vilja h\u00f6ra dina tankar eller f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-laddar-jag-upp-video-pa-youtube-i-laravel-applikationen\/\" title=\"Hur laddar jag upp video p\u00e5 YouTube i Laravel-applikationen\">Hur laddar jag upp video p\u00e5 YouTube i Laravel-applikationen<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/sa-har-far-du-youtube-videotaggar-med-youtube-api\/\" title=\"Hur du f\u00e5r YouTube-videotaggar med hj\u00e4lp av YouTube API\">Hur du f\u00e5r YouTube-videotaggar med hj\u00e4lp av YouTube API<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/youtube-api-hur-far-jag-en-lista-over-youtube-videor-fran-din-kanal\/\" title=\"YouTube API - Hur f\u00e5r jag en lista \u00f6ver YouTube-videor fr\u00e5n din kanal\">YouTube API &#8211; Hur f\u00e5r jag en lista \u00f6ver YouTube-videor fr\u00e5n din kanal<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/skaffa-youtube-videolista-med-nyckelord-med-hjalp-av-youtube-search-api\/\" title=\"Hur f\u00e5r jag YouTube-videolista efter nyckelord med hj\u00e4lp av YouTube Search API\">Hur f\u00e5r jag YouTube-videolista efter nyckelord med hj\u00e4lp av YouTube Search API<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vill du l\u00e4ra dig YouTube API f\u00f6r att ladda upp video? I den h\u00e4r artikeln visar vi hur du registrerar ett program, skapar API-nycklar, installerar ett Google-klientbibliotek.<\/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":[279],"tags":[850],"class_list":["post-29304","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29304"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29304\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/21640"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}