2016-08-03 3 views
1

mit folge ich als youtube API https://developers.google.com/youtube/v3/code_samples/php#upload_a_videoein Video in meinem YouTube-Kanal hochladen PHP api

unten erklärte mein Code

<?php 

// Call set_include_path() as needed to point to your client library. 
require_once 'Google/Client.php'; 
require_once 'Google/Service/YouTube.php'; 
session_start(); 

/* 
* You can acquire an OAuth 2.0 client ID and client secret from the 
* Google Developers Console <https://console.developers.google.com/> 
* For more information about using OAuth 2.0 to access Google APIs, please see: 
* <https://developers.google.com/youtube/v3/guides/authentication> 
* Please ensure that you have enabled the YouTube Data API for your project. 
*/ 
$OAUTH2_CLIENT_ID = '**************.apps.googleusercontent.com'; 
$OAUTH2_CLIENT_SECRET = '**************'; 

$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 = "H:/works/xampp/htdocs/youapi/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; 
} 
?> 

<!doctype html> 
<html> 
<head> 
<title>Video Uploaded</title> 
</head> 
<body> 
    <?=$htmlBody?> 
</body> 
</html> 

folgend Ich erhalte Fehler

Ein Client ist Fehler aufgetreten: Host konnte nicht aufgelöst werden: www.googleapis.comupload

wo war mein Fehler? Wie kann ich diesen Fehler beheben? könnten Sie mir bitte

+0

Haben Sie alle erforderlichen Schritte [vor dem Start] (https://developers.google.com/youtube/v3/getting-started) in die Entwicklung einbezogen Youtube-API verwenden? –

+0

Ja, ich folgte @ Mr.Rebot – Siddhu

+0

Ich habe das gleiche Problem ... können Sie mir bitte helfen @Siddhu –

Antwort

-1

Es scheint zwei Fehler zu sein, hier helfen, und ich vermute, dass sie Probleme mit dem Server oder Netzwerk sind:

1.Prüfen dass das, was Konto ausgeführt wird PHP die richtigen Berechtigungen hat./tmp sollte für alle schreibbar sein, aber es könnte etwas Seltsames passieren. Wie jlmcdonald vorschlägt, nach Platz suchen. 2.Vergewissern Sie sich auf Ihrem Server, dass Sie eine Verbindung haben. Dies kann mehrere Gründe haben: DNS-Probleme oder allgemeine Konnektivität. Sie können diese durch SSHing in Ihrem Server beheben und ausgeführt wird: Checks für DNS-Probleme

nslookup googleapis.com Checks für die allgemeine Konnektivität

ping googleapis.com Dies sollte nicht notwendig sein, sondern überprüft, Wenn Ihr Server sogar einen ausgehenden Socket an diesem Port öffnen kann (ping = ICMP)

+0

Ich bereits getan @kishan und ich kannte diese Antwort bei meiner Forschung http://stackoverflow.com/questions/17287586/youtube-api-client-error-cannot-resolve-host – Siddhu