如何通过php 获取Youtube某个User所有Video信息

jacklove
Lepaskan: 2023-03-31 08:08:01
asal
1959 orang telah melayarinya

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 = &#39;&#39;; // 用户名称
    /** 初始化
    * @param String $user 用户名称
    */
    public function __construct($user=&#39;&#39;){
        if($user!=&#39;&#39;){
            $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(&#39;http://gdata.youtube.com/feeds/base/users/&#39;.$this->_user.&#39;/uploads?max-results=1&start-index=1&#39;);
        $videonum = $videos->children(&#39;openSearch&#39;, true)->totalResults;
        return $videonum;
    }
    /** 获取视频信息
    * @param  String $index 视频的序号
    * @return Array
    */
    private function getVideoInfo($index){
        // 获取视频id及简介
        $video = simplexml_load_file(&#39;http://gdata.youtube.com/feeds/base/users/&#39;.$this->_user.&#39;/uploads?max-results=1&start-index=&#39;.$index);
        $videoId = str_replace(&#39;http://gdata.youtube.com/feeds/base/videos/&#39;, &#39;&#39;, (string)($video->entry->id));
        $videoContent = $this->getContent($video->entry->content);
        $videoPublish = strtotime($video->entry->published);
        // 根据视频id获取视频信息
        $content = file_get_contents(&#39;http://youtube.com/get_video_info?video_id=&#39;.$videoId);
        parse_str($content, $ytarr);
        $info = array();
        $info[&#39;id&#39;] = $videoId;
        $info[&#39;thumb_photo&#39;] = $ytarr[&#39;thumbnail_url&#39;];       // 缩略图
        $info[&#39;middle_photo&#39;] = $ytarr[&#39;iurlmq&#39;];             // 中图
        $info[&#39;big_photo&#39;] = $ytarr[&#39;iurl&#39;];                  // 大图
        $info[&#39;title&#39;] = $ytarr[&#39;title&#39;];                     // 标题
        $info[&#39;content&#39;] = $videoContent;                     // 简介
        $info[&#39;publish_date&#39;] = $videoPublish;                // 发布时间
        $info[&#39;length_seconds&#39;] = $ytarr[&#39;length_seconds&#39;];   // 视频长度(s)
        $info[&#39;view_count&#39;] = $ytarr[&#39;view_count&#39;];           // 观看次数
        $info[&#39;avg_rating&#39;] = $ytarr[&#39;avg_rating&#39;];           // 平均评分
        $info[&#39;embed&#39;] = &#39;//www.youtube.com/embed/&#39;.$videoId; // Embed
        return $info;
    }
    /** 获取视频简介
    * @param  String $content 内容
    * @return String
    */
    private function getContent($content){
        preg_match(&#39;/<span>(.*?)<\/span>/is&#39;, $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
?>
Salin selepas log masuk


demo.php

<?php
require &#39;YTUserVideo.class.php&#39;;
$obj = new YTUserVideo(&#39;GOtriphk&#39;); // 用户名称GOtriphk https://www.youtube.com/user/GOtriphk/videos
$videosInfo = $obj->getVideosInfo();
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r($videosInfo);
echo &#39;
'; ?>
Salin selepas log masuk


输出:

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
        )
.....
Salin selepas log masuk

本文讲解了如何通过php 获取Youtube某个User所有Video信息,更多相关内容请关注php中文网。

相关推荐:

php 字符编码转换类的相关内容

对php implode/explode, serialize, json, msgpack 之间性能的讲解

关于php flock 使用实例的讲解

Atas ialah kandungan terperinci 如何通过php 获取Youtube某个User所有Video信息. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!