网站日志统计分析

359 阅读3分钟

前言

好不容易搭建了一个网站,想要看看网站的访问量,这时候就可以简单得用baidu统计的api进行统计。

1: 来到百度注册统计账号,一般选择战长用户

站长版:站长版账户面向全部用户开放,为您提供免费、专业的流量统计分析工具
客户版:主要针对百度推广和网盟客户,在站长版功能的基础上,与百度推广完美结合,不需utm加码等复杂操作,上手直接查看、分析推广效果
移动统计:主要用于手机端统计数据,小程序等也可以

2: 注册成功后登录,进入到下面界面,点击新增网站按钮

所有后续命令在项目的目录中进行,可在该项目任何子目录中,cmd切换到项目目录下
在如下界面设置你要统计访问的网站地址即可,
若你想统计第三方网站的访问量,你在csdn这个平台写技术博客,则网站域名和网站首页可以填写同一个地址即可,这里还有一个前提条件
csdn需申请开通JS代码权限,否则,无法把新增网站成功后生成的代码添加进去

此代码同时适用于PC端、移动端的页面,以异步加载形式进行加载,数据更准确、加载速度更快。请将此代码复制并粘贴到您要跟踪的每个网页中。:
<script>
var _hmt = _hmt || [];
(function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?6bf52e0f1438d27b4266675e68d3e17b";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
})();
</script>

3: 其他设置-》数据导出服务,开通api访问权限,第一天是开通不了,需要前天的访问量大于100才有权限开通

4: 满足条件开通后,会给你一个token,调用的api统计的时候用到

5: 保证数据安全,前端只需传统计的时间区间到后台就行,其他的数据配置在后台

 var start_date = "20200701";
 var end_date = "20200715";
 $.ajax({
	   type: 'post',
	   data: {
		   method: 'getBlogLogOrginTop5',
		   start_date: start_date,
		   end_date: end_date,
	   },
	   url: serviceUrl + "/MyWebBack/blogLog",
	   success: function (data) {
			 console.log('sucessxxxxxx');
	   },
	   error: function () {
		   console.log('errorxxxxxx');
	   }
   })

6: java代码先写一个能调用https的 java类

package com.itheima.utils;

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

7: 调用 api.baidu.com/json/tongji… 接口获得siteId的列表得到site_id

8 :调用 api.baidu.com/json/tongji… 获得你需要的统计数据

	// 获取博客前五的日志
	public void getBlogLogTop5(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try {
			String start_date = request.getParameter("start_date");
			String end_date = request.getParameter("end_date");
			JSONObject header = new JSONObject();
			header.put("username", "xxx");// 用户名
			header.put("password", "123456");// 用户密码
			header.put("token", "3e797f6b4e5e0d45a1293ff5c8d7b4");// 申请到的token
			//header.put("account_type", 1);// 申请到的token
			// 1: 获取站点列表
			//String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
			// 2: 获取报告数据
			String urlStr = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
			String charset = "utf-8";
			JSONObject body = new JSONObject();
			body.put("site_id", "153142222");
			body.put("method", "visit/toppage/a");// 受访页面
			body.put("start_date", start_date);
			body.put("end_date", end_date);
			body.put("metrics", "pv_count,visitor_count,average_stay_time");
			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);
			response.setContentType("application/json;charset=UTF-8");
			response.getWriter().write(s);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
调用不同的api就能获取到不同数据,发现百度api返回的数格式是非人类,需要好好去解析,以下就是我用图标解析出来的效果,不需要登录百度注册后台观看,可以在自己的网站上观看了[1]