2010-05-30 3 views
7

voglio utilizzare l'API di YouTube per ottenere degli utenti nuovi video di abbonamento con questa chiamata API:Come accedere a Youtube usando PHP?

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

senza effettuare il login ottengo questa risposta:

User authentication required. 
Error 401 

Come posso accedere a YouTube dal php?

risposta

5

È possibile utilizzare OAuth, AuthSub o ClientLogin. ClientLogin è il più semplice (utilizza solo un nome utente/password), ma scoraggiato perché richiede agli utenti di consegnare le proprie credenziali all'utente. AuthSub e OAuth no. Al momento, il numero di telefono di Google PHP library supporta solo AuthSub (PHP example) e ClientLogin.

+0

Si prega di spiegare il tuo downvote. –

0

Ecco una semplice funzione per effettuare il login. È un messaggio di errore di ritorno o 0 in caso di successo. Ho usato proprio ricciolo lib ma it't abbastanza chiaro che $ this-> curl-> SetHeader può essere sostituito con curl_setopt ($ ch, CURLOPT_HTTPHEADER, $ intestazione)

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

Questo sta lavorando per me. Accedi utilizzando l'account google e ottieni le informazioni sul canale utente registrate.

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>