获取微博用户数据

<?php
/**
 * Created by PhpStorm.
 * User: lzz
 * Date: 12/3/15
 * Time: 10:49 AM
 *
 * 微薄接口,包含了新浪微薄和腾讯微薄
 * 通过用户名获取新浪微薄用户数据
 * 通过用户id获取腾讯微薄用户数据
 */


class Weibo{
    /**
     * 获取用户信息 id 头像 粉丝数
     * $info 是用户的包含的所有信息
     * $target 这个是用于标识用户id的标志串
     * $target_len  这个是标识串的长度,之所有不用自动计算是考虑到了效率
     * $end 这是要截取的字符长度,比id要长因为id可能长度会变
     * $end_target 最后截取的标识串
     */
    private function get_user_info($info,$target,$target_len,$end,$end_target){


        $start = strpos($info,$target)+$target_len;
        $s = substr($info,$start,$end);
        $end = strpos($s,$end_target);
        $s = substr($s,0,$end);
        return $s;
    }


    /**
     * get 方式执行curl
     */
    private function get_curl($url,$ua=null){
        // 1. 初始化
        $ch = curl_init();
        // 2. 设置选项,包括URL
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if( $ua === 'phone'){
            curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H321 MicroMessenger/6.3.7 NetType/WIFI Language/en");
        }else{
            curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11)  Firefox/1.5.0.11;");//设置User-Agent
        }
        curl_setopt($ch, CURLOPT_HEADER, 0);
        // 3. 执行并获取HTML文档内容
        $output = curl_exec($ch);
        // 4. 释放curl句柄
        curl_close($ch);
        return $output;


    }


    /**
     * 根据用户id获取腾讯微薄数据
     */
    private function get_tx_u_weibo($username){
        $url = "http://t.qq.com/".$username;
        $output = $this->get_curl($url);
        if( empty($output) ){ //如果为null可能是机构认证的微薄
            return null;
        }
        $start = 21000;
        $end = 9000;
        $info = substr($output,$start,$end);
        //获取用户头像
        $user['head'] = $this->get_user_info($info,'d="userAvatar" src="',20,80,'" alt=');
        $user['name'] = $this->get_user_info($info,'s="text_user">',14,50,'</a>');
        if(empty($user['name'])){
            $user['name'] = $this->get_user_info($info,'名" class=\'c_vip c_vip\'>',25,50,'</a>');
        }
        $user['fans'] = $this->get_user_info($info,'q"><span class="text_count" >',29,20,'</span>');
        return $user;
    }


    /**
     * 根据认证企业id获取腾讯微薄数据
     */
    private function get_tx_e_weibo($username){
        $url = "http://e.t.qq.com/".$username;
        $output = $this->get_curl($url);
        if( empty($output) ){ //如果为null可能是机构认证的微薄
            return null;
        }
        $start = 13052;
        $end = 5000;
        $info = substr($output,$start,$end);
        //获取用户头像
        $head_info = substr($info,strpos($info,'class="avatar">'),320);


        $user['head'] = $this->get_user_info($head_info,'src="',5,80,'" alt=');
        $user['name'] = $this->get_user_info($info,'s="text_user">',14,50,'</span>');
        $fans_info = substr($info,strpos($info,'听众</span>'),300);
        $user['fans'] = $this->get_user_info($fans_info,'/follower">',11,20,'</a>');
        return $user;
    }


    /**
     * 获取tengxun 微薄信息
     * 分为用户和企业用户,因为这两个的获取途径是不一样的
     */
    public function get_tx_weibo($username){
        $res = $this->get_tx_u_weibo($username);
        if( empty($res) ){
            $res = $this->get_tx_e_weibo($username);
        }
        return $res;
    }


    /**
     * 获取新浪微薄信息
     */
    public function get_sina_weibo($username){
        $url = "https://api.weibo.com/2/users/show.json?screen_name=$username&source=1166443256&_cache_time=100&method=get&__rnd=1449197553908";
        $output = $this->get_curl($url);
        $output = json_decode($output);
        $res['fans'] = $output->followers_count;
        $res['head'] = $output->profile_image_url;
        $res['id'] = $output->id;


        return $res;


    }
}






//腾讯微薄测试


$username = 'dianyingxiaoshidai';
$weibo = new Weibo();
$res = $weibo->get_tx_weibo($username);
var_dump($res);




//新浪微薄测试
/*
$username = "-想要推翻世界的张小野";
$weibo = new Weibo();
$output = $weibo->get_sina_weibo($username);
var_dump($output);
*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值