如何使用 PHP 登录 Youtube?

Posted

技术标签:

【中文标题】如何使用 PHP 登录 Youtube?【英文标题】:How to Login to Youtube Using PHP? 【发布时间】:2011-02-25 15:51:40 【问题描述】:

我想通过这个 api 调用使用 youtube api 为用户获取新的订阅视频:

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

没有登录我得到这个响应:

User authentication required.
Error 401

如何从 php 登录 youtube?

【问题讨论】:

【参考方案1】:

您可以使用OAuth、AuthSub 或ClientLogin。 ClientLogin 最简单(它只使用用户名/密码),但不鼓励使用,因为它要求用户将他们的凭据交给您。 AuthSub 和 OAuth 没有。 Google 的 PHP library 目前似乎只支持 AuthSub (PHP example) 和 ClientLogin。

【讨论】:

【参考方案2】:

这是登录的简单功能。成功时返回错误消息或 0。我使用了自己的 curl 库,但不清楚 $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;
    

【讨论】:

【参考方案3】:

这个对我有用。使用谷歌账号登录,获取登录用户频道信息。

Download Code

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

【讨论】:

以上是关于如何使用 PHP 登录 Youtube?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 php 使用 Youtube Api v3 喜欢 Youtube 视频

如何使用 PHP 在另一个 youtube 频道上上传一个 youtube 视频

如何使用 PHP 从视频 URL 中检索 YouTube 视频详细信息?

如何使用包含youtube视频的PHP发送电子邮件

如何使用 php 获取 youtube 和 vimeo 嵌入代码的视频缩略图?

如何使用php和API从url获取youtube视频的缩略图