从Youtube频道获取视频链接,从Url中提取视频ID并将其存储在数组中

问题描述:

这是我对该网站的第一个问题。我对PHP很陌生,但我遵循了建议,尽可能让我的手变得肮脏。不幸的是,现在我对我试图创建的这个简单的Youtube应用程序有点困惑。从Youtube频道获取视频链接,从Url中提取视频ID并将其存储在数组中

我知道那里有几个相关的问题,但我还没有找到一个全面的解决方案来解决我的问题。

无论如何,我想要做的就是在YouTube频道中获取视频的URL,提取视频ID并创建一个数组,然后我可以传递给JavaScript函数以获得一些很酷的客户端内容。

这是我的代码到目前为止。我很确定我的问题涉及数组与字符串和变量的方法。无论如何,我的array_map函数不起作用,showFullFeed()函数只返回一个值而不是链接数组。

任何帮助都非常appreaciated。干杯

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);

?>

这工作。不是我将收藏夹中的数据流更改为频道上传的视频,因此您可能需要将其更改回来。

首先,代码为youtube函数,我把它放在一个单独的php文件并导入它,只是为了保持整洁。

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

接下来是在调用它

require_once('youtube_channelfeed.php'); 

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

此使用阵列映射函数得到的ID,并将它们存储在数组中的主文件中的代码。

感谢您发布代码,我一直在寻找能够做到的事情,所以它帮了我很多。

可能有其他的问题,但你不给array_map有效callback。另外,你的回调函数应该至少接收一个参数。

康达尔只需更换

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 ; 
}