...
✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas kasutada YouTube’i API-d video üleslaadimiseks YouTube’i kanalile

29

Kõik teavad YouTube’ist. YouTube on video jagamise platvorm number üks maailmas. Saame oma videote majutamiseks kasutada YouTube’i. See säästab meile palju serveriruumi ja YouTube’i video saab veebisaidile hõlpsasti manustada. Igaüks saab video YouTube’i üles laadida. Kõik, mida peate tegema, on lihtsalt oma YouTube’i kontole sisse logida ja video üles laadida. Lihtne ja arusaadav protsess. Aga mis siis, kui keegi peab YouTube’i kanali kaudu YouTube’i API kaudu videoid üles laadima? Kas see on võimalik? Jah, see on võimalik. Selles artiklis uurime, kuidas kasutada YouTube’i API-d video üleslaadimiseks PHP abil.

Registreerige rakendus ja looge volitused

YouTube’i API-ga alustamiseks vajate Google’i kontot. Kui teil on Google’i konto, registreerige oma rakendus ja hankige API-võtmed.

Allpool on toodud rakenduse registreerimise ja API-võtmete hankimise sammud.

  • Minge Google’i arendajakonsoolile https://console.developers.google.com
  • Looge uus projekt. Saate valida ka olemasoleva projekti.
  • Sisestage oma projekti nimi. Google Console loob unikaalse projekti ID.
  • Pärast projekti loomist ilmub see vasaku külgriba ülaossa.
  • Klõpsake teeki. Näete Google’i API-de loendit.
  • Luba YouTube Data API.
  • Klõpsake Mandaadid. Valige Loo mandaadid jaotisest Oauth Client id. Valige veebirakenduse raadionupp.
  • Pange nimi. Sisestage jaotises Volitatud JavaScripti päritolu oma domeeni URL. Volitatud ümbersuunamise URI-desse lisage ümbersuunamise URL-i link. Minu puhul läbisin URL-i http: //localhost/youtube/callback.php.
  • Klõpsake nuppu Loo. Hüpikaknast saate kliendi ID ja kliendisaladuse. Kopeerige need üksikasjad. Me vajame seda mõne aja pärast.

Kuidas kasutada YouTube'i API-d video üleslaadimiseks YouTube'i kanalile

Põhikonfiguratsiooni seadistamine

Video üleslaadimiseks YouTube’i API abil peate looma juurdepääsuloa. Juurdepääsuluba pole midagi muud kui YouTube’i konto identifikaator.

Kuid juurdepääsuluba aegub mõne aja möödudes. Kui juurdepääsuluba aegub, kuvatakse viga „Volitamata juurdepääs". Selle lahenduseks on autoriseerimisprotsessi uuesti käivitamine või taustal juurdepääsu loa taastamine ja üleslaadimise lõpetamine. Selles artiklis valin teise lahenduse. Kui juurdepääsuluba aegub taustal, laadime selle üleslaadimisprotsessi rikkumata uuesti. Nii tehes ei pea te autoriseerimisprotsessi uuesti ja uuesti tegema.

Nagu öeldud, peate kõigepealt konto volitama, et genereerida juurdepääsuluba. Kavatsen autoriseerimiseks ja juurdepääsuloa loomiseks kasutada Hybridauthi teeki. Avage oma composer.jsonfail ja lisage sellesse järgmised read.

{
    "require": {
        "google/apiclient": "2.0",
        "hybridauth/hybridauth": "~3.0"
    }
}

Pange tähele, et YouTube on Google’i toode ja YouTube’i API pole midagi muud kui Google’i API. Sellepärast kasutame teeki „google / apiclient”. Seejärel käivitage nende teekide installimiseks allolev käsk.

composer install

Andmebaasi seadistamine

Iga API-kõne puhul peame saatma juurdepääsuloa, nii et salvestage see andmebaasi. Looge oma andmebaasis tabel ‘token’, kasutades allolevat päringut.

CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `access_token` text NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

Selle artikli hilisemas osas peame loa üksikasjade hankimiseks ja värskendamiseks suhtlema selle märgilauaga. Selleks on vaja kirjutada andmebaasiühendus ja mõned päringud. Looge fail class-db.phpja lisage sellele järgmine kood.

klass-db.php

<?php
class DB {
    private $dbHost     = "DB_HOST";
    private $dbUsername = "DB_USERNAME";
    private $dbPassword = "DB_PASSWORD";
    private $dbName     = "DB_NAME";
     
    public function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: ". $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
 
    public function is_table_empty() {
        $result = $this->db->query("SELECT id FROM token");
        if($result->num_rows) {
            return false;
        }
 
        return true;
    }
 
    public function get_access_token() {
        $sql = $this->db->query("SELECT access_token FROM token");
        $result = $sql->fetch_assoc();
        return json_decode($result['access_token']);
    }
 
