java实现百度统计api调用

**公司需要调用百度统计的api,昨天搞了一天,先看了百度统计的官方文档 emmmmmmm 是真的没怎么看懂,然后在网上搜了各位大牛的实现,最后自己尝试了一下访问成功!**
  • 1
  • 2

思路大概是这样的 
1、先写一个能调用https的 java类 
2、调用 https://api.baidu.com/json/tongji/v1/ReportService/getSiteList 接口获得siteId的列表 
3、调用 https://api.baidu.com/json/tongji/v1/ReportService/getData 获得你需要的统计数据

首先是访问https的类(网上找大牛copy的): 
类名 HttpsUtil

package com.cutc.baiduapi;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HttpsUtil {
    private static class TrustAnyTrustManager implements X509TrustManager {

        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            // TODO Auto-generated method stub

        }

        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            // TODO Auto-generated method stub

        }

        public X509Certificate[] getAcceptedIssuers() {
            // TODO Auto-generated method stub
            return null;
        }  

    }  

    private static class TrustAnyHostnameVerifier implements HostnameVerifier {

        public boolean verify(String arg0, SSLSession arg1) {
            // TODO Auto-generated method stub
            return false;
        }  
    }  

    /** 
     * post方式请求服务器(https协议) 
     *  
     * @param url 
     *            请求地址 
     * @param content 
     *            参数 
     * @param charset 
     *            编码 
     * @return 
     * @throws NoSuchAlgorithmException 
     * @throws KeyManagementException 
     * @throws IOException 
     */  
    public static byte[] post(String url, String content, String charset)  
            throws NoSuchAlgorithmException, KeyManagementException,  
            IOException {  
        SSLContext sc = SSLContext.getInstance("SSL");  
        sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },  
                new java.security.SecureRandom());  

        URL console = new URL(url);  
        HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();  
        conn.setSSLSocketFactory(sc.getSocketFactory());  
        conn.setHostnameVerifier(new TrustAnyHostnameVerifier());  
        conn.setDoOutput(true);  
        conn.connect();  
        DataOutputStream out = new DataOutputStream(conn.getOutputStream());  
        out.write(content.getBytes(charset));  
        // 刷新、关闭  
        out.flush();  
        out.close();  
        InputStream is = conn.getInputStream();  
        if (is != null) {  
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
            byte[] buffer = new byte[1024];  
            int len = 0;  
            while ((len = is.read(buffer)) != -1) {  
                outStream.write(buffer, 0, len);  
            }  
            is.close();  
            return outStream.toByteArray();  
        }  
        return null;  
    }  

}
  • 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
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

然后需要访问获得siteId的方法:

package com.cutc.baiduapi;

import org.json.JSONObject;

public class TjApi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            JSONObject header = new JSONObject();
            header.put("username", "");//用户名
            header.put("password", "!");//用户密码
            header.put("token", "");//申请到的token
            header.put("account_type", "1");

            String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
            String charset = "utf-8";

            JSONObject params = new JSONObject();
            params.put("header", header);

            byte[] res = HttpsUtil.post(urlStr, params.toString(), charset);
            String s = new String(res);
            System.out.println(s);    
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }

}
  • 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

返回的数据这样的:

{
    "header":{
        "desc":"success",
        "failures":[

        ],
        "oprs":1,
        "succ":1,
        "oprtime":0,
        "quota":1,
        "rquota":49992,
        "status":0
    },
    "body":{
        "data":[
            {
                "list":[
                    {
                        "status":0,
                        "create_time":"2017-04-26 17:25:10",
                        "domain":"tourforce.asia",
                        "site_id":10646729,
                        "sub_dir_list":[

                        ]
                    }
                ]
            }
        ]
    }
}
  • 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

这里就可以获取到我们需要的site_id 
然后再去请求这个site_id的数据:

package com.cutc.baiduapi;

import org.json.JSONObject;

public class TjApi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            JSONObject header = new JSONObject();
            header.put("username", "");//用户名
            header.put("password", "");//用户密码
            header.put("token", "");//申请到的token
            header.put("account_type", "1");

