2010-05-30 10 views
7

chcę użyć API YouTube, aby uzyskać użytkowników nowe filmy subskrypcyjnych z tej rozmowy API:Jak zalogować się do serwisu Youtube przy użyciu PHP?

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

bez logowania się uzyskać tej odpowiedzi:

User authentication required. 
Error 401 

Jak mogę się zalogować do serwisu YouTube z php?

Odpowiedz

5

Można użyć OAuth, AuthSub lub ClientLogin. ClientLogin jest najprostszy (po prostu używa nazwy użytkownika/hasła), ale odradza się, ponieważ wymaga od użytkowników przekazania swoich poświadczeń. AuthSub i OAuth nie. Google PHP library wydaje się obecnie wspierać tylko AuthSub (PHP example) i ClientLogin.

+0

proszę wyjaśnić downvote. –

0

Oto prosta funkcja logowania. Jest to komunikat o błędzie zwrotu lub 0 w przypadku sukcesu. Kiedyś własne curl lib ale it't całkiem jasne, że $ this-> curl-> setHeader można zastąpić 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; 
    } 
0

To jeden pracuje dla mnie. Zaloguj się za pomocą konta Google i uzyskaj informacje o zalogowanym kanale użytkownika.

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>