    public function get_refersh_token() {
        $result = $this->get_access_token();
        return $result->refresh_token;
    }
 
    public function update_access_token($token) {
        if($this->is_table_empty()) {
            $this->db->query("INSERT INTO token(access_token) VALUES('$token')");
        } else {
            $this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
        }
    }
}

Andke oma andmebaasi mandaadid ülaltoodud faili. Eeldan, et soovite kasutada ühte YouTube’i kontot. Kui kavatsete kasutada mitut kontot, muutke ülaltoodud päringuid vastavalt oma vajadustele.

Loo juurdepääsuluba

Olete installinud teegid ja loonud tabeli märgi salvestamiseks. Nüüd teeme autoriseerimisprotsessi, haarame juurdepääsuloa ja salvestame selle tabelisse "märk".

Looge config.phpfail ja kirjutage konfiguratsioon vastavalt HybridAuthi teegi juhistele.

config.php

<?php
require_once 'vendor/autoload.php';
require_once 'class-db.php';
 
define('GOOGLE_CLIENT_ID', 'PASTE_CLIENT_ID_HERE');
define('GOOGLE_CLIENT_SECRET', 'PASTE_CLIENT_SECRET_HERE');
 
$config = [
    'callback' => 'YOUR_DOMAIN_URL/callback.php',
    'keys'     => [
                    'id' => GOOGLE_CLIENT_ID,
                    'secret' => GOOGLE_CLIENT_SECRET
                ],
    'scope'    => 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload',
    'authorize_url_parameters' => [
            'approval_prompt' => 'force', // to pass only when you need to acquire a new refresh token.
            'access_type' => 'offline'
    ]
];
 
$adapter = new HybridauthProviderGoogle( $config );

Asendage kohatäited oma Google’i mandaatide tegelike väärtustega. Lisage sama tagasihelistamise URL, mille andsite edasi konsoolirakenduse loomisel. See tähendab, et kui kasutaja on autoriseerimisprotsessi lõpetanud, suunab ta callback.phpfaili ümber .

In callback.phpfaili, me tõmmata juurepääsuluba üksikasju ja hoidke seda andmebaasi.

callback.php

<?php
require_once 'config.php';
 
try {
    $adapter->authenticate();
    $token = $adapter->getAccessToken();
    $db = new DB();
    if($db->is_table_empty()) {
        $db->update_access_token(json_encode($token));
        echo "Access token inserted successfully.";
    }
}
catch( Exception $e ){
    echo $e->getMessage() ;
}

Minge oma brauserisse ja käitage veebisaiti YOUR_DOMAIN_URL / callback.php. Suunate Google’i kontole, lõpetate autoriseerimisprotsessi ja peaksite nägema edukat teadet. Kontrollige andmebaasitabelit ‘token’. Sellel peaksid olema teie märgistuse üksikasjad salvestatud. Ja see tähendab, et teil on hea oma YouTube’i kanalile video üles laadida.

Laadige video YouTube’i kanalile üles YouTube API abil

Teil on juurdepääsuluba, mida kasutatakse video üleslaadimiseks YouTube’i kanalile Google API kaudu. Kuid nagu ma juba varem mainisin, aegub juurdepääsuluba mõne aja pärast ja me taastame selle taustal uuesti autoriseerimisprotsessi küsimata.

Saame seda teha, kasutades ‘referh_token’. Kui vaatate tabeli veergu ‘access_token’, näete, et see sisaldab ka kirjet ‘refresh_token’. Kasutades ‘refresh_token’, kutsume lõpp-punkti ‘/ o / oauth2 / token’ ja taastame juurdepääsuloa taustal.

Järgmiseks vajate HTML-vormi, mille kaudu saate videot sirvida ja selle serverisse üleslaadimiseks saata. Loome lihtsa HTML-vormi järgmiselt.

index.php

<form method="post" enctype="multipart/form-data">
    <p><input type="text" name="title" placeholder="Enter Video Title" /></p>
    <p><textarea name="summary" cols="30" rows="10" placeholder="Video description"></textarea></p>
    <p><input type="file" name="file"/></p>
    <input type="submit" name="submit" value="Submit" />
</form>

Vormil on 3 välja – pealkiri, kirjeldus ja fail. Selle vormi esitamisel peaks video koos lisatud pealkirja ja kirjeldusega teie YouTube’i kanalile üles laadima.

index.php

<?php
require_once 'config.php';
 
if (isset($_POST['submit'])) {
    $arr_data = array(
        'title' => $_POST['title'],
        'summary' => $_POST['summary'],
        'video_path' => $_FILES['file']['tmp_name'],
    );
    upload_video_on_youtube($arr_data);
}
 
