百度統計在專案中的使用
阿新 • • 發佈:2018-12-09
1.百度統計統計在前端頁面
該段程式碼建議放到頁面的<head>標籤中,如果因為某些特殊原因,您不方便把該段程式碼加在</head>標籤前面,那麼也可以加到<body>標籤的後面(請注意:不是</body>標籤),總之原則是這段程式碼的位置越靠前就越好。
如果您頁面中存在多段百度統計的訪問分析程式碼,那麼必須使用_setAccount介面來指定由哪一段程式碼來響應JS-API呼叫,最好把它加到頁頭</head>標籤前的程式碼裡:
<script> var _hmt = _hmt || []; _hmt.push(['_setAccount', '0123456789ABCDEF0123456789ABCDEF']); </script>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?0428b0b2559e8ac32fefa9cca6005ec7"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
2.百度統計在程式碼中如何呼叫
@RequestMapping("/statisticsQueryPvAndUvCount") @ResponseBody public String queryPvCount(HttpServletRequest request, @RequestParam(value = "time", required = false, defaultValue = "time") String time, @RequestParam("processData") String callback, HttpServletResponse response) { String result = ""; try { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date endTime; String endYimeStr = ""; if ("time".equalsIgnoreCase(time)) { endTime = new Date(); endYimeStr = simpleDateFormat.format(endTime); } else { //型別轉換,結束時間 endTime = simpleDateFormat.parse(time); endYimeStr = simpleDateFormat.format(endTime); } Map<String, String> header = new LinkedHashMap<String, String>(); header.put("username", "*******"); header.put("password", "******"); header.put("token", "906b6986405607******66348912a"); header.put("account_type", "1"); Map<String, String> body = new LinkedHashMap<String, String>(); body.put("siteId", "*******"); body.put("method", "overview/getTimeTrendRpt"); body.put("start_date", "20170901"); body.put("end_date", endYimeStr); body.put("metrics", "pv_count,visitor_count"); Map<String, Object> params = new LinkedHashMap<String, Object>(); params.put("header", header); params.put("body", body); Long pv = 0L; Long uv = 0L; String results = HttpClientUtils.doPostSSL("https://api.baidu.com/json/tongji/v1/ReportService/getData", new Gson().toJson(params)); if (StringUtils.isNotEmpty(results)) { JsonObject jsonObject = jsonParser.parse(results).getAsJsonObject(); JsonObject bodyStr = jsonObject.get("body").getAsJsonObject(); JsonArray dataStr = bodyStr.get("data").getAsJsonArray(); JsonObject resultStr = dataStr.get(0).getAsJsonObject(); JsonObject resultJsonObject = resultStr.get("result").getAsJsonObject(); JsonArray asJsonArray = resultJsonObject.get("items").getAsJsonArray(); JsonArray jsonElement = asJsonArray.get(1).getAsJsonArray(); for (int i = 0; i < jsonElement.size(); i++) { JsonArray job = jsonElement.get(i).getAsJsonArray(); // 遍歷 jsonarray 陣列,把每一個物件轉成 json 物件 for (int j = 0; j < 2; j++) { JsonElement jsonElement1 = job.get(j); if (!"--".equalsIgnoreCase(jsonElement1.getAsString())) { if (j == 0) { pv += job.get(j).getAsLong(); } else { uv += job.get(j).getAsLong(); } } } } } Map<String, Object> resultMap = new HashedMap(); resultMap.put("pv", pv); resultMap.put("uv", uv); result = callback + "(" + gson.toJson(resultMap) + ")"; } catch (ParseException e) { logger.error(e); } return result; }
3.呼叫中使用的是post請求,相應的HttpClient方法如下所示:
public class HttpClientUtils {
private static PoolingHttpClientConnectionManager connMgr;
private static RequestConfig requestConfig;
private static final int MAX_TIMEOUT = 7000;
static {
// 設定連線池
connMgr = new PoolingHttpClientConnectionManager();
// 設定連線池大小
connMgr.setMaxTotal(100);
connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
RequestConfig.Builder configBuilder = RequestConfig.custom();
// 設定連線超時
configBuilder.setConnectTimeout(MAX_TIMEOUT);
// 設定讀取超時
configBuilder.setSocketTimeout(MAX_TIMEOUT);
// 設定從連線池獲取連線例項的超時
configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
// 在提交請求之前 測試連線是否可用
configBuilder.setStaleConnectionCheckEnabled(true);
requestConfig = configBuilder.build();
}
/**
* 傳送 GET 請求(HTTP),不帶輸入資料
*
* @param url
* @return
*/
public static String doGet(String url) {
return doGet(url, new HashMap<String, Object>());
}
/**
* 傳送 GET 請求(HTTP),K-V形式
*
* @param url
* @param params
* @return
*/
public static String doGet(String url, Map<String, Object> params) {
String apiUrl = url;
StringBuffer param = new StringBuffer();
int i = 0;
for (String key : params.keySet()) {
if (i == 0)
param.append("?");
else
param.append("&");
param.append(key).append("=").append(params.get(key));
i++;
}
apiUrl += param;
String result = null;
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpPost = new HttpGet(apiUrl);
HttpResponse response = httpclient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("執行狀態碼 : " + statusCode);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
result = IOUtils.toString(instream, "UTF-8");
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 傳送 POST 請求(HTTP),不帶輸入資料
*
* @param apiUrl
* @return
*/
public static String doPost(String apiUrl) {
return doPost(apiUrl, new HashMap<String, Object>());
}
/**
* 傳送 POST 請求(HTTP),K-V形式
*
* @param apiUrl API介面URL
* @param params 引數map
* @return
*/
public static String doPost(String apiUrl, Map<String, Object> params) {
CloseableHttpClient httpClient = HttpClients.createDefault();
String httpStr = null;
HttpPost httpPost = new HttpPost(apiUrl);
CloseableHttpResponse response = null;
try {
httpPost.setConfig(requestConfig);
List<NameValuePair> pairList = new ArrayList<>(params.size());
for (Map.Entry<String, Object> entry : params.entrySet()) {
NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry
.getValue().toString());
pairList.add(pair);
}
httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8")));
response = httpClient.execute(httpPost);
System.out.println(response.toString());
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
}
}
return httpStr;
}
/**
* 傳送 POST 請求(HTTP),JSON形式
*
* @param apiUrl
* @param json json物件
* @return
*/
public static String doPost(String apiUrl, Object json) {
CloseableHttpClient httpClient = HttpClients.createDefault();
String httpStr = null;
HttpPost httpPost = new HttpPost(apiUrl);
CloseableHttpResponse response = null;
try {
httpPost.setConfig(requestConfig);
StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");//解決中文亂碼問題
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
System.out.println(response.getStatusLine().getStatusCode());
httpStr = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
}
}
return httpStr;
}
/**
* 傳送 SSL POST 請求(HTTPS),K-V形式
*
* @param apiUrl API介面URL
* @param params 引數map
* @return
*/
public static String doPostSSL(String apiUrl, Map<String, Object> params) {
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
HttpPost httpPost = new HttpPost(apiUrl);
CloseableHttpResponse response = null;
String httpStr = null;
try {
httpPost.setConfig(requestConfig);
List<NameValuePair> pairList = new ArrayList<NameValuePair>(params.size());
for (Map.Entry<String, Object> entry : params.entrySet()) {
NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry
.getValue().toString());
pairList.add(pair);
}
httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("utf-8")));
response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
HttpEntity entity = response.getEntity();
if (entity == null) {
return null;
}
httpStr = EntityUtils.toString(entity, "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
}
}
return httpStr;
}
/**
* 傳送 SSL POST 請求(HTTPS),JSON形式
*
* @param apiUrl API介面URL
* @param json JSON物件
* @return
*/
public static String doPostSSL(String apiUrl, Object json) {
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
HttpPost httpPost = new HttpPost(apiUrl);
CloseableHttpResponse response = null;
String httpStr = null;
try {
httpPost.setConfig(requestConfig);
StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");//解決中文亂碼問題
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
HttpEntity entity = response.getEntity();
if (entity == null) {
return null;
}
httpStr = EntityUtils.toString(entity, "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
}
}
return httpStr;
}
/**
* 建立SSL安全連線
*
* @return
*/
private static SSLConnectionSocketFactory createSSLConnSocketFactory() {
SSLConnectionSocketFactory sslsf = null;
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
@Override
public void verify(String host, SSLSocket ssl) throws IOException {
}
@Override
public void verify(String host, X509Certificate cert) throws SSLException {
}
@Override
public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException {
}
});
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
return sslsf;
}
}