进入百度统计,点击管理 > 其他设置 > 数据导出服务,勾选协议并点击立即开通即可获取 Token
官方操作指南:https://tongji.baidu.com/open/api/more?p=tongjiapi_guide.tpl
在线调试工具:
获取站点列表
官方文档:https://tongji.baidu.com/open/api/more?p=tongjiapi_getSiteList.tpl
示例代码
import requests
import json
USERNAME = '用户名'
PASSWORD = '密码'
TOKEN = '所获取到的 Token'
siteListUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList"
data = {
"header": {
"username": USERNAME,
"password": PASSWORD,
"token": TOKEN,
"account_type": 1
}
}
data = json.dumps(data)
r = requests.post(siteListUrl,data=data)
# 打印返回信息
print(r.text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
importrequests
importjson
USERNAME='用户名'
PASSWORD='密码'
TOKEN='所获取到的 Token'
siteListUrl="https://api.baidu.com/json/tongji/v1/ReportService/getSiteList"
data={
"header":{
"username":USERNAME,
"password":PASSWORD,
"token":TOKEN,
"account_type":1
}
}
data=json.dumps(data)
r=requests.post(siteListUrl,data=data)
# 打印返回信息
print(r.text)
站点报告数据
官方文档:https://tongji.baidu.com/open/api/more?p=tongjiapi_getData.tpl
示例代码
getDataUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getData"
# 请求数据如下
data = {
"header": {
'username': USERNAME,
'password': PASSWORD,
'token': TOKEN,
"account_type": 1
},
"body": {
'site_id': ALAN_SITE_ID, # 前面所打印的 site_id
'method': 'overview/getTimeTrendRpt', # 报告(参见官方文档获取更多)
'start_date': '20190601', # 开始时间
'end_date': '20190615', # 结束时间
'metrics': 'pv_count,visitor_count,ip_count,bounce_ratio,avg_visit_time,' # 获取的参数
}
}
r = requests.post(getDataUrl,data=json.dumps(data))
result = json.loads(r.text)
#打印数据
print(result)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
getDataUrl="https://api.baidu.com/json/tongji/v1/ReportService/getData"
# 请求数据如下
data={
"header":{
'username':USERNAME,
'password':PASSWORD,
'token':TOKEN,
"account_type":1
},
"body":{
'site_id':ALAN_SITE_ID,# 前面所打印的 site_id
'method':'overview/getTimeTrendRpt',# 报告(参见官方文档获取更多)
'start_date':'20190601',# 开始时间
'end_date':'20190615',# 结束时间
'metrics':'pv_count,visitor_count,ip_count,bounce_ratio,avg_visit_time,'# 获取的参数
}
}
r=requests.post(getDataUrl,data=json.dumps(data))
result=json.loads(r.text)
#打印数据
print(result)
百度移动统计
官方文档:https://mtj.baidu.com/static/userguide/book/api/overview.html
1、注册一个百度开发者账号并创建应用(工程)并绑定邮箱:http://developer.baidu.com/console#app/project,填写的回调地址如 https://www.baidu.com必须与后面步骤中调用的相同,就当前应用而言并不要求有特别的处理 URL,仅用于授权后的跳转;记录API Key和Secret Key:
2、进入百度移动统计后台并给对应邮箱授权
3、获取 Code:访问http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope=basic&display=popup
CLIENT_ID:API Key和REDIRECT_URI:回调地址参见第1步
4、获取 access_token和refresh_token:访问:http://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code={CODE}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&redirect_uri={REDIRECT_URI}
CODE 见第3步,CLIENT_ID:API Key、CLIENT_SECRET:Secret Key和REDIRECT_URI:回调地址见第1步
测试地址:https://openapi.baidu.com/rest/2.0/mtj/svc/config/getAppList?access_token={ACCESS_TOKEN}(access_token来自第4步)
通过以上地址可获取到账号中所存在的 APP 及 AppKey(AppKey 也可通过设置>应用信息查看)
5、更新 Token:http://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token={REFRESH_TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}
REFRESH_TOKEN来自第4步,API Key、CLIENT_SECRET:Secret Key见第1步
6、查看配额及已调用次数
7、调用相应接口:https://openapi.baidu.com/rest/2.0/mtj/svc/app/getDataByKey?access_token=[ACCESS_TOKEN]&key=[APPKEY]&method=newuser/a&start-date=20171107000000&end-date=20171108232359&metrics=new_user_count,user_count
APPKEY为第4步示例中所获取或通过百度移动统计后台设置>应用信息查看
示例代码(其中 access_token 是有有效期的且接口调用存在次数限制,可考虑存放到数据库中,就接口层面而言,此处使用 get 和 post 方法均可获取数据):
import requests, json
CLIENT_ID = ""
CLIENT_SECRET = ""
REFRESH_TOKEN = ""
ANDROID_APPKEY = ""
IOS_APPKEY = ""
access_token = ""
REFRESH_TOKEN_URL = "http://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token={REFRESH_TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}"
USER_DATA_URL = "https://openapi.baidu.com/rest/2.0/mtj/svc/app/getDataByKey?access_token={ACCESS_TOKEN}&key={APP_KEY}&method=newuser/a&start-date={STARTDATE}000000&end-date={ENDDATE}232359&metrics=new_user_count,new_user_ratio,old_user_count,old_user_ratio,user_count,session_count,average_session_time,session_time_per_person"
def refresh_token():
r = requests.get(REFRESH_TOKEN_URL.format(REFRESH_TOKEN=REFRESH_TOKEN,CLIENT_ID=CLIENT_ID,CLIENT_SECRET=CLIENT_SECRET))
result = r.json()
access_token = result['access_token']
return access_token
def get_user_data(start_date, end_date, app_type='ios'):
if app_type == 'android':
APP_KEY = ANDROID_APPKEY
else:
APP_KEY = IOS_APPKEY
r = requests.post(USER_DATA_URL.format(ACCESS_TOKEN=access_token,APP_KEY=APP_KEY,STARTDATE=start_date, ENDDATE=end_date))
result = r.json()
print(result)
if 'error_code' not in result:
return result
elif result['error_code']==111:
refresh_token()
get_user_data(start_date, end_date, app_type)
else:
return
if __name__ == '__main__':
start_date = '20190712'
end_date = '20190713'
app_type = 'ios'
get_user_data(start_date, end_date, app_type)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
importrequests,json
CLIENT_ID=""
CLIENT_SECRET=""
REFRESH_TOKEN=""
ANDROID_APPKEY=""
IOS_APPKEY=""
access_token=""
REFRESH_TOKEN_URL="http://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token={REFRESH_TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}"
USER_DATA_URL="https://openapi.baidu.com/rest/2.0/mtj/svc/app/getDataByKey?access_token={ACCESS_TOKEN}&key={APP_KEY}&method=newuser/a&start-date={STARTDATE}000000&end-date={ENDDATE}232359&metrics=new_user_count,new_user_ratio,old_user_count,old_user_ratio,user_count,session_count,average_session_time,session_time_per_person"
defrefresh_token():
r=requests.get(REFRESH_TOKEN_URL.format(REFRESH_TOKEN=REFRESH_TOKEN,CLIENT_ID=CLIENT_ID,CLIENT_SECRET=CLIENT_SECRET))
result=r.json()
access_token=result['access_token']
returnaccess_token
defget_user_data(start_date,end_date,app_type='ios'):
ifapp_type=='android':
APP_KEY=ANDROID_APPKEY
else:
APP_KEY=IOS_APPKEY
r=requests.post(USER_DATA_URL.format(ACCESS_TOKEN=access_token,APP_KEY=APP_KEY,STARTDATE=start_date,ENDDATE=end_date))
result=r.json()
print(result)
if'error_code'notinresult:
returnresult
elifresult['error_code']==111:
refresh_token()
get_user_data(start_date,end_date,app_type)
else:
return
if__name__=='__main__':
start_date='20190712'
end_date='20190713'
app_type='ios'
get_user_data(start_date,end_date,app_type)