Quantcast
Channel: Active questions tagged youtube-api - Stack Overflow
Viewing all articles
Browse latest Browse all 3831

Google API login failed always: back to needing to authorize [closed]

$
0
0

I'd like to change my tags of a YouTube video using the YouTube Data API. But I'm already stuck on login:

My page shows the message: You need to authorize access before proceeding. I click on authorize access and select my Google account and then my YouTube channel, I select allow and get redirected to the login message.

The code is directly from the sample files on Github:

<?php/** * This sample adds new tags to a YouTube video by: * * 1. Retrieving the video resource by calling the "youtube.videos.list" method *    and setting the "id" parameter * 2. Appending new tags to the video resource's snippet.tags[] list * 3. Updating the video resource by calling the youtube.videos.update method. * * @author Ibrahim Ulukaya*//** * Library Requirements * * 1. Install composer (https://getcomposer.org) * 2. On the command line, change to this directory (api-samples/php) * 3. Require the google/apiclient library *    $ composer require google/apiclient:~2.0 */if (!file_exists(__DIR__ . '/vendor/autoload.php')) {  throw new \Exception('please run "composer require google/apiclient:~2.0" in "' . __DIR__ .'"');}require_once __DIR__ . '/vendor/autoload.php';session_start();/* * You can acquire an OAuth 2.0 client ID and client secret from the * {{ Google Cloud Console }} <{{ https://cloud.google.com/console }}> * 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 = 'myID';$OAUTH2_CLIENT_SECRET = 'mySec';$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);// Check if an auth token exists for the required scopes$tokenSessionKey = 'token-' . $client->prepareScopes();if (isset($_GET['code'])) {  if (strval($_SESSION['state']) !== strval($_GET['state'])) {    die('The session state did not match.');  }  $client->authenticate($_GET['code']);  $_SESSION[$tokenSessionKey] = $client->getAccessToken();  header('Location: ' . $redirect);}if (isset($_SESSION[$tokenSessionKey])) {  $client->setAccessToken($_SESSION[$tokenSessionKey]);}// Check to ensure that the access token was successfully acquired.if ($client->getAccessToken()) {  $htmlBody = '';  try{    // REPLACE this value with the video ID of the video being updated.    $videoId = "Zqt-NvuMKYU";    // Call the API's videos.list method to retrieve the video resource.    $listResponse = $youtube->videos->listVideos("snippet",        array('id' => $videoId));    // If $listResponse is empty, the specified video was not found.    if (empty($listResponse)) {      $htmlBody .= sprintf('<h3>Can\'t find a video with video id: %s</h3>', $videoId);    } else {      // Since the request specified a video ID, the response only      // contains one video resource.      $video = $listResponse[0];      $videoSnippet = $video['snippet'];      $tags = $videoSnippet['tags'];      // Preserve any tags already associated with the video. If the video does      // not have any tags, create a new list. Replace the values "tag1" and      // "tag2" with the new tags you want to associate with the video.      if (is_null($tags)) {        $tags = array("tag1", "tag2");      } else {        array_push($tags, "tag1", "tag2");      }      // Set the tags array for the video snippet      $videoSnippet['tags'] = $tags;      // Update the video resource by calling the videos.update() method.      $updateResponse = $youtube->videos->update("snippet", $video);      $responseTags = $updateResponse['snippet']['tags'];      $htmlBody .= "<h3>Video Updated</h3><ul>";      $htmlBody .= sprintf('<li>Tags "%s" and "%s" added for video %s (%s) </li>',          array_pop($responseTags), array_pop($responseTags),          $videoId, $video['snippet']['title']);      $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[$tokenSessionKey] = $client->getAccessToken();} elseif ($OAUTH2_CLIENT_ID == 'REPLACE_ME') {  $htmlBody = <<<END<h3>Client Credentials Required</h3><p>    You need to set <code>\$OAUTH2_CLIENT_ID</code> and<code>\$OAUTH2_CLIENT_ID</code> before proceeding.<p>END;} 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 Updated</title></head><body><?=$htmlBody?></body></html>

Would be great if someone has a tip for me.


Viewing all articles
Browse latest Browse all 3831

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>