2010-05-30 12 views
7

Ich möchte die youtube api verwenden die Benutzer neue Abonnement Videos mit diesem API-Aufruf zu erhalten:Wie man sich auf Youtube mit PHP anmeldet?

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

Ohne Anmeldung ich diese Antwort erhalten:

User authentication required. 
Error 401 

Wie kann ich auf youtube anmelden aus PHP?

Antwort

5

Sie können OAuth, AuthSub oder ClientLogin verwenden. ClientLogin ist am einfachsten (es verwendet lediglich einen Benutzernamen/ein Passwort), wird jedoch davon abgeraten, da Benutzer dazu aufgefordert werden, ihre Zugangsdaten an Sie zu übertragen. AuthSub und OAuth nicht. Googles PHP library scheint derzeit nur AuthSub (PHP example) und ClientLogin zu unterstützen.

+0

Bitte erläutern Sie Ihre downvote. –

0

Hier ist eine einfache Funktion zum Login. Es gibt eine Fehlermeldung zurück oder 0 bei Erfolg. Ich benutzte eigene curl lib aber it't ziemlich klar, dass $ this-> curl-> SetHeader mit 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

Dieses ist für mich arbeitet ersetzt werden. Melden Sie sich mit einem Google-Konto an und erhalten Sie Informationen zum angemeldeten Benutzerkanal.

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> 
Verwandte Themen