8

Video Google API PHP Client (latest release 1.1.6) einfach laden Probieren, aber code in Youtube API V3 mit nicht funktioniert und 500 internen Serverfehler geben.Wie lade ich Videos auf YouTube mit Google API PHP Client Bibliothek und Youtube API V3 hoch?

Was falsch ist mit Code unten, wenn ich keine blading Edge Beta-Version verwende, habe ich gerade 3 Parameter unten maskiert, sonst wird es kopiert Youtube API V3.

require_once 'google-api-php-client/src/Google/Client.php'; 
    require_once 'google-api-php-client/src/Google/Service/YouTube.php'; 

    session_start(); 

    $OAUTH2_CLIENT_ID = 'CHANGE1-0osfh0p5h80o9ol2uqtsjq5i7r1jun.apps.googleusercontent.com'; 
    $OAUTH2_CLIENT_SECRET = 'CHANGE2azMpt__VdSt9'; 

    $client = new Google_Client(); 
    $client->setClientId($OAUTH2_CLIENT_ID); 
    $client->setClientSecret($OAUTH2_CLIENT_SECRET); 
    $client->setScopes('https://www.googleapis.com/auth/youtube'); 
    $redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], 
     FILTER_SANITIZE_URL); 
    $client->setRedirectUri($redirect); 

    // Define an object that will be used to make all API requests. 
    $youtube = new Google_Service_YouTube($client); 

    if (isset($_GET['code'])) { 
    if (strval($_SESSION['state']) !== strval($_GET['state'])) { 
     die('The session state did not match.'); 
    } 

    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
    header('Location: ' . $redirect); 
    } 

    if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
    } 

    // Check to ensure that the access token was successfully acquired. 
    if ($client->getAccessToken()) { 
    try{ 
     // REPLACE this value with the path to the file you are uploading. 
     $videoPath = "/CHANGE3/videos/test.mp4"; 

     // Create a snippet with title, description, tags and category ID 
     // Create an asset resource and set its snippet metadata and type. 
     // This example sets the video's title, description, keyword tags, and 
     // video category. 
     $snippet = new Google_Service_YouTube_VideoSnippet(); 
     $snippet->setTitle("Test title"); 
     $snippet->setDescription("Test description"); 
     $snippet->setTags(array("tag1", "tag2")); 

     // Numeric video category. See 
     // https://developers.google.com/youtube/v3/docs/videoCategories/list 
     $snippet->setCategoryId("22"); 

     // Set the video's status to "public". Valid statuses are "public", 
     // "private" and "unlisted". 
     $status = new Google_Service_YouTube_VideoStatus(); 
     $status->privacyStatus = "public"; 

     // Associate the snippet and status objects with a new video resource. 
     $video = new Google_Service_YouTube_Video(); 
     $video->setSnippet($snippet); 
     $video->setStatus($status); 

     // Specify the size of each chunk of data, in bytes. Set a higher value for 
     // reliable connection as fewer chunks lead to faster uploads. Set a lower 
     // value for better recovery on less reliable connections. 
     $chunkSizeBytes = 1 * 1024 * 1024; 

     // Setting the defer flag to true tells the client to return a request which can be called 
     // with ->execute(); instead of making the API call immediately. 
     $client->setDefer(true); 

     // Create a request for the API's videos.insert method to create and upload the video. 
     $insertRequest = $youtube->videos->insert("status,snippet", $video); 

     // Create a MediaFileUpload object for resumable uploads. 
     $media = new Google_Http_MediaFileUpload(
      $client, 
      $insertRequest, 
      'video/*', 
      null, 
      true, 
      $chunkSizeBytes 
    ); 
     $media->setFileSize(filesize($videoPath)); 


     // Read the media file and upload it chunk by chunk. 
     $status = false; 
     $handle = fopen($videoPath, "rb"); 
     while (!$status && !feof($handle)) { 
     $chunk = fread($handle, $chunkSizeBytes); 
     $status = $media->nextChunk($chunk); 
     } 

     fclose($handle); 

     // If you want to make other calls after the file upload, set setDefer back to false 
     $client->setDefer(false); 


     $htmlBody .= "<h3>Video Uploaded</h3><ul>"; 
     $htmlBody .= sprintf('<li>%s (%s)</li>', 
      $status['snippet']['title'], 
      $status['id']); 

     $htmlBody .= '</ul>'; 

    } catch (Google_Service_Exception $e) { 
     $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>', 
      htmlspecialchars($e->getMessage())); 
    } catch (Google_Exception $e) { 
     $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>', 
      htmlspecialchars($e->getMessage())); 
    } 

    $_SESSION['token'] = $client->getAccessToken(); 
    } else { 
    // If the user hasn't authorized the app, initiate the OAuth flow 
    $state = mt_rand(); 
    $client->setState($state); 
    $_SESSION['state'] = $state; 

    $authUrl = $client->createAuthUrl(); 
    $htmlBody = <<<END 
    <h3>Authorization Required</h3> 
    <p>You need to <a href="$authUrl">authorize access</a> before proceeding.<p> 
    END; 
    } 
    echo $htmlBody; 

