背景
昨天有个小需求,需要写个脚本,同步百度统计的一些数据回来,本来以为只是调用一个百度的统计API获取数据而已,没什么可写的,结果今天一看文档坑的不行,不吐槽会死系列,简直应该是最烂的开发文档了,没有更烂的。
使用
1.开通百度统计导出服务
这个导出服务开通完之后,百度统计会给你分配一个token,在后面会用到,这个token每周有限额,周六清零,如图所示:
2.通过代码调用百度统计的接口
未避免看此篇文章的同学不看完就直接动手请求导致翻车,先说结论:不用登录!不用登录!不用登录!不清楚的继续往下看,在百度统计的官网页面我首先看了它的示例代码和开发文档,直接用 postman 测 https://api.baidu.com/json/tongji/v1/ReportService/getSiteList 获取站点的这个接口,报错:
{
"header": {
"desc": "system failure",
"failures": [
{
"code": 8603,
"message": "The request header you provided is invalid. sn:293105289056896",
"position": "_sys"
}
],
"status": 3
}
}
难道是因为姿势不对,又回过头来仔细看百度统计的API接口文档,终于翻到下面这篇文章,我天真的以为可以把问题解决了,但就是这篇文章把我一步步带到坑中。百度统计开放平台,它在使用流程中写到,首先要进行身份验证,就是根据账号、密码、token进行身份验证,之后进行站点选择,还有什么DR-API安全登录手册,让我坚信,我上面操作失败是因为少了一步登录操作,我开始去百度上搜索这个问题,没几个回答的,大部分都是提问的,其中一两个回答把我引到了 github 上,居然一个是gradle项目一个是maven项目,我就调个接口咋还要运行别的项目了,再回过头继续搜在 postman 中遇到的那个说请求头不可用的问题,发现下面这篇文章:附传送门,然后我就把请求体进行了修改,直接就请求成功了,详见如下截图:
请求体代码如下:
{
"header" :{
"account_type":1,
"username":"你的用户名",
"password":"你的密码",
"token":"你的token"
}
}
如果 postman 能请求成功,那么我们使用代码编写 curl 发送请求肯定也是可以的,我想纠正的就是百度统计的 getSiteList和 getData这两个接口只要你有用户名,密码,token,组织好请求体就可以调用,完全不是某些网友回答的要费很大劲登录验证后才可以调用,使用 curl怎么调用就不说了,而且调用 getData需要传 siteId,不需要先调 getSiteList 接口遍历结果拿siteId,siteId在百度统计后台点击网站名称进去在浏览器地址栏中问号后面就可以获取到,如图所示:
最后希望大家少走弯路。
评论