youtube apiを使用して、このapi呼び出しでユーザーに新しいサブスクリプションビデオを取得したいと思います。
http://gdata.youtube.com/feeds/api/users/default/newsubscriptionvideos
ログインしないと、次の応答が返されます。
User authentication required.
Error 401
PHPからYouTubeにログインするにはどうすればよいですか?
youtube apiを使用して、このapi呼び出しでユーザーに新しいサブスクリプションビデオを取得したいと思います。
http://gdata.youtube.com/feeds/api/users/default/newsubscriptionvideos
ログインしないと、次の応答が返されます。
User authentication required.
Error 401
PHPからYouTubeにログインするにはどうすればよいですか?
OAuth、AuthSub、またはClientLoginを使用できます。ClientLoginは最も単純です(ユーザー名/パスワードを使用するだけです)が、ユーザーが自分の資格情報をあなたに引き渡す必要があるため、お勧めしません。AuthSubとOAuthはそうではありません。GoogleのPHPライブラリは現在、AuthSub(PHPの例)とClientLoginのみをサポートしているようです。
ログインを行うための簡単な関数は次のとおりです。エラーメッセージが返されるか、成功すると0が返されます。独自のcurllibを使用しましたが、$ this-> curl-> SetHeaderをcurl_setopt($ ch、CURLOPT_HTTPHEADER、$ header)に置き換えることができるかどうかは明確ではありません。
public function login(Model_ServiceAccount $account){
$this->curl->SetHeader('Content-type', 'application/x-www-form-urlencoded');
$this->curl->post('https://www.google.com/youtube/accounts/ClientLogin',
'Email=' . $account->mail->login . '&Passwd=' . $account->mail->password . '&service=youtube&source=whatever');
if (preg_match('~Error=(.+)~', $this->curl->getResponse(), $match))
return $match[1];
if (!preg_match('~Auth=(.*)~', $this->curl->getResponse(), $match)) Toolkit::error('Unhandled error in Authentication request');
$authToken = $match[1];
$this->curl->SetHeader('Authorization: GoogleLogin auth', $this->developerKey);
$this->curl->SetHeader('X-GData-Key: key=', $authToken);
$this->curl->SetHeader('Content-Type', 'application/atom+xml');
return 0;
}
これは私のために働いています。Googleアカウントを使用してログインし、ログインしたユーザーチャネル情報を取得します。
<?php
require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_YoutubeService.php';
session_start();
$OAUTH2_CLIENT_ID = 'XXXXXXXXXXXXXXXX';
$OAUTH2_CLIENT_SECRET = 'XXXXXXXXXXXXXXXX';
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
$youtube = new Google_YoutubeService($client);
if (isset($_GET['code']))
{
if (strval($_SESSION['state']) !== strval($_GET['state']))
{
die('The session state did not match.');
}
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
header('Location: ' . $redirect);
}
if (isset($_SESSION['token']))
{
$client->setAccessToken($_SESSION['token']);
}
$json_output = json_decode($client->getAccessToken());
$token = $json_output->access_token;
if ($client->getAccessToken())
{
$userid = getYoutubeData($token);
$htmlBody = "SubscriberCount: ".youtubefollowers($userid);
$_SESSION['token'] = $client->getAccessToken();
}
else
{
$state = mt_rand();
$client->setState($state);
$_SESSION['state'] = $state;
$authUrl = $client->createAuthUrl();
$htmlBody = <<<END
<h3>Connect to youtube</h3>
<p>You need to <a href="$authUrl">Connect</a> before proceeding.<p>
END;
}
function getYoutubeData($token)
{
$json_url ='https://www.googleapis.com/youtube/v3/channels?part=contentDetails&mine=true&access_token='.$token;
$json = file_get_contents($json_url);
$json_output = json_decode($json);
if($json_output->items[0]->id){
$id = $json_output->items[0]->id;
}else{
$id = "";
}
return $id;
}
function youtubefollowers($channelID)
{
$json_url ='https://www.googleapis.com/youtube/v3/channels?part=statistics&id='.$channelID.'&key=AIzaSyAlgOkFu2KlYJAQwt5j3jO1rUARpPzAIww';
$json = file_get_contents($json_url);
$json_output = json_decode($json);
if($json_output->items[0]->statistics->subscriberCount){
$subscriberCount = $json_output->items[0]->statistics->subscriberCount;
}else{
$subscriberCount = 0;
}
return $subscriberCount;
}
?>
<!doctype html>
<html>
<head>
<title>YouTube</title>
</head>
<body>
<?=$htmlBody?>
</body>
</html>