所以,这是获取youtube用户的公共播放列表的代码:
function getyoutubeplaylists($userName) {
$yt = connectyoutube();
$yt->setMajorProtocolVersion(2);
$playlistListFeed = $yt->getPlaylistListFeed($userName);
foreach ($playlistListFeed as $playlistListEntry) {
$playlist['title'] = $playlistListEntry->title->text;
$playlist['id'] = $playlistListEntry->getPlaylistID();
$playlists[] = $playlist;
$playlistVideoFeed = $yt->getPlaylistVideoFeed($playlistListEntry->getPlaylistVideoFeedUrl());
foreach ($playlistVideoFeed as $videoEntry) {
$playlist_assignment['youtube_id'] = substr($videoEntry->getVideoWatchPageUrl(),31,11);
$playlist_assignment['id'] = $playlist['id'];
$playlist_assignments[] = $playlist_assignment;
}
}
$everything['playlists'] = $playlists;
$everything['playlist_assignments'] = $playlist_assignments;
return $everything;
}
问题是,这只会获得第一页或结果。关于如何使用Zend Gdata检索下一页结果的任何想法?
原始gdata XML显示了所需的URL:
<link rel="self" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/users/pennstate/playlists?start-index=1&max-results=25"/>
<link rel="next" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/users/pennstate/playlists?start-index=26&max-results=25"/>
但是,getPlaylistListFeed似乎没有任何参数来指定“start-index”或“max-results”。
答案 0 :(得分:2)
这是一个有用的Zend函数,不仅可以检索下一页,还可以检索Feed的所有可用条目。
$playlistListFeed = $yt->retrieveAllEntriesForFeed($yt->getPlaylistListFeed($userName));
答案 1 :(得分:1)
听起来您想要关注Dev Guide example on pagination。
答案 2 :(得分:1)
由于我整天都浪费了“只是试图获取我的网站上显示的视频列表”,我想我会粘贴一些示例代码,这些代码只是教会了我很多。正如预期的那样,Zend_Gdata_YouTube::
已经在Magento安装中。下面的代码将显示“视频”的统一列表,其中播放列表在列表中与其他视频一起显示为相同。 更新:我制作了Magento extension out of my answer。
这只是我放入var / export的通用php。在顶部,您必须包含app/Mage.php
。
<?
$userName='cacycleworksdotcom';
$yt = new Zend_Gdata_YouTube();
//////////////////////////////////////////////////////////////////////
// Get playlists.
$playlistListFeed = $yt->retrieveAllEntriesForFeed($yt->getPlaylistListFeed($userName));
$playlist=Array();
$videoEntry=NULL;
$playlistvideos=Array();
这里,$playlistListFeed
中有一个Zend对象数组。
foreach ($playlistListFeed as $idx=>$playlistListEntry) {
// process each playlist
$playlists[$idx]['title'] = $playlistListEntry->title->text;
$url=$playlistListEntry->getSelfLink()->href;
$id=explode("/PL",$url);
$playlists[$idx]['id'] = $id[1];
$playlistVideoFeed = $yt->getPlaylistVideoFeed($playlistListEntry->getPlaylistVideoFeedUrl());
$playlists[$idx]['time']=0;
$playlists[$idx]['views']=0;
$playlists[$idx]['rating']=0;
现在,在播放列表中,我会查看此播放列表的视频,并收集每个播放列表的统计信息。我总结他们的时间来获得总的游戏时间,然后从播放列表中的视频中捕获最高的观看次数和评级。
foreach ($playlistVideoFeed as $videoEntry) {
// info of each video inside this playlist
$_id=substr($videoEntry->getVideoWatchPageUrl(),31,11);
$playlistvideos[]=$_id;
$_url=$videoEntry->getVideoWatchPageUrl();
$playlists[$idx]['videos'][$_id]=$_url;
$playlists[$idx]['time']+=$videoEntry->getVideoDuration();
$_views=$videoEntry->getVideoViewCount();
if( $_views > $playlists[$idx]['views'] )
$playlists[$idx]['views']=$_views;
$_rating=$videoEntry->getRating()->average;
if( $_rating > $playlists[$idx]['rating'] )
$playlists[$idx]['rating']=$_rating;
}
我最终使用XML来获取缩略图数据。
$xml=$playlistListEntry->getXML();
// $playlists[$idx]['xml']=$xml; // store original XML for now
$xml = simplexml_load_string($xml); // transfer into object
$attrs=$xml->group->thumbnail[1];
$playlists[$idx]['thumb']=(string)$attrs['url'];
// 1st vid id playlist id
// http://www.youtube.com/watch?v=mcnIAErKc-g&list=PLEDADE9CA0E65BA78
$videoid=array_keys( $playlists[$idx]['videos']);
$videoid=$videoid[0];
$playlists[$idx]['url'] = "http://www.youtube.com/watch?v=$videoid&list=PL".$playlists[$idx]['id'];
}
处理播放列表,现在让我们获取不在播放列表中的剩余视频:
//////////////////////////////////////////////////////////////////////
// Videos themselves
$idx=count($playlists);
$userFeed = $yt->getUserUploads($userName);
foreach ($userFeed as $videoEntry) {
$idx++;
$_id=substr($videoEntry->getVideoWatchPageUrl(),31,11);
if( ! in_array($_id, $playlistvideos) ) {
$_url=$videoEntry->getVideoWatchPageUrl();
$playlists[$idx]['id']=$_id;
$playlists[$idx]['url']=$_url;
$playlists[$idx]['title']=$videoEntry->title->text;
$playlists[$idx]['views']=$videoEntry->getVideoViewCount();
$playlists[$idx]['rating']=$videoEntry->getRating()->average;
$thumbs=$videoEntry->getVideoThumbnails();
// these need resizing to width="320" height="180"
$playlists[$idx]['thumb']=$thumbs[0]['url'];
$playlists[$idx]['time']=$videoEntry->getVideoDuration();
} // else { echo "$_id already in playlist\n"; }
}
这里我们有一系列的YouTube视频,顶部是最早排序的播放列表,其次是用户的视频没有出现在同一个最旧的第一个订单的播放列表中。所以我找到了这个简单的排序代码来改变顺序。如果您在这里尝试对多维数组进行排序,那么有关于排序和值得阅读的好文章。
//////////////////////////////////////////////////////////////////////
// http://www.the-art-of-web.com/php/sortarray/
function orderBy($data, $field) {
$code = "return strnatcmp(\$a['$field'], \$b['$field']);";
// swap $a and $b to make descending instead of ascending
usort($data, create_function('$b,$a', $code)); //('$a,$b', $code));
return $data;
}
$playlists = orderBy($playlists, 'views');
//////////////////////////////////////////////////////////////////////
echo "\n\n";
print_r($playlists);
以下代码帮助我开始使用这些愚蠢的GData YouTube Zend对象:
echo "\n\n";
show_methods($videoEntry);
echo "\n\n";
show_methods($playlistListFeed[0]);
echo "\n\n";
show_methods($playlistListFeed);
function show_methods( $_a ) {
echo "<h3>Methods for ".get_class($_a)."</h3>";
$_a= get_class_methods($_a);
$_a=array_unique($_a);
array_multisort(&$_a);
$i=0;
foreach( $_a as $method ) {
$i++;
printf("%-30.30s",$method);
if($i%5==0)
echo "\n";
}
}
以下是显示结构的两个数组条目。请注意,播放列表中包含一个videos
键,其中包含一系列视频。测试videos
密钥可以告诉您它是一个播放列表。 url
是您的用户点击以打开YouTube网站上的视频或播放列表的内容。
[1] => Array
(
[title] => Ducatitech.com "HowTo" Adjust your Valves
[id] => 970EC735D36A95E8
[time] => 855
[views] => 144847
[rating] => 4.9322033
[videos] => Array
(
[dIj3nSJGPZw] => http://www.youtube.com/watch?v=dIj3nSJGPZw&feature=youtube_gdata_player
[3WQY1MRlmH4] => http://www.youtube.com/watch?v=3WQY1MRlmH4&feature=youtube_gdata_player
)
[thumb] => http://i.ytimg.com/vi/dIj3nSJGPZw/mqdefault.jpg
[url] => http://www.youtube.com/watch?v=dIj3nSJGPZw&list=PL970EC735D36A95E8
)
[thumb] => http://i.ytimg.com/vi/mcnIAErKc-g/mqdefault.jpg
[url] => http://www.youtube.com/watch?v=mcnIAErKc-g&list=PLEDADE9CA0E65BA78
)
[7] => Array
(
[id] => 80yCiFkOB9g
[url] => http://www.youtube.com/watch?v=80yCiFkOB9g&feature=youtube_gdata_player
[title] => Ducatitech.com: ExactFit Timing Belt Tensile Test
[views] => 7589
[rating] => 4.25
[thumb] => http://i.ytimg.com/vi/80yCiFkOB9g/0.jpg
[time] => 625
)
最后,你从show_methods()
获得的东西:
Methods for Zend_Gdata_YouTube_VideoEntry
__construct __get __isset __set __toString
__unset addVideoDeveloperTag delete encode ensureMediaGroupIsNotNull
flushNamespaceLookupCache getAlternateLink getAuthor getCategory getComments
getContent getContributor getControl getDOM getEditLink
getEtag getExtensionAttributes getExtensionElements getFeedLink getFlashPlayerUrl
getHttpClient getId getLicenseLink getLink getLocation
getMajorProtocolVersion getMediaGroup getMediaSource getMinorProtocolVersion getNextLink
getNoEmbed getPreviousLink getPublished getRacy getRating
getRecorded getRights getSelfLink getService getSource
getStatistics getSummary getText getTitle getTitleValue
getUpdated getVideoCategory getVideoCommentFeedUrl getVideoComplaintsLink getVideoDescription
getVideoDeveloperTags getVideoDuration getVideoGeoLocation getVideoId getVideoRatingInfo
getVideoRatingsLink getVideoRecorded getVideoResponsesLink getVideoState getVideoTags
getVideoThumbnails getVideoTitle getVideoViewCount getVideoWatchPageUrl getWhere
getXML isVideoEmbeddable isVideoPrivate lookupNamespace registerAllNamespaces