2

这是我在这个网站上的第一个问题。我是 php 新手,但我听从了建议,并尽可能地弄脏了我的手。不幸的是,现在我对我正在尝试创建的这个简单的 Youtube 应用程序感到有些困惑。

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

无论如何,我要做的是在 youtube 频道中获取视频的 url,提取视频 ID 并创建一个数组,然后我可以将其传递给 javascript 函数以获取一些很酷的客户端内容。

到目前为止,这是我的代码。我很确定我的问题与方法中的数组、字符串和变量有关。在任何情况下,我的 array_map 函数都不起作用,并且 showFullFeed() 函数只返回一个值而不是链接数组。

任何帮助都非常感谢。干杯

 

类 ChannelFeed {

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

公共函数 getYTid() {

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

$ytvIDlen = 11; // 这是 YouTube 视频 ID 的长度

// ID 字符串在“v=”之后开始,通常紧随其后 // “youtube.com/watch?” 在网址中 $idStarts = strpos($ytURL, "?v=");

// 如果 "v=" 不在 "?" 之后 (不太可能,但我喜欢保留我的 // 覆盖的基础),它将在“&”之后: 如果($idStarts === 假) $idStarts = strpos($ytURL, "&v="); // 如果还是 FALSE,则 URL 没有 vid ID 如果($idStarts === 假) die("未找到 YouTube 视频 ID。请仔细检查您的网址。");

// 偏移起始位置以匹配 ID 字符串的开头 $idStarts +=3;

// 获取ID字符串并返回 $ytvID = substr($ytURL, $idStarts, $ytvIDlen);
返回$ytvID;
} 公共函数 showFullFeed() { foreach($this->feed->entry as $video){ 返回 $vidarray[] = $video->link['href']; } } }; $youtube = new ChannelFeed('用户名'); $vids = $youtube->showFullFeed(); $vidIDs = array_map(getYTid(),$vids);

?>

4

3 回答 3

6

这行得通。不是我将流从收藏夹更改为频道已上传的视频,因此您可能希望将其更改回来。

首先,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 并将它们存储在数组中。

感谢您发布代码,我一直在寻找可以做到这一点的东西,所以它对我有很大帮助。

于 2011-10-03T14:05:31.040 回答
1

只是更换

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 ;
}
于 2011-04-21T23:09:42.980 回答
0

可能还有其他问题,但您没有给array_map一个有效的回调。此外,您的回调函数应该至少接收一个参数。

于 2010-05-17T15:19:22.760 回答