我一直在第54行得到这个错误,我不知道为什么。 我所要做的就是处理查询结果的第一个条目:提取它的URL,以构建一个可嵌入的视频对象。
<?php
function extractID($youtubeURL)
{
//split off the final bit of the URL beginning with ‘=’
$youtubeID = strchr($youtubeURL,'=');
//remove that equals sign to get the video ID
$youtubeID = substr($youtubeID,1);
return $youtubeID;
}
?>
<?php
// set feed URL
$lang = $_POST['language'];
$query = $_POST['query'] . "%20review";
switch($lang){
case "English":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=en
URL;
break;
case "French":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=fr
URL;
break;
case "Spanish":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=es
URL;
break;
}
// read feed into SimpleXML object
$sxml = simplexml_load_file($feedURL);
// get the first media entry &
// get nodes in media: namespace for media information
$media = $sxml->entry[0]->children('http://search.yahoo.com/mrss/');
// get video player URL
$attrs = $media->group->player->attributes();
// **THIS KEEPS CAUSING THE ERROR.**
$videoURL = $attrs['url'];
// extract the video's ID from the URL
$videoID = extractID($videoURL);
?>
<?php
echo <<<EOD
<objectwidth="425" height="350" data="http://www.youtube.com/v/
<?php echo $videoID ?>
type="application/x-shockwave-flash"><param name="src"
value="http:/www.youtube.com/v/<?php echo $videoID ?>" /></object>
EOD;
?>
答案 0 :(得分:2)
您提供的PHP代码中的问题似乎是构建YouTube RSS Feed网址的部分内容。它看起来如下:
<?php
// set feed URL
$lang = $_POST['language'];
$query = $_POST['query'] . "%20review";
switch($lang){
case "English":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=en
URL;
break;
case "French":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=fr
URL;
break;
case "Spanish":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=$query;
&v=2
&format=5
&lr=es
URL;
break;
}
我可以看到有两件事是错误的:
heredocs末尾的URL;
行应不缩进。它们应该类似于以下内容:
case "English":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=en
URL;
break;
请勿在heredocs中使用<?php echo $query; ?>
。只需使用$query
,就像上面的case "Spanish":
块一样。
修复这些heredoc后,你会发现代码不会做你想要的。 $feedURL
会包含大量不需要的空格,这会导致您对simplexml_load_file
的调用失败。但是,如果仔细查看供稿网址,您会注意到它们与最终的“语言代码”(en
,fr
,es
)完全相同。我会做的是使用一个将语言名称翻译成语言代码的数组,并使用它将语言代码附加到提要URL。例如,类似下面的内容应该有效:
$lang_codes = array(
"English" => "en",
"French" => "fr",
"Spanish" => "es"
);
$feedURL = "http://gdata.youtube.com/feeds/api/videos?q=$&v=2&format=5&lr=" . $lang_codes[$lang];
其余代码似乎有效。一旦我修复了获取RSS提要URL的问题,就可以非常愉快地获取提要,从中提取YouTube网址并获取视频ID。
答案 1 :(得分:-2)
问题是$ media-&gt;组是空的。它没有孩子。这意味着$ media-&gt; group-&gt;播放器为NULL。您不能在NULL上调用attributes(),因此会出现语法错误。