Reputation: 4603
Apologies for the vague title of my question. I'm just trying to figure out why a Youtube video stream on a friend's Wordpress site suddenly broke.
I'm trying to decipher it now, but I thought I'd post here to see if anyone could point me in the correct direction while I make heads or tails of this.
Thank you.
Page in question: http://www.advocatedaily.com/advocatetv/
Error on page:
Warning: main() [function.main]: Node no longer exists in /home/advocate/public_html/wp-content/themes/process/advocate-tv.php on line 45
Warning: main() [function.main]: Node no longer exists in /home/advocate/public_html/wp-content/themes/process/advocate-tv.php on line 45
Fatal error: Call to a member function attributes() on a non-object in /home/advocate/public_html/wp-content/themes/process/advocate-tv.php on line 48
Lines 40 through 55:
// get video player URL
$attrs = $media->group->player->attributes();
$watch = $attrs['url'];
// get video thumbnail
$attrs = $media->group->thumbnail[0]->attributes();
$thumbnail = $attrs['url'];
// get <yt:duration> node for video length
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$length = $attrs['seconds'];
//get <yt:videoId> node for Video ID
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$playlistVideoID = $yt->videoid;
Full snippet of problem area:
</div>
<div id="mainPlaylist" class="grid_6 omega">
<h3 class="title">Legal Feed with Kate Wheeler</h3>
<ul id="playlists">
<?php
// Loop through each video in each playlist
// read feed into SimpleXML object
// *Moved into header to load main Video as well
$playlistFeedURL = 'http://gdata.youtube.com/feeds/api/playlists/6549D4CA7BB99B16?v=2';
$sxml = simplexml_load_file($playlistFeedURL);
// iterate over entries in feed
foreach ($sxml->entry as $entry) {
// get nodes in media: namespace for media information
$media = $entry->children('http://search.yahoo.com/mrss/');
// get video player URL
$attrs = $media->group->player->attributes();
$watch = $attrs['url'];
// get video thumbnail
$attrs = $media->group->thumbnail[0]->attributes();
$thumbnail = $attrs['url'];
// get <yt:duration> node for video length
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$length = $attrs['seconds'];
//get <yt:videoId> node for Video ID
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$playlistVideoID = $yt->videoid;
// get <yt:stats> node for viewer statistics
$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->statistics->attributes();
$viewCount = $attrs['viewCount'];
// get <gd:rating> node for video ratings
$gd = $entry->children('http://schemas.google.com/g/2005');
if ($gd->rating) {
$attrs = $gd->rating->attributes();
$rating = $attrs['average'];
} else {
$rating = 0;
}
?>
<div class="item">
<span class="thumbnail left" rel="<?php echo $entry->id; ?>">
<a href="<?php echo $watch; ?>" rel="<?php echo $playlistVideoID; ?>" onclick="_run();"><img src="<?php echo $thumbnail;?>" /></a>
</span>
<a href="<?php echo $watch; ?>" rel="<?php echo $playlistVideoID; ?>" onclick="_run();"><?php echo $media->group->title; ?></a>
<span class="attr">Duration:</span> <?php printf('%0.2f', $length/60); ?> min.
<div class="clear"></div>
</div>
<?php
}
?>
</ul>
</div>
<div class="hr-single grid_16"></div>
</div>
<div class="article grid_10">
<div id="recentUploads">
<h3 class="grid_8">Recent Uploads</h3>
<div class="clear"></div>
<ul>
<?php
// Loop through each video in each playlist
// read feed into SimpleXML object
// *Moved into header to load main Video as well
$playlistFeedURL = 'http://gdata.youtube.com/feeds/api/playlists/755260781A134FFF?v=2';
$sxml = simplexml_load_file($playlistFeedURL);
// iterate over entries in feed
foreach ($sxml->entry as $entry) {
// get nodes in media: namespace for media information
$media = $entry->children('http://search.yahoo.com/mrss/');
// get video player URL
$attrs = $media->group->player->attributes();
$watch = $attrs['url'];
// get video thumbnail
$attrs = $media->group->thumbnail[0]->attributes();
$thumbnail = $attrs['url'];
// get <yt:duration> node for video length
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$length = $attrs['seconds'];
//get <yt:videoId> node for Video ID
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$playlistVideoID = $yt->videoid;
// get <yt:stats> node for viewer statistics
$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->statistics->attributes();
$viewCount = $attrs['viewCount'];
// get <gd:rating> node for video ratings
$gd = $entry->children('http://schemas.google.com/g/2005');
if ($gd->rating) {
$attrs = $gd->rating->attributes();
$rating = $attrs['average'];
} else {
$rating = 0;
}
?>
<div class="item">
<div class="thumbnail left" rel="<?php echo $entry->id; ?>">
<a href="<?php echo $watch; ?>" rel="<?php echo $playlistVideoID; ?>" onclick="_run();"><img src="<?php echo $thumbnail;?>" /></a>
</div>
<div class="">
<a href="<?php echo $watch; ?>" rel="<?php echo $playlistVideoID; ?>" onclick="_run();"><?php echo $media->group->title; ?></a>
<span class="attr">Duration:</span> <?php printf('%0.2f', $length/60); ?> min.
<p><?php echo $media->group->description; ?></p>
</div>
<div class="clear"></div>
</div>
<?php
}
?>
</ul>
</div>
Upvotes: 0
Views: 447
Reputation: 46
I think the same thing that happened to me may have happened to you.
As per your code it seems the API isn't correctly finding the playlist http://gdata.youtube.com/feeds/api/playlists/6549D4CA7BB99B16?v=2
In an attempt to fix my own troubled calls I added the PL to the Playlist ID : *PL*6549D4CA7BB99B16 http://gdata.youtube.com/feeds/api/playlists/PL6549D4CA7BB99B16?v=2
While googling this, I found a blog post referencing something about adding the ability to include the PL to the calls. apiblog.youtube.com/2012/08/playlists-now-with-more-pl.html
In my quick searches I didn't notice anything about them removing the old way of it sending the playlist ID.
Upvotes: 3