Ein Servicefehler aufgetreten:Error calling PUT https://www.googleapis.com/upload/youtube/v3/videos?part=status%2Csnippet&uploadType=resumable&upload_id=AEnB2UpXd4UQ0dt-v2_8YLzDp4KAywZQUIgUEm3Lxyv7nV_ZLAHghu6RiNE0e82xMMGx9ztQvTdYGFwvSNP5yJiOdffS0CuG-Q: (400) Failed to parse Content-Range header.

Sie es unterhalb von sehr alten und veralteten Fragen nicht markieren duplizieren, wie Sie andere Fragen sehen können sogar Dateien in ihrem Code enthalten, die nicht vorhanden sind in der neuesten Google API PHP Client Bibliothek oder beziehen sich auf tote Google Code Project. Ähnliche veraltet Frage 1, 2, 3, 4, 5

+0

Haben Sie ein Auge auf diese genommen? https://developers.google.com/youtube/v3/code_samples/php – Mijago

+0

Ja mein Code oben ist genau die gleiche Code, aber es wird geben Fehler – XIMRX

Antwort

5

Seltsamer eine sehr kleine zwicken in Code behebt das Problem.

Statt nur $videoPath = "/path/to/file.mp4"; DOCUMENT_ROOT mit löst das Problem. Anders als dieser Code der Dokumentation ist perfekt.

$videoPath = $_SERVER["DOCUMENT_ROOT"] . "/mapapp/videos/test.mp4"; 
+0

wo diese 'YouTube.php' Datei? Ich kann es überhaupt nicht in git finden !!! – Jackson

0

für andere whoe kommt herum und befassen sich mit „Failed Content-Range-Header analysieren“

ich für 3 Tage gesucht und endlich fand ich meine Lösung ...

meine Datei war größer als 4gb und xampp auf Windows (mein Webserver-Tool) ist nur 32bit, so dass der Befehl fopen() meine großen Dateien nicht lesen konnte.

installaed ich Apache 64bit und 64bit php7 durch meine eigenen, und es wird

auf große Dateien in diesem Moment mein Skript finaly lädt Brocken weg

794 - 07:14:15 - 832569344 
795 - 07:14:16 - 833617920 
796 - 07:14:17 - 834666496 
797 - 07:14:18 - 835715072 
798 - 07:14:19 - 836763648 
799 - 07:14:19 - 837812224 
800 - 07:14:20 - 838860800 
801 - 07:14:21 - 839909376 
802 - 07:14:22 - 840957952 
803 - 07:14:23 - 842006528 
804 - 07:14:24 - 843055104 

allready 804 Stücke ^^ kein nothign gestutzt: D nur das Hochladen fehlerlos

Verwandte Themen