从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,并将它们存储在数组中的主文件中的代码。
感谢您发布代码,我一直在寻找能够做到的事情,所以它帮了我很多。
康达尔只需更换
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 ;
}