function upload_video_on_youtube($arr_data) {
 
    $client = new Google_Client();
 
    $db = new DB();
 
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
 
    $client->setAccessToken($accessToken);
 
    $service = new Google_Service_YouTube($client);
 
    $video = new Google_Service_YouTube_Video();
 
    $videoSnippet = new Google_Service_YouTube_VideoSnippet();
    $videoSnippet->setDescription($arr_data['summary']);
    $videoSnippet->setTitle($arr_data['title']);
    $video->setSnippet($videoSnippet);
 
    $videoStatus = new Google_Service_YouTube_VideoStatus();
    $videoStatus->setPrivacyStatus('public');
    $video->setStatus($videoStatus);
 
    try {
        $response = $service->videos->insert(
            'snippet,status',
            $video,
            array(
                'data' => file_get_contents($arr_data['video_path']),
                'mimeType' => 'video/*',
                'uploadType' => 'multipart'
            )
        );
        echo "Video uploaded successfully. Video id is ". $response->id;
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
 
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
 
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
 
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
 
            $db->update_access_token(json_encode($data));
 
            upload_video_on_youtube($arr_data);
        } else {
            //echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}
?>

Ülaltoodud kood võtab HTML-vormilt videofaili ja laadib selle teie YouTube’i kanalile üles API kaudu. Kui teie juurdepääsuluba on aegunud, taastab see loa taustal ja jätkab protsessi seda rikkumata.

Laadige YouTube’i videole üles kohandatud pisipilt

Kui loote kohandatud rakendust, mis haldab YouTube’i videoid, siis ilmselt soovite üles laadida YouTube’i videole pisipildi. Kohandatud pisipildi üleslaadimiseks tuleb kasutajatel oma telefoninumber oma YouTube’i kontoga kinnitada. Külastage linkihttps://www.youtube.com/features ja kontrollige telefoninumbrit.

Kui olete telefoninumbri kinnitanud, saate väheste muudatustega kasutada meie eelmist vormi ja koodi ning seadistada üleslaaditud video kohandatud pisipildi. Esmalt lisage vormivälja, mis võimaldab pilte üles laadida. YouTube’i soovitatav pisipildi suurus on 1280x720.

<p>
    <label>Image</label>
    <input type="file" name="image" accept="image/*" />
</p>

Esitatava vormi peale oleme koostanud massiivi, $arr_datamis sisaldab kõiki vormiandmeid. Lisage massiivi jaoks uus pildi paar $arr_datajärgmiselt.

$arr_data = array(
    'title' => $_POST['title'],
    'summary' => $_POST['summary'],
    'video_path' => $_FILES['file']['tmp_name'],
    'image_path' => $_FILES['image']['tmp_name'], // here we are passing image
);

Järgmisena peame pärast seda, kui kood on video YouTube’i üles laadinud, võtma video ID ja määrama videole kohandatud pisipildi.

<?php
...
...
echo "Video uploaded successfully. Video id is ". $response->id;
 
//upload thumbnail
$videoId = $response->id;
 
$chunkSizeBytes = 1 * 1024 * 1024;
 
$client->setDefer(true);
 
$setRequest = $service->thumbnails->set($videoId);
 
$media = new Google_Http_MediaFileUpload(
    $client,
    $setRequest,
    'image/png',
    null,
    true,
    $chunkSizeBytes
);
$imagePath = $arr_data['image_path'];
$media->setFileSize(filesize($imagePath));
 
$status = false;
$handle = fopen($imagePath, "rb");
 
while (!$status && !feof($handle)) {
    $chunk  = fread($handle, $chunkSizeBytes);
    $status = $media->nextChunk($chunk);
}
 
fclose($handle);
 
$client->setDefer(false);
echo "<br>Thumbanil: ". $status['items'][0]['default']['url'];

Video kustutage YouTube’i kanalilt YouTube’i API abil

Samuti võite soovida koodi, mis kustutaks videod YouTube’i API abil. Video kustutamiseks vajate täiendavat ulatust, https://www.googleapis.com/auth/youtubemille ma juba eespool konfigureerimisfaili lisasin. See tähendab, et ülaltoodud toimingute abil loodud pääsuluba saab kasutada video kustutamiseks.

Allpool on kood, mis kustutab video teie YouTube’i kanalilt.

<?php
require_once 'config.php';
 
delete_video('VIDEO_ID_HERE');
 
function delete_video($id) {
     
    $client = new Google_Client();
      
    $db = new DB();
     
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
     
    try {
        $client->setAccessToken($accessToken);
        $service = new Google_Service_YouTube($client);
        $service->videos->delete($id);
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
  
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
  
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
  
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
  
            $db->update_access_token(json_encode($data));
  
            delete_video($id);
        } else {
            //echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

See selleks! Loodan, et saite teada, kuidas videot YouTube’i kanalile YouTube’i API abil üles laadida. Tahaksin kuulda teie mõtteid või ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem