zoukankan      html  css  js  c++  java
  • 捉取映客直播数据 20171121可用

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2017/11/3
     * Time: 13:17
     * desc: 抓取映客热门直播主播,仅第一页
     * 原URL:http://baseapi.busi.inke.cn/live/LiveHotList
     */
    namespace Library;
    
    class AnchorYingKe
    {
        public static function getYingKeAnchor($url)
        {
            $anchor_list = self::getAnchorList($url);
            $i = 0;
            foreach ($anchor_list as $v) {
                $ykuid = $v['third_party_uid'];
                $ykliveid = $v['third_party_room_id'];
                $live_stream_flv = self::getLiveStream($ykuid, $ykliveid);
                if (empty($live_stream_flv)) {
                    continue;
                }else{
                    $anchor_list[$i]['down_url'] = $live_stream_flv;
                    $i++;
                }
            }
    
            return $anchor_list;
        }
    
        /**
         * POST 请求
         * @param string $url
         * @param array $param
         * @param boolean $post_file 是否文件上传
         * @return string content
         */
        public static function http_post($url, $param = [], $post_file = false, $isJson = false)
        {
            if (is_array($param) && count($param)) {
                $param = json_encode($param);
            }
            $oCurl = curl_init();
            if (stripos($url, "https://") !== FALSE) {
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
                curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
            }
            if (is_string($param) || $post_file) {
                $strPOST = $param;
            } else {
                $aPOST = array();
                foreach ($param as $key => $val) {
                    $aPOST[] = $key . "=" . urlencode($val);
                }
                $strPOST = join("&", $aPOST);
            }
            if (isset($_SESSION['CURLOPT_HTTPHEADER'])) {
                curl_setopt($oCurl, CURLOPT_HTTPHEADER, $_SESSION['CURLOPT_HTTPHEADER']);
            }
            if ($isJson) {
                curl_setopt($oCurl, CURLOPT_HTTPHEADER, array(
                        'Content-Type: application/json',
                        'Content-Length: ' . strlen($strPOST))
                );
            }
            curl_setopt($oCurl, CURLOPT_URL, $url);
            curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($oCurl, CURLOPT_POST, true);
            curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
            $sContent = curl_exec($oCurl);
            $aStatus = curl_getinfo($oCurl);
            curl_close($oCurl);
    
            if ($sContent) {
                return $sContent;
            } else {
                return false;
            }
        }
    
        // 映客的热门主播地址为:http://baseapi.busi.inke.cn/live/LiveHotList
        // 仅抓取第11-40个主播
        public static  function getAnchorList($url)
        {
            $html_info = self::http_post($url);
            $decode_html_info = json_decode($html_info,true);
            $anchor_list = [];
            if ($decode_html_info['message'] == 'success') {
                if($decode_html_info['data'][10]){
                    $temp_anchor = [];
                    for ($i = 11; $i <= 40; $i++) {
                        // 映客主播ID
                        $temp_anchor['third_party_uid'] = $decode_html_info['data'][$i]['uid'];
                        // 映客主播ID房间ID
                        $temp_anchor['third_party_room_id'] = $decode_html_info['data'][$i]['liveid'];
                        // 映客主播头像
                        $temp_anchor['avatar'] = $decode_html_info['data'][$i]['portrait'];
                        // 映客主播昵称
                        $temp_anchor['nick'] = $decode_html_info['data'][$i]['nick'];
                        // 映客直播标题
                        $temp_anchor['live_title'] = $decode_html_info['data'][$i]['name'];
                        // 映客主播性别
                        $temp_anchor['gender'] = $decode_html_info['data'][$i]['gender'];
                        // 映客直播地点
                        $temp_anchor['live_address'] = $decode_html_info['data'][$i]['city'];
                        array_push($anchor_list, $temp_anchor);
                    }
                }else{
                    $count = count($decode_html_info['data']);
                    for ($i = 0; $i < $count; $i++) {
                        // 映客主播ID
                        $temp_anchor['third_party_uid'] = $decode_html_info['data'][$i]['uid'];
                        // 映客主播ID房间ID
                        $temp_anchor['third_party_room_id'] = $decode_html_info['data'][$i]['liveid'];
                        // 映客主播头像
                        $temp_anchor['avatar'] = $decode_html_info['data'][$i]['portrait'];
                        // 映客主播昵称
                        $temp_anchor['nick'] = $decode_html_info['data'][$i]['nick'];
                        // 映客直播标题
                        $temp_anchor['live_title'] = $decode_html_info['data'][$i]['name'];
                        // 映客主播性别
                        $temp_anchor['gender'] = $decode_html_info['data'][$i]['gender'];
                        // 映客直播地点
                        $temp_anchor['live_address'] = $decode_html_info['data'][$i]['city'];
                        array_push($anchor_list, $temp_anchor);
                    }
                }
    
            }
            return $anchor_list;
        }
    
        // 映客获取单个主播地址为:http://baseapi.busi.inke.cn/live/LiveInfo?channel_id=&uid=71167152&liveid=&_t=
        public static  function getLiveStream($ykuid, $ykliveid)
        {
            $process = curl_init('http://baseapi.busi.inke.cn/live/LiveInfo?channel_id=&uid=' . $ykuid . '&liveid=' . $ykliveid . '&_t=');
            curl_setopt($process, CURLOPT_HEADER, 0);
            curl_setopt($process, CURLOPT_TIMEOUT, 30);
            curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
            $return = curl_exec($process);
            curl_close($process);
            $decode_html_info = json_decode($return);
            $url = '';
            if ($decode_html_info->message = 'success') {
                if(isset($decode_html_info->data->live_addr[0])){
                    if(isset($decode_html_info->data->live_addr[0]->stream_addr)){
                        $url = $decode_html_info->data->live_addr[0]->stream_addr;
                    }
                    /*if(isset($decode_html_info->data->live_addr[0]->rtmp_stream_addr)){
                        return $decode_html_info->data->live_addr[0]->rtmp_stream_addr;
                    }*/
                }
            }
    
            //返回空即为已停止直播
            return $url;
        }
    }
  • 相关阅读:
    LeetCode_222.完全二叉树的节点个数
    LeetCode_219.存在重复元素 II
    LeetCode_217.存在重复元素
    LeetCode_215.数组中的第K个最大元素
    LeetCode_21.合并两个有序链表
    LeetCode_206.反转链表
    LeetCode_205.同构字符串
    LeetCode_202.快乐数
    LeetCode_20.有效的括号
    LeetCode_2.两数相加
  • 原文地址:https://www.cnblogs.com/-mrl/p/7873018.html
Copyright © 2011-2022 走看看