2016-04-03 6 views
0

これは、リリースされたばかりの新しいYouTube APIに関する質問ですので、重複していません。YouTubeライブストリームチャットメッセージを取得する

私はYouTube APIからチャットメッセージを取得しようとしています。私はできる限り試してみましたが、私は立ち往生しています。

私はliveChatIdをフェッチする必要がありますが、その値を取得する方法はわかりません。 APIはあなたがliveBroadcast snippet.liveChatIdからそれを取得すると言っていますが、私がこの投稿に添付したコードではliveChatIdフィールドに値はありません。それはちょうど空です。 liveChatIdを正しく取得するにはどうすればよいですか?

<?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> 

どこが失われましたか?

+0

なぜこれがリンクされた質問の複製ではないのか分かりません。リンクされたdupeターゲット*は、新しいAPIを使用します。 – JAL

+0

リンクされた質問は、IDを取得して使用する方法です。 私は実際にそのように取得しようとしますが、私のサンプルコードでは結果からliveChatIdを返すことができません。 liveChatIdフィールドは空です。だから私は助けが必要です! :D –

+0

自分のイベントから 'liveChatId'を取得しようとしていますか?別のユーザーではないのですか? – JAL

答えて

0

お客様のコメントでこの問題が明らかになりました。 YouTubeは現在、ライブストリームを「今すぐストリーム」にミキシングし、API経由でイベントを作成することはサポートしていません。どちらかのフローを使用してライブイベントを完了し、両方を交換しないでください。

+0

ありがとう!しかし、ここを見てください... '$ url =" https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId = MYID&part = 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; en-US; rv:1.8.1.13)Gecko/20080311 Firefox/2.0.0.13'); $ htmlBody = curl_exec($ ch); curl_close($ ch); ' 「指定したチャットのメッセージを取得するために必要な権限がありません」というメッセージが表示されます。なぜどんなアイディアですか? –

関連する問題