PHP рдореЗрдВ youtube рдкреНрд░рд╕рд╛рд░рдг + рдЧреВрдЧрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рджреВрд╕рд░реЗ рджрд┐рди рдпреВрдЯреНрдпреВрдм рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдерд╛ред рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдСрдл рд╣реА рд╣реИрдВред рдЧреВрдЧрд▓ рдкреНрд░рд▓реЗрдЦрди рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ) рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

рдЫрд╡рд┐

рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реА рд╡рд╣ LiveChatMessages: рд╕реВрдЪреА рд╡рд┐рдзрд┐ рдереА , рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ liveChatId рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк LiveBroadcasts: рд╕реВрдЪреА рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Google рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЦрд╛рддрд╛ рдкрдврд╝рдирд╛ред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ


Google рдХрдВрд╕реЛрд▓


рд╡реЗрдм рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП OAuth 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЬреАрдПрд╕ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдПрдХ рдШрдВрдЯреЗ рддрдХ рдЪрд▓рддреА рд╣реИ, рдФрд░ рдпрд╣ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рдмрд┐рдирд╛)ред рддрд╛рдЬрд╝рд╛ рдЯреЛрдХрди рд╕рдВрдЪрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЙрдирдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдБред Comfort.developers.google.com рдкрд░ рдЬрд╛рдПрдВ , рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ рдФрд░ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред



рдПрдХ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВред рдЕрдм рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "API рдФрд░ рд╕реЗрд╡рд╛рдПрдБ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдпрд╛ API рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВред
рдпрд╣рд╛рдВ, рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдореЗрдВ, YouTube рдбреЗрдЯрд╛ API v3 рдЦреЛрдЬреЗрдВ рдФрд░ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред

рдлрд┐рд░, рдХрдВрд╕реЛрд▓ рдХреЗ рдмрд╛рдПрдБ рдлрд▓рдХ рдореЗрдВ "OAuth Access Request Window" рдЯреИрдм рдореЗрдВ ( рдпрд╛ рдпрд╣рд╛рдБ ), рдПрдХ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБред
рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП "рдмрд╛рд╣рд░реА" рдЪреБрдиреЗрдВред



рдЕрдЧрд▓рд╛, рдЗрд╕ рдлреЙрд░реНрдо рдореЗрдВ рдЖрдкрдХреЛ 2 рдлрд╝реАрд▓реНрдб рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдо рдФрд░ "рдЕрдзрд┐рдХреГрдд рдбреЛрдореЗрди", рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдбреЛрдореЗрди рд╣реИ, рддреЛ рдЖрдк рдлрд╝реАрд▓реНрдб рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╣реИред Save рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ



рдЕрдм "рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓" рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ (https://console.developers.google.com/apis/credentials)

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдРрд╕рд╛ рдкреЗрдЬ рдорд┐рд▓реЗрдЧрд╛:



"рдХреНрд░рд┐рдПрдЯрд┐рд╡рд┐рдЯреА рдмрдирд╛рдПрдВ" рдмрдЯрди рдЪреБрдиреЗрдВ -> "рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛" OAuth рдХреНрд▓рд╛рдЗрдВрдЯ ┬╗
рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рд╡реЗрдм), рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ "рдЕрдиреБрдордд рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ URI" - рдпрд╣ рд╡рд╣ url рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдпрд╣рд╛рдБ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдПрдХ рд╕реНрдерд╛рдиреАрдп рдпреВрдЖрд░рдПрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣реЛрдЧрд╛
http: // localhost: 8080 / oauth2callback.php

рдкрд░рд┐рдгрд╛рдо




рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рдФрд░ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдмрдХрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдкреЗрдЬ рдмрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╣реИрдВред



рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:



рдЖрдк рддреБрд░рдВрдд рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ secret_json.json рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рдХреЛрдб рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред

Php


рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ, рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:

php composer.phar require google/apiclient:^2.0

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдВред
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, 2 рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ - index.php рдФрд░ oauth2callback.php
рд╡реИрд╕реЗ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдирд╛ PHP рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

php -S localhost:8080

рдлрд╝рд╛рдЗрд▓ рдХреЛ рднреА secret_json.json (рдЬреЛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛) рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдБред

рд╕реАрдзреЗ Index.php рдкрд░ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬ рджреЗрдВрдЧреЗред Index.php рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА

<?php
require_once __DIR__ . '/vendor/autoload.php';

$client = new Google_Client();
//     
$client->setAuthConfig('client_secret.json');
//   
$client->setScopes([
    'https://www.googleapis.com/auth/youtube.readonly',
]);
//    refresh_token
$client->setAccessType("offline");

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
    $client->setAccessToken($_SESSION['access_token']);
} else {
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
    exit();
}

$refreshToken = $_SESSION['access_token']['refresh_token'];
$accessToken = $_SESSION['access_token']['access_token'];
$tknType = $_SESSION['access_token']['token_type'];
$clientId = $client->getClientId();
$created = $_SESSION['access_token']['created'];
unset($_SESSION['access_token']);
unset($_SESSION['user']);
session_destroy();

$data = json_encode([
  'refreshToken' => $refreshToken,
    'accessToken' => $accessToken,
    'tknType' => $tknType,
    'clientId' => $clientId,
    'created' => $created
]);
echo $data;

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рджреЗрдЧрд╛, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ (рдпрд╛ рдиреЛрдЯрдкреИрдб) рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдлрд╝рд╛рдЗрд▓ oauth2callback.php:

<?php
require_once __DIR__.'/vendor/autoload.php';

