Google account auto Login и получить токен доступа с помощью php

1

Я использую You tube API для прямой трансляции в моем приложении. Для планирования потоковой передачи я дам один общий идентификатор электронной почты и пароль для каждого пользователя.

Мне нужно автоматически вводить пользователя в учетную запись google (без указания идентификатора и пароля электронной почты), используя общий идентификатор электронной почты и пароль и получать токен доступа с помощью php.

Является ли это возможным?

Мой текущий код ниже. Пожалуйста, предложите одно решение!

<?php

// Call set_include_path() as needed to point to your client library.
require_once 'Google/autoload.php';
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 = '$OAUTH2_CLIENT_ID';
$OAUTH2_CLIENT_SECRET = '$OAUTH2_CLIENT_SECRET';
$htmlBody="";
$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()) {
if(isset($_POST['title']) && isset($_POST['timeStart']) && isset($_POST['timeEnd']) && isset($_POST['Status']))
{
  try {
    // Create an object for the liveBroadcast resource snippet. Specify values
    // for the snippet title, scheduled start time, and scheduled end time.
    $broadcastSnippet = new Google_Service_YouTube_LiveBroadcastSnippet();
    $broadcastSnippet->setTitle($_POST['title']);
    $broadcastSnippet->setScheduledStartTime($_POST['timeStart']);
    $broadcastSnippet->setScheduledEndTime($_POST['timeEnd']);

    // Create an object for the liveBroadcast resource status, and set the
    // broadcast status to "private".
    $status = new Google_Service_YouTube_LiveBroadcastStatus();
    $status->setPrivacyStatus($_POST['Status']);

    // Create the API request that inserts the liveBroadcast resource.
    $broadcastInsert = new Google_Service_YouTube_LiveBroadcast();
    $broadcastInsert->setSnippet($broadcastSnippet);
    $broadcastInsert->setStatus($status);
    $broadcastInsert->setKind('youtube#liveBroadcast');

    // Execute the request and return an object that contains information
    // about the new broadcast.
    $broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status',
        $broadcastInsert, array());

    // Create an object for the liveStream resource snippet. Specify a value
    // for the snippet title.
    $streamSnippet = new Google_Service_YouTube_LiveStreamSnippet();
    $streamSnippet->setTitle('New Stream');

    // Create an object for content distribution network details for the live
    // stream and specify the stream format and ingestion type.
    $cdn = new Google_Service_YouTube_CdnSettings();
    $cdn->setFormat("1080p");
    $cdn->setIngestionType('rtmp');

    // Create the API request that inserts the liveStream resource.
    $streamInsert = new Google_Service_YouTube_LiveStream();
    $streamInsert->setSnippet($streamSnippet);
    $streamInsert->setCdn($cdn);
    $streamInsert->setKind('youtube#liveStream');

    // Execute the request and return an object that contains information
    // about the new stream.
    $streamsResponse = $youtube->liveStreams->insert('snippet,cdn',
        $streamInsert, array());

    // Bind the broadcast to the live stream.
    $bindBroadcastResponse = $youtube->liveBroadcasts->bind(
        $broadcastsResponse['id'],'id,contentDetails',
        array(
            'streamId' => $streamsResponse['id'],
        ));

    $htmlBody .= "<h3>Added Broadcast</h3><ul>";
    $htmlBody .= sprintf('<li>%s published at %s (%s)</li>',
        $broadcastsResponse['snippet']['title'],
        $broadcastsResponse['snippet']['publishedAt'],
        $broadcastsResponse['id']);
    $htmlBody .= '</ul>';
    $htmlBody .= "<h3>Added Stream</h3><ul>";
    $htmlBody .= sprintf('<li>%s (%s)</li>',
        $streamsResponse['snippet']['title'],
        $streamsResponse['id']);
    $htmlBody .= '</ul>';
    $htmlBody .= "<h3>Bound Broadcast</h3><ul>";
    $htmlBody .= sprintf('<li>Broadcast (%s) was bound to stream (%s).</li>',
        $bindBroadcastResponse['id'],
        $bindBroadcastResponse['contentDetails']['boundStreamId']);
    $htmlBody .= '</ul>';
    //$htmlBody .="<h3>Live  Broadcast</h3><div>";

    //$htmlBody .= sprintf("<iframe id='ytplayer' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/%s?autoplay=1'  frameborder='0'></iframe>",
        //  $broadcastsResponse['id']);
    $htmlBody .= '</div>';


  } catch (Google_Service_Exception $e) {
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
        htmlspecialchars($e->getMessage()));
      // echo $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(isset($_GET['propid']))
  {
  $htmlBody = <<<END
  <form action="" method="post">
<input type="text" name="title" value="Event Title"/><br/>
<input type="text" name="timeStart" value="Start Time"/><br/>
<input type="text" name="timeEnd" value="End Time"/><br/>
<input type="text" name="Status" value="Public,Unlisted,Private"/>
<input type ="submit" value="Submit"/>
</form>
END;
} else {

 $htmlBody = <<<END
 <p>Close this window and click the schedule button for live streaming</p>
<p>You need to <a href="#"  onclick="window.close();">Close Window</a> 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" onclick="window.open('$authUrl', 'newwindow', 'width=600, height=400'); return false;">authorize access</a> before proceeding.<p>
END;
}
?>

<!doctype html>
<html>
<head>
<title>Bound Live Broadcast</title>
</head>
<body>
  <?=$htmlBody?>
</body>
</html>
Теги:
google-api
youtube-api
google-api-php-client

1 ответ

0

Вход в API с использованием логина и пароля называется именем клиента

ClientLogin официально устарел с 20 апреля 2012 года и теперь больше не доступен. Запросы ClientLogin не будут выполнены с ответом HTTP 404.

Ответ: Нет возможности программного доступа к API YouTube, используя логин и пароль для пользователей. Единственный способ доступа к частным данным, принадлежащим пользователю, хотя API YouTube - использовать Oauth2.

  • 0
    У меня есть только одна учетная запись для всех пользователей, чтобы планировать прямой эфир. Расписание будет доступно только после входа пользователя. пользователю не нужно указывать логин аккаунта гугл для расписания прямой трансляции. это возможно через php?
  • 0
    да, но у меня нет рабочего примера. Аутентифицируйте свой код один раз, используя $ client-> setAccessType ('offline'); чтобы получить токен обновления, сохраните токен обновления. затем используйте маркер обновления, чтобы получить токен доступа и снова войти в систему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню