2010-05-17 6 views
2

Ceci est ma première question sur ce site. Je suis nouveau sur php mais j'ai suivi les conseils et j'ai eu les mains aussi sales que possible. Malheureusement maintenant je suis un peu perplexe avec cette application Youtube simple que j'essaye de créer.Obtenir des liens vidéo depuis le canal Youtube, extraire les ID vidéo des URL et les stocker dans un tableau

Je sais qu'il y a plusieurs questions connexes, mais je n'ai pas encore trouvé une solution complète à mon problème. Quoi qu'il en soit, ce que j'essaie de faire est d'obtenir les URLs des vidéos sur un canal YouTube, d'extraire l'ID vidéo et de créer un tableau que je peux ensuite passer à une fonction javascript pour certains trucs côté client.

Voici mon code jusqu'à présent. Je suis assez sûr que mon problème concerne les tableaux vs les chaînes et les variables dans et hors des méthodes. Dans tous les cas, ma fonction array_map ne fonctionne pas et la fonction showFullFeed() renvoie seulement une valeur au lieu du tableau de liens.

Toute aide est très appréciée. Vive

class ChannelFeed {

function __construct($username) { $this->username=$username; $this->feedUrl=$url=' http://gdata.youtube.com/feeds/api/users/ '.$username.'/favorites'; $this->feed=simplexml_load_file($url); }

public function getYTid() {

$ytURL = $this->feed->entry->link['href'];

$ytvIDlen = 11; // This is the length of YouTube's video IDs

// The ID string starts after "v=", which is usually right after // "youtube.com/watch?" in the URL $idStarts = strpos($ytURL, "?v=");

// In case the "v=" is NOT right after the "?" (not likely, but I like to keep my // bases covered), it will be after an "&": if($idStarts === FALSE) $idStarts = strpos($ytURL, "&v="); // If still FALSE, URL doesn't have a vid ID if($idStarts === FALSE) die("YouTube video ID not found. Please double-check your URL.");

// Offset the start location to match the beginning of the ID string $idStarts +=3;

// Get the ID string and return it $ytvID = substr($ytURL, $idStarts, $ytvIDlen);
return $ytvID;
} public function showFullFeed() { foreach($this->feed->entry as $video){ return $vidarray[] = $video->link['href']; } } }; $youtube = new ChannelFeed('username'); $vids = $youtube->showFullFeed(); $vidIDs = array_map(getYTid(),$vids);

?>

Répondre

6

Cela fonctionne. Je n'ai pas changé le flux des favoris en vidéos qui ont été téléchargées par la chaîne, vous souhaiterez peut-être changer cela. D'abord, le code pour les fonctions youtube, je l'ai mis dans un fichier php séparé et l'ai importé, juste pour garder les choses plus rangées.

<?php 
    class ChannelFeed 
    { 
    function __construct($username) 
    { 
     $this->username=$username; 
     $this->feedUrl=$url='http://gdata.youtube.com/feeds/api/users/'.$username.'/uploads'; 
     $this->feed=simplexml_load_file($url); 
    } 

    public function showFullFeed() 
    { 
     $vidarray = array(); 

     foreach($this->feed->entry as $video) 
     { 
      $vidURL = (string)$video->link['href']; 
      $vidarray[] = $vidURL; 
     } 

     return $vidarray; 
} 
} 

function getYouTubeID($vidURL) 
{ 
    $ytvIDlen = 11; // This is the length of YouTube's video IDs 

    // The ID string starts after "v=", which is usually right after 
    // "youtube.com/watch?" in the URL 
    $idStarts = strpos($vidURL, "?v="); 

    // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my 
    // bases covered), it will be after an "&": 
    if($idStarts === FALSE) 
     $idStarts = strpos($vidURL, "&v="); 

    // If still FALSE, URL doesn't have a vid ID 
    if($idStarts === FALSE) 
     die("YouTube video ID not found. Please double-check your URL."); 

    // Offset the start location to match the beginning of the ID string 
    $idStarts +=3; 

    // Get the ID string and return it 
    $ytvID = substr($vidURL, $idStarts, $ytvIDlen);  

    return $ytvID; 
} 
?> 

suivant est le code dans le fichier principal qu'il appelle

require_once('youtube_channelfeed.php'); 

$youtube = new ChannelFeed('username'); 
$vids = $youtube->showFullFeed(); 
$vidIDs = array_map("getYouTubeID",$vids); 

Cela obtient les ID et les magasins eux dans un tableau en utilisant la fonction de carte du tableau. Merci d'avoir posté le code, je cherchais quelque chose pour faire ce que ça fait, donc ça m'a beaucoup aidé.

0

Il y a probablement d'autres problèmes, mais vous ne donnez pas array_map un callback valide. En outre, votre fonction de rappel doit recevoir au moins un argument.

1

Daer vient remplacer

public function showFullFeed() 
{ 
foreach($this->feed->entry as $video){ 
return $vidarray[] = $video->link['href']; 
} 
} 

à

public function showFullFeed() 
{ 
foreach($this->feed->entry as $video){ 
    $vidarray[] = $video->link['href']; 
} 
     return $vidarray ; 
} 
Questions connexes