2016-04-03 12 views
0

Da dies eine Frage zu der neuen YouTube-API ist, die gerade veröffentlicht wurde, handelt es sich nicht um ein Duplikat.Abrufen von YouTube Live Stream Chat-Nachrichten

Ich versuche, die Chat-Nachrichten von der YouTube-API zu holen 3. Ich habe alles versucht, was ich kann, und ich bin festgefahren.

Ich brauche die liveChatId, um sie abrufen zu können, aber ich weiß nicht, wie ich diesen Wert abrufen kann. Die API sagt, dass Sie es von LiveBroadcast snippet.liveChatId erhalten, aber mit dem Code, den ich diesem Beitrag beigefügt habe, gibt es keinen Wert im Feld liveChatId. Es ist einfach leer. Wie kann ich die liveChatId richtig abrufen?

<?php 
session_start(); 

// 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'; 

$OAUTH2_CLIENT_ID = 'MY-CLIENT-ID'; 
$OAUTH2_CLIENT_SECRET = 'MY-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); 
$_SESSION['state'] = $_GET['state']; 
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 { 
    // Execute an API request that lists broadcasts owned by the user who 
    // authorized the request. 
    $broadcastsResponse = $youtube->liveBroadcasts->listLiveBroadcasts(
     'id,snippet', 
     array(
      'mine' => 'true', 
     )); 

var_dump($broadcastsResponse['items']); 

    $htmlBody .= "<h3>Live Broadcasts</h3><ul>"; 
    foreach ($broadcastsResponse['items'] as $broadcastItem) { 
     $htmlBody .= $broadcastItem['snippet']['title'] ."<br />Chat ID: ". $broadcastItem['liveChatId'] ."<br />ID: ". $broadcastItem['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>My Live Streams</title> 
</head> 
<body> 
    <?=$htmlBody?> 
</body> 
</html> 

Wo bin ich verloren?

+0

Ich verstehe nicht, warum dies kein Duplikat der verknüpften Frage ist. Das verknüpfte Duplizierungsziel * verwendet * die neue API. – JAL

+0

Die verknüpfte Frage bezieht sich darauf, wie Sie die ID erhalten und verwenden können. Ich versuche wirklich, es auf diese Weise zu erhalten, aber ich kann die LiveChatId nicht von dem Ergebnis mit meinem Beispielcode abrufen. Das Feld liveChatId ist leer. Deshalb brauche ich Hilfe! : D –

+0

Sie versuchen, die 'liveChatId' aus Ihrer eigenen Veranstaltung zu holen, oder? Nicht ein anderer Benutzer? – JAL

Antwort

0

Ihr Kommentar hat das Problem aufgedeckt. YouTube unterstützt derzeit nicht das Mischen von Live-Anrufen mit "Jetzt streamen" und das Erstellen von Veranstaltungen über die API. Schließen Sie Live-Events ab, indem Sie entweder den einen oder den anderen Flow verwenden und nicht beide austauschen.

+0

Danke! Aber sieh mal ... Dies ist: '$ url =" https://www.googleapis.com/youtube/v3/liveChat/messages? LiveChatId = MYID & Teil = Snippet & key = MYAPIKEY "; $ ch = curl_init(); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de-US; rv: 1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); $ htmlBody = curl_exec ($ ch); curl_close ($ ch); ' Gibt:" Sie haben nicht die erforderlichen Berechtigungen zum Abrufen von Nachrichten für den angegebenen Chat. ", Obwohl ich richtig angemeldet bin. Irgendwelche Ideen warum? –