//          String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
            String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
            String charset = "utf-8";


            JSONObject body = new JSONObject();
            body.put("siteId","10646729");
            body.put("method","overview/getTimeTrendRpt");//需要获取的数据
            body.put("start_date","20171220");
            body.put("end_date","20171222");
            body.put("metrics","pv_count,visitor_count,ip_count");//指标,数据单位

            JSONObject params = new JSONObject();
            params.put("header", header);
            params.put("body", body);

            byte[] res = HttpsUtil.post(urlStr, params.toString(), charset);
            String s = new String(res);
            System.out.println(s);

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }

}
  • 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
  • 41
  • 42
  • 43
  • 44

获取到的数据如下:

{
    "header":{
        "desc":"success",
        "failures":[

        ],
        "oprs":1,
        "succ":1,
        "oprtime":0,
        "quota":1,
        "rquota":49989,
        "status":0
    },
    "body":{
        "data":[
            {
                "result":{
                    "items":[
                        [
                            [
                                "2017/12/20"
                            ],
                            [
                                "2017/12/21"
                            ],
                            [
                                "2017/12/22"
                            ]
                        ],
                        [
                            [
                                17694,
                                8811,
                                8450
                            ],
                            [
                                17271,
                                8435,
                                7996
                            ],
                            [
                                17169,
                                8306,
                                8029
                            ]
                        ],
                        [

                        ],
                        [

                        ]
                    ],
                    "timeSpan":[
                        "2017/12/20 - 2017/12/22"
                    ],
                    "fields":[
                        "simple_date_title",
                        "pv_count",
                        "visitor_count",
                        "ip_count"
                    ]
                }
            }
        ]
    }
}
  • 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
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

这样就获取到了PV,UV,IP 
最后说一下body中method参数和metrics参数,这两个参数官方文档中有这里是链接: 
http://tongji.baidu.com/open/api/more?p=tongjiapi_getData.tpl 
嘛~希望能帮助到刚刚接触百度统计的朋友!


**公司需要调用百度统计的api,昨天搞了一天,先看了百度统计的官方文档 emmmmmmm 是真的没怎么看懂,然后在网上搜了各位大牛的实现,最后自己尝试了一下访问成功!**
  • 1
  • 2

思路大概是这样的 
1、先写一个能调用https的 java类 
2、调用 https://api.baidu.com/json/tongji/v1/ReportService/getSiteList 接口获得siteId的列表 
3、调用 https://api.baidu.com/json/tongji/v1/ReportService/getData 获得你需要的统计数据

首先是访问https的类(网上找大牛copy的): 
类名 HttpsUtil

package com.cutc.baiduapi;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HttpsUtil {
    private static class TrustAnyTrustManager implements X509TrustManager {

        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            // TODO Auto-generated method stub

        }

        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            // TODO Auto-generated method stub

        }

        public X509Certificate[] getAcceptedIssuers() {
            // TODO Auto-generated method stub
            return null;
        }  

    }  

    private static class TrustAnyHostnameVerifier implements HostnameVerifier {

        public boolean verify(String arg0, SSLSession arg1) {
            // TODO Auto-generated method stub
            return false;
        }  
    }  

    /** 
     * post方式请求服务器(https协议) 
     *  
     * @param url 
     *            请求地址 
     * @param content 
     *            参数 
     * @param charset 
     *            编码 
     * @return 
     * @throws NoSuchAlgorithmException 
     * @throws KeyManagementException 
     * @throws IOException 
     */  
    public static byte[] post(String url, String content, String charset)  
            throws NoSuchAlgorithmException, KeyManagementException,  
            IOException {  
        SSLContext sc = SSLContext.getInstance("SSL");  
        sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },  
                new java.security.SecureRandom());  

        URL console = new URL(url);  
        HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();  
        conn.setSSLSocketFactory(sc.getSocketFactory());  
        conn.setHostnameVerifier(new TrustAnyHostnameVerifier());  
        conn.setDoOutput(true);  
        conn.connect();  
        DataOutputStream out = new DataOutputStream(conn.getOutputStream());  
        out.write(content.getBytes(charset));  
        // 刷新、关闭  
        out.flush();  
        out.close();  
        InputStream is = conn.getInputStream();  
        if (is != null) {  
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
            byte[] buffer = new byte[1024];  
            int len = 0;  
            while ((len = is.read(buffer)) != -1) {  
                outStream.write(buffer, 0, len);  
            }  
            is.close();  
            return outStream.toByteArray();  
        }  
        return null;  
    }  

}
  • 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
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

