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的知识,帮助大家更好地做好 ...
随机推荐
- 使用IDEA创建基于Gradle构建的JavaWeb项目
环境配置 jdk: 1.8 Gradle: 4.4.1 Tomcat: 9.0.0 One Step! 创建项目,初始化项目结构. 打开我们的IDEA,进入创建项目的界面,勾选Java,Web两个选项 ...
- mac 下安装 express
express为js的后端框架, 终端 >>> npm install -g express-generator 然后cd到您要创建项目的目录之下,输入 >>> ...
- BeginInit与EndInit的实践总结
在项目中,遇到这种情况,总结随便如下: 初始化时:添加操作,BeginInit{flag=true} 警情是一条条加入的,全部都加入后,图表再一次性生成 EndInit{flag=false} ...
- hdu1517找规律
挺像巴什博弈的,直接递推就能找到规律了,从2开始到9,s win,10到18,o win,18到162,s win,一直向下推进 #include<map> #include<set ...
- oracle 10g 用dbms_xmlgen将数据表转成xml格式
oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle用plsql将sql查询的所有数据导出为xml
- Vue.js学习笔记:在元素 和 template 中使用 v-if 指令
f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...
- 创建Vue.js对象:我的第一个Vue.js输出信息
<!DOCTYPE html><html><head><meta charset=”utf-8″><title>Vue第一条信息</t ...
- 在jenkins和sonar中集成jacoco(二)--在jenkins中生成jacoco覆盖率报告
先要在jenkins上安装jacoco的插件,安装完成之后在job的配置项中可以增加这个选项: 第一个录入框是你的覆盖率文件(exec),第二个是class文件目录,第三个是源代码文件目录. 配置好了 ...
- python实现八大排序算法
插入排序 核心思想 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2).是稳定的排序方法.插入算法 ...
- HDU 4068
http://acm.hdu.edu.cn/showproblem.php?pid=4068 暴力枚举两个全排列,犯了若干错误,以此为鉴 #include <iostream> #incl ...