<?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);
*/
/**
* 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);
*/