7

youtube apiを使用して、このapi呼び出しでユーザーに新しいサブスクリプションビデオを取得したいと思います。

http://gdata.youtube.com/feeds/api/users/default/newsubscriptionvideos

ログインしないと、次の応答が返されます。

User authentication required.
Error 401

PHPからYouTubeにログインするにはどうすればよいですか?

4

3 に答える 3

5

OAuthAuthSub、またはClientLoginを使用できます。ClientLoginは最も単純です(ユーザー名/パスワードを使用するだけです)が、ユーザーが自分の資格情報をあなたに引き渡す必要があるため、お勧めしません。AuthSubとOAuthはそうではありません。GoogleのPHPライブラリは現在、AuthSub(PHPの例)とClientLoginのみをサポートしているようです。

于 2010-05-30T10:35:07.660 に答える
0

ログインを行うための簡単な関数は次のとおりです。エラーメッセージが返されるか、成功すると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;
    }
于 2010-08-23T02:06:16.420 に答える
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>
于 2015-08-11T06:17:48.077 に答える