YouTube スクリプトを Youtube API バージョン 2 に移行しようとしています。3GP または MP4 モバイル ストリームを持たない特定の動画があり、それを使用しています。
致命的なエラー: 29 行目の C:\wamp\www\view.php の非オブジェクトに対するメンバー関数 attributes() の呼び出し
29行目は
/* Get 3GP STREAM URL */
$attrs = $media->group->content[1]->attributes(); /* THIS IS LINE 29 */
$obj->tgpp = $attrs['url'];
empty および isset 関数を使用して、3GP/MP4 ストリーム リンクが利用可能かどうかを確認する条件ステートメントを作成しようとしています。
if (!empty($media->group->content[1]->attributes())) {
$attrs = $media->group->content[1]->attributes();
$obj->tgpp = $attrs['url'];
} else {
echo "";
}
if (isset($media->group->content[1]->attributes())) {
$attrs = $media->group->content[1]->attributes();
$obj->tgpp = $attrs['url'];
} else {
echo "";
}
どちらもエラーをスローします
致命的なエラー: 29 行目の C:\wamp\www\view.php の書き込みコンテキストでメソッドの戻り値を使用できません
このスニペットで
if ($media->group->content[1]->attributes() == "") { echo ""; }
else {
$attrs = $media->group->content[1]->attributes();
$obj->tgpp = $attrs['url'];
}
のエラーで戻ってきました
致命的なエラー: 29 行目の C:\wamp\www\view.php の非オブジェクトに対するメンバー関数 attributes() の呼び出し
スクリプトはこちら
<?php
header("Content-type: text/html; charset=UTF-8");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
/* Function to parse a video <entry> */
function parseVideoEntry($entry) {
$obj= new stdClass;
/* Get author name and feed URL */
$obj->author = $entry->author->name;
$obj->authorURL = $entry->author->uri;
/* Geet video publish date */
$obj->publish = $entry->published;
/* Get nodes in media: namespace for media information */
$media = $entry->children('http://search.yahoo.com/mrss/');
$obj->title = $media->group->title;
$obj->description = $media->group->description;
/* Get video category */
$attrs = $media->group->category->attributes();
$obj->category = $attrs['label'];
/* Get FLV STREAM URL */
$attrs = $media->group->content[0]->attributes();
$obj->flv = $attrs['url'];
/* Get 3GP STREAM URL */
$attrs = $media->group->content[1]->attributes();
$obj->tgpp = $attrs['url'];
/* Get MP4 STREAM URL */
$attrs = $media->group->content[2]->attributes();
$obj->mp4 = $attrs['url'];
/* Get video thumbnail */
$attrs = $media->group->thumbnail[0]->attributes();
$obj->thumbnailURL = $attrs['url'];
/* Get <yt:duration> node for video length */
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$obj->length = $attrs['seconds'];
/* Get <yt:stats> node for viewer statistics */
$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
if ($yt->statistics)
{
$attrs = $yt->statistics->attributes();
$obj->viewCount = $attrs['viewCount'];
}
else
{
$obj->viewCount = 0;
}
//LIKES get <yt:rating> node for number of likes statistics
//$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
if ($yt->rating)
{
$attrs = $yt->rating->attributes();
$obj->numLikes = $attrs['numLikes'];
}
else
{
$obj->numLikes = 0;
}
//DISLIKES get <yt:rating> node for number of dislikes statistics
//$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
if ($yt->rating)
{
$attrs = $yt->rating->attributes();
$obj->numDislikes = $attrs['numDislikes'];
} else
{
$obj->numDislikes = 0;
}
return $obj;
} // close funcion parseVideoEntry
/* Get video ID from $_GET */
!isset($_GET['id']) ? die ('ERROR: Missing video ID') : $vid = $_GET['id'];
/* Set video data feed URL */
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/'.$vid.'?v=2';
/* Read feed into SimpleXML object */
$entry = simplexml_load_file($feedURL);
/* Parse video entry */
$video = parseVideoEntry($entry);
?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?=$video->title?></title>
<link href="./style.css" rel="stylesheet" type="text/css" />
</head>
<ul>
<li>Stream:</li>
<li><a href="<?=$video->tgpp?>">3GP</a></li>
<li><a href="<?=$video->mp4?>">MP4</a></li>
<li><a href="<?=$video->flv?>">Youtube Player</a></li>
</ul>