然后需要访问获得siteId的方法:

package com.cutc.baiduapi;

import org.json.JSONObject;

public class TjApi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            JSONObject header = new JSONObject();
            header.put("username", "");//用户名
            header.put("password", "!");//用户密码
            header.put("token", "");//申请到的token
            header.put("account_type", "1");

            String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
            String charset = "utf-8";

            JSONObject params = new JSONObject();
            params.put("header", header);

            byte[] res = HttpsUtil.post(urlStr, params.toString(), charset);
            String s = new String(res);
            System.out.println(s);    
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }

}
  • 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

返回的数据这样的:

{
    "header":{
        "desc":"success",
        "failures":[

        ],
        "oprs":1,
        "succ":1,
        "oprtime":0,
        "quota":1,
        "rquota":49992,
        "status":0
    },
    "body":{
        "data":[
            {
                "list":[
                    {
                        "status":0,
                        "create_time":"2017-04-26 17:25:10",
                        "domain":"tourforce.asia",
                        "site_id":10646729,
                        "sub_dir_list":[

                        ]
                    }
                ]
            }
        ]
    }
}
  • 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

这里就可以获取到我们需要的site_id 
然后再去请求这个site_id的数据:

package com.cutc.baiduapi;

import org.json.JSONObject;

public class TjApi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            JSONObject header = new JSONObject();
            header.put("username", "");//用户名
            header.put("password", "");//用户密码
            header.put("token", "");//申请到的token
            header.put("account_type", "1");

//          String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
            String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
            String charset = "utf-8";


            JSONObject body = new JSONObject();
            body.put("siteId","10646729");
            body.put("method","overview/getTimeTrendRpt");//需要获取的数据
            body.put("start_date","20171220");
            body.put("end_date","20171222");
            body.put("metrics","pv_count,visitor_count,ip_count");//指标,数据单位

            JSONObject params = new JSONObject();
            params.put("header", header);
            params.put("body", body);

            byte[] res = HttpsUtil.post(urlStr, params.toString(), charset);
            String s = new String(res);
            System.out.println(s);

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }

}
  • 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
  • 41
  • 42
  • 43
  • 44

获取到的数据如下:

{
    "header":{
        "desc":"success",
        "failures":[

        ],
        "oprs":1,
        "succ":1,
        "oprtime":0,
        "quota":1,
        "rquota":49989,
        "status":0
    },
    "body":{
        "data":[
            {
                "result":{
                    "items":[
                        [
                            [
                                "2017/12/20"
                            ],
                            [
                                "2017/12/21"
                            ],
                            [
                                "2017/12/22"
                            ]
                        ],
                        [
                            [
                                17694,
                                8811,
                                8450
                            ],
                            [
                                17271,
                                8435,
                                7996
                            ],
                            [
                                17169,
                                8306,
                                8029
                            ]
                        ],
                        [

                        ],
                        [

                        ]
                    ],
                    "timeSpan":[
                        "2017/12/20 - 2017/12/22"
                    ],
                    "fields":[
                        "simple_date_title",
                        "pv_count",
                        "visitor_count",
                        "ip_count"
                    ]
                }
            }
        ]
    }
}
  • 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
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

这样就获取到了PV,UV,IP 
最后说一下body中method参数和metrics参数,这两个参数官方文档中有这里是链接: 
http://tongji.baidu.com/open/api/more?p=tongjiapi_getData.tpl 
嘛~希望能帮助到刚刚接触百度统计的朋友!


猜你喜欢

转载自blog.csdn.net/yw_1207/article/details/79626272