PHP外部调用网站百度统计数据的方法详解
目的:外部调用网站的百度统计(tongji.baidu.com)数据。
条件:1、具备调用目标网站的百度统计平台管理权限
2、PHP环境支持curl函数。
原理:同PHP小偷程序原理,通过curl函数模拟登陆百度统计平台,并抓取相关数据。
实现过程详解:
一、设置目标网站百度统计
登录百度统计管理后台需要输入验证码,为了避免远程抓取过程中处理验证码,可先进入百度统计管理后台将目标站点设置允许通过密码查看统计数据,在调用数据时可模拟登陆百度统计开放浏览入口,而不用登录管理后台,从而跳过验证码问题。
设置过程:登陆tongji.baidu.com -> 点击顶部“设置”选项 -> 点击左侧“系统管理”中的“统计图标设置 ” -> 页面右上角选择目标网站 -> 勾选“开放数据给第三方查看”和“开放所有报告” -> 设置查看密码,点击确定。
此时在“小贴士”下方文本框中可得到目标网站的统计数据查看地址,如本站abcd9.com的查看地址为:http://tongji.baidu.com/web/welcome/ico?s=f265eac6e83d5c33da59b31b26da94fd
二、php代码调用
远程抓取类代码:
class getinfo{
public $cookie_abcd9_com,$content;
public function post($post_url,$param) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$post_url); //设定远程抓取网址
curl_setopt($ch, CURLOPT_POST, 1); //设置为POST提交模式
curl_setopt($ch, CURLOPT_POSTFIELDS, $param); //提交参数
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_abcd9_com);
//把返回的cookie保存到$this->cookie_abcd9_com文件中
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_abcd9_com);
//读取cookie
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//返回获取的输出文本流,而不自动显示
$this->content = curl_exec($ch);
curl_close($ch);
}
}
调用代码:
$info=new getinfo(); //创建实例$info
$info->cookie_abcd9_com=tempnam("","cookie"); //设置cookie临时文件
$info->post('http://tongji.baidu.com/web/welcome/ico?s=f265eac6e83d5c33da59b31b26da94fd','passwd=abcd9.com');
//模拟登陆。其中淡蓝色字符串为目标网站的查看地址,红色字符串为查看密码
$info->post('http://tongji.baidu.com/web/3827653/ajax/post','indicators=ip_count&method=visit/district/f&siteId=1351465');
//获取数据。其中淡蓝色字符串为ajax处理url,三个红色字符串为传递参数
$data=json_decode($info->content,true); //获取到的数据为json格式,转换为数组
print_r($data); //输出,或进行其他操作
百度统计后台中是通过ajax调用数据的,所以无法直接抓取html代码,而需要post给ajax处理url并获取返回值。通过web抓包程序(如IE httpwatch professional)
对百度统计平台登录后的抓包可得到提交所需的参数,上面代码中以本站abcd9.com百度统计平台中访客分析-地域分布为例抓取到ajax处理url和
相关参数,参数中ip_count为获取地域分布中的ip统计数据,如改成pv_count将会获取到地域分布中的pv统计数据。对百度统计平台各类统计
项目抓包可得到更多相关参数,这里不一一列举。
- /**
- * 发送HTTP请求方法
- * @param string $url 请求URL
- * @param array $params 请求参数
- * @param string $method 请求方法GET/POST
- * @return array $data 响应数据
- */
- function http($url, $params, $method = 'GET', $header = array(), $multi = false){
- $opts = array(
- CURLOPT_TIMEOUT => 30,
- CURLOPT_RETURNTRANSFER => 1,
- CURLOPT_SSL_VERIFYPEER => false,
- CURLOPT_SSL_VERIFYHOST => false,
- CURLOPT_HTTPHEADER => $header
- );
- /* 根据请求类型设置特定参数 */
- switch(strtoupper($method)){
- case 'GET':
- $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
- break;
- case 'POST':
- //判断是否传输文件
- $params = $multi ? $params : http_build_query($params);
- $opts[CURLOPT_URL] = $url;
- $opts[CURLOPT_POST] = 1;
- $opts[CURLOPT_POSTFIELDS] = $params;
- break;
- default:
- throw new Exception('不支持的请求方式!');
- }
- /* 初始化并执行curl请求 */
- $ch = curl_init();
- curl_setopt_array($ch, $opts);
- $data = curl_exec($ch);
- $error = curl_error($ch);
- curl_close($ch);
- if($error) throw new Exception('请求发生错误:' . $error);
- return $data;
- }
调用方法:
- //定义一个要发送的目标URL;
- $url = "https://www.xxx.com";
- //定义传递的参数数组;
- $data['aaa']='aaaaa';
- $data['bbb']='bbbb';
- //定义返回值接收变量;
- $httpstr = http($url, $data, 'POST', array("Content-type: text/html; charset=utf-8"));
PHP外部调用网站百度统计数据的方法详解的更多相关文章
- Laravel5.4框架中视图共享数据的方法详解
本文实例讲述了Laravel5.4框架中视图共享数据的方法.分享给大家供大家参考,具体如下: 每个人都会遇到这种情况:某些数据还在每个页面进行使用,比如用户信息,或者菜单数据,最基本的做法是在每个视图 ...
- Wordpress 网站搭建及性能监控方法详解!
前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统.并且,如果你有一定的技术基础稍加改动,就可以搭建出新闻网站.企业网站 ...
- SQL Server解析XML数据的方法详解
--下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name=&q ...
- Java实现数组去除重复数据的方法详解
一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...
- 百度地图API使用方法详解
最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解二——org.json
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- 百度统计数据的UV和IP为什么不一样?
相信网站站长们在每天查看百度统计数据时会发现网站的IP和UV数据时大时小,有时候IP比UV大,有时候UV比IP大,站长们可能对这些情况感到奇怪.今天就和大家分享一下UV和IP的知识,帮助大家更好地做好 ...
随机推荐
- JDK 1.8 ConcurrentHashMap 源码剖析
转载两篇不错的文章: 第一篇: 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%. ...
- 在 R 中使用 Python 字符串函数
sprintf( )函数很强大,但并非适用于所有应用场景.例如,如果一些部分在模板中多次出现,那么就需要多次写一样的参数.这通常会使得代码冗长而且难以修改:sprintf("%s, %d y ...
- Spark读取结构化数据
读取结构化数据 Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析. 读取本地CSV 需要指定一些选项,比如留header,比如指定delimi ...
- subllime的插件使用
1.emmet快速使用的方法. html:xt 然后按下tab快速的生成一个html文档. 生成10个div----- div*10 div->ul->li->a->img 写 ...
- UTF-8里包括GB2312
用最易懂的说法就是UTF-8里包括GB2312.UTF-8是国际通用的标准(包括世界所有的语言),而GB2312(只是简体中文)只适合做中文的网站. 假设你想做个中文网页,但是还可以翻成英文的话,就得 ...
- Granting and Managing Item Level Permission using SharePoint2013 Designer Workflow
https://gnanasivamgunasekaran.wordpress.com/2015/12/29/granting-and-managing-item-level-permission-u ...
- 【解决】Android 2.x 不支持overflow、position:fixed解决方案【转】
Android 2.x和IOS5以下都不支持overflow:auto属性(position:fixed也不支持). 移动端浏览器兼容性和PC端相比,有过之而无不及.操作系统版本及各式浏览器和各式的屏 ...
- L205 EE
As an Electrical Engineer at P, you will: Design, build, and verify PCBAsCreate, modify, and update ...
- New Concept English Two 21 55
$课文53 触电的蛇 544. At last firemen have put out a big forest fire in California. 消防队员们终于扑灭了加利福尼亚的一场森林大 ...
- 启动tornado项目,hello world
新建一个env虚拟环境 mkvirtualenv toenv 在虚拟环境中安装tornado workon toenv pip install tornado 在D盘中新建tornado项目文件夹,就 ...