session_start();

$client = new Google_Client();
$client->setAuthConfigFile('client_secret.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->setScopes([
    'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setApprovalPrompt('force');
$client->setAccessType("offline");

if (!isset($_GET['code'])) {
    $auth_url = $client->createAuthUrl();
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
    $client->authenticate($_GET['code']);
    $_SESSION['access_token'] = $client->getAccessToken();
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/';
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ Google рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧреА рдФрд░ рд╕рддреНрд░ рдХреЛ рдЯреЛрдХрди рдбреЗрдЯрд╛ рд▓рд┐рдЦ тАЛтАЛрджреЗрдЧреАред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рд╡рд╣реАрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ index.php рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред
рдмреЗрд╢рдХ, рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ oauth2callback рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдХреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд┐рд╕реА рднреА рдкрддреЗ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдЗрд╕ рдХреЛрдб рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВред

рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдПрдХреНрд╕реЗрд╕_рдЯреЗрди рдФрд░ рд░рд┐рдлреНрд░реЗрд╢_рдЯреЛрдХрди рд╣реИ, рдЪрд▓реЛ YouTube рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдпреВрдЯреНрдпреВрдм


PHP рддреБрд░рдВрдд


getStreams.php:

<?php
require_once __DIR__ . '/vendor/autoload.php';
//   
require_once __DIR__ . '/refreshToken.php';

$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->setScopes([
    'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setAccessType("offline");

//  $data      (   )
if (($data['created'] - time()) <= -3600) {
    $data = refreshToken($data['refreshToken'], $db);
}

$client->setAccessToken($data['accessToken']);
$service = new Google_Service_YouTube($client);
//  2          , 
//       .
$queryParams = [
    'broadcastStatus' => 'upcoming',
    'maxResults' => 50
];
$response = $service->liveBroadcasts->listLiveBroadcasts('id,snippet,status', $queryParams);
$items = $response['items'];
$streamsUpcoming = itemsGenerator($items);

$queryParams = [
    'broadcastStatus' => 'active',
    'maxResults' => 50
];
$response = $service->liveBroadcasts->listLiveBroadcasts('id,snippet,status', $queryParams);
$items = $response['items'];
$streamsActive = itemsGenerator($items);
$streams = array_merge($streamsUpcoming, $streamsActive);

//  
echo json_encode($streams);

//     ,   .
function itemsGenerator($items) {
    $streams = [];
    foreach ($items as $item) {
        //       (  )
        if (!isset($item['snippet']['actualEndTime'])) {
            $streams[] = [
                'id' => $item['id'],
                'title' => $item['snippet']['title'],
                'description' => $item['snippet']['description'],
                'image' => $item['snippet']['thumbnails']['medium']['url'],
                'liveChatId' => $item['snippet']['liveChatId'],
                'channelId' => $item['snippet']['channelId']
            ];
        }
    }
    return $streams;
}


рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ?

$client->setScopes([
    'https://www.googleapis.com/auth/youtube.readonly',
]);

рддреЛ, рд╡реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд░рд┐рдХреЙрд░реНрдб рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, https://www.googleapis.com/auth/youtube.uploadрдЕрдиреНрдп рд╣реИрдВред

refreshToken.php:

<?php
require_once __DIR__ . '/vendor/autoload.php';

/**
 * @param string $refreshToken
 * @param $db
 * @return array
 * @throws Google_Exception
 */
function refreshToken($refreshToken, $db)
{
    $client = new Google_Client();
    $client->setAuthConfig('client_secret.json');
    $client->setScopes([
        'https://www.googleapis.com/auth/youtube.readonly',
    ]);
    $client->setAccessType("offline");

    $client->refreshToken($refreshToken);
    $accessToken = $client->getAccessToken();

    $refreshToken = $accessToken['refresh_token'];
    $accessToken = $accessToken['access_token'];
    $clientId = $client->getClientId();
    $data = [
        'refreshToken' => $refreshToken,
        'accessToken' => $accessToken,
        'tknType' => 'Bearer',
        'clientId' => $clientId,
        'created' => time()
    ];

    //      , .

    return $data;
}

Google рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЯреЛрдХрди рдХреЗрд╡рд▓ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдз рд╣реИред рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдЖрдк рдЯреЛрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 25 рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рд░реНрдл рд╣рдорд╛рд░реЗ рдЯреЛрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирдП рдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ
getStreamMessages.php:

<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/refreshToken.php';

$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->setScopes([
    'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setAccessType("offline");
// $data -      
if (($data['created'] - time()) <= -3600) {
    $data = refreshToken($data['refreshToken'], $db);
}
$client->setAccessToken($data['accessToken']);

$service = new Google_Service_YouTube($client);

$queryParams = [
    'maxResults' => 2000,
    'profileImageSize' => 120
];

$response = $service->liveChatMessages->listLiveChatMessages($liveChatId, 'id,snippet,authorDetails', $queryParams);

echo json_encode($response);

рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд╛рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, $ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд░рдгреА рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИрдВ, рдФрд░ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ рд╣реИ ред

рдореБрдЭреЗ рдХреНрдпрд╛ рдкрд░реЗрд╢рд╛рди рд╣реИ рдХрд┐ рд╣реБрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ рдПрдХ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреЗрдВ, рдХреГрдкрдпрд╛) рдФрд░ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ liveChatMessages рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЖрдпрд╛ рдерд╛ред Db рдХреЗ рд╕рд╛рде

Github рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рд╡рд╣ рд╕рдм рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ_secret.json рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реИ)

All Articles