php 获取Youtube某个User所有Video信息
最后更新于:2022-04-01 14:12:58
**php 获取Youtube某个User所有Video信息**
因工作需要,获取Youtube上某个用户的所有视频信息,写了这个类,分享给大家。
**YTUserVideo.class.php**
~~~
<?php
/**获取Youtube某个User所有Video信息
*Date: 2015-01-08
*Author: fdipzone
*Ver: 1.0
*
*Func:
*public getVideosInfo 获取用户所有视频信息
*private getVideoNum 获取用户视频数量
*private getVideoInfo 获取视频信息
*private getContent 视频简介整理
*private unescape unicode转中文
*/
class YTUserVideo{ // class start
private $_user = ''; // 用户名称
/**初始化
* @param String $user 用户名称
*/
public function __construct($user=''){
if($user!=''){
$this->_user = $user;
}else{
throw new Exception("user is empty", 1);
}
}
/**获取user所有视频信息
* @return Array
*/
public function getVideosInfo(){
$info = array();
// 获取视频数量
$videonum = $this->getVideoNum();
// 获取视频信息
for($i=1; $i<=$videonum; $i++){
$videoInfo = $this->getVideoInfo($i);
array_push($info, $videoInfo);
}
return $info;
}
/**获取用户视频数量
* @return int
*/
private function getVideoNum(){
$videos = simplexml_load_file('http://gdata.youtube.com/feeds/base/users/'.$this->_user.'/uploads?max-results=1&start-index=1');
$videonum = $videos->children('openSearch', true)->totalResults;
return $videonum;
}
/**获取视频信息
* @param String $index 视频的序号
* @return Array
*/
private function getVideoInfo($index){
// 获取视频id及简介
$video = simplexml_load_file('http://gdata.youtube.com/feeds/base/users/'.$this->_user.'/uploads?max-results=1&start-index='.$index);
$videoId = str_replace('http://gdata.youtube.com/feeds/base/videos/', '', (string)($video->entry->id));
$videoContent = $this->getContent($video->entry->content);
$videoPublish = strtotime($video->entry->published);
// 根据视频id获取视频信息
$content = file_get_contents('http://youtube.com/get_video_info?video_id='.$videoId);
parse_str($content, $ytarr);
$info = array();
$info['id'] = $videoId;
$info['thumb_photo'] = $ytarr['thumbnail_url']; // 缩略图
$info['middle_photo'] = $ytarr['iurlmq']; // 中图
$info['big_photo'] = $ytarr['iurl']; // 大图
$info['title'] = $ytarr['title']; // 标题
$info['content'] = $videoContent; // 简介
$info['publish_date'] = $videoPublish; // 发布时间
$info['length_seconds'] = $ytarr['length_seconds']; // 视频长度(s)
$info['view_count'] = $ytarr['view_count']; // 观看次数
$info['avg_rating'] = $ytarr['avg_rating']; // 平均评分
$info['embed'] = '//www.youtube.com/embed/'.$videoId; // Embed
return $info;
}
/**获取视频简介
* @param String $content 内容
* @return String
*/
private function getContent($content){
preg_match('/<span>(.*?)<\/span>/is', $content, $matches);
return $this->unescape($matches[1]);
}
/* unicode 转 中文
* @param String $str unicode 字符串
* @return String
*/
private function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}elseif(substr($v,0,3) == "&#x"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
} // class end
?>
~~~
**demo.php**
~~~
<?php
require 'YTUserVideo.class.php';
$obj = new YTUserVideo('GOtriphk'); // 用户名称GOtriphk https://www.youtube.com/user/GOtriphk/videos
$videosInfo = $obj->getVideosInfo();
echo '<pre>';
print_r($videosInfo);
echo '</pre>';
?>
~~~
**输出:**
~~~
Array
(
[0] => Array
(
[id] => jYDwFozp6PY
[thumb_photo] => http://i.ytimg.com/vi/jYDwFozp6PY/default.jpg
[middle_photo] => http://i.ytimg.com/vi/jYDwFozp6PY/mqdefault.jpg
[big_photo] => http://i.ytimg.com/vi/jYDwFozp6PY/hqdefault.jpg
[title] => 【比卡超ssss突襲尖咀!!!】香港比卡超展
[content] => 香港有比卡超展,同場會展出全球最大、高13米嘅「比卡超立體飛船」,仲會有700隻唔同角色嘅精靈現身,當然亦唔小得又勁多期間限定紀念品可以優先搶以及由橫濱專程到港嘅聖誕版比卡超同粉絲全接觸,總之飛唔飛都一樣有得玩!The ONE x 寵物小精靈 聖誕夢想飛行日期:2014年11月9日至2015年1月4日時間:10am-10pm地點:The ONE UG2 中庭
[publish_date] => 1415257662
[length_seconds] => 124
[view_count] => 603
[avg_rating] => 0.0
[embed] => //www.youtube.com/embed/jYDwFozp6PY
)
.....
~~~
**源码下载地址:[点击查看](https://github.com/xfdipzone/25.YTUserVideo)**