前言
首先要特别感谢诸葛io官方人员的技术支持
近期小编有在网上查看Java整合诸葛io的相关请求接口文档,但是查到的结果都不太如意,或许是官方文档给得太详细了,根本不需要参考这种相关的博客。但是为了帮助到更多的人,避免再次踩坑,这里我还是花了一些时间整合了一下接口文档,希望能帮助到更多的人。
调用接口步骤
- 申请诸葛io的官方api调用权限账号(PS:记住是调用官方API权限的账号和密码,并不是开通开发者权限可以了,小编当时还找官方人员帮忙申请了一下相关请求的权限)
- 其实官方文档中,一直请求的接口都是
https://api.zhugeio.com/v2/
,这里我们只需要在这个请求域名下加入自己想要的所有请求参数即可,所以请求起来是十分简单的 - 请求官方指定的域名的时候,需要注意要在请求头header里面加入
Authorization: Basic base64_auth_string
的这个K-V键值对参数,其中Authorization
是作为key值,Basic base64_auth_string
作为value值,并且我们要对这个value值进行一个base64的解码操作。 - 请求官方指定的域名的时候,需要注意请求参数中,所有的K-V键值对,我们value值需要进行一个urlEncode操作。所有的K-V键值对,我们value值需要进行一个urlEncode操作。所有的K-V键值对,我们value值需要进行一个urlEncode操作
- 以上所有的工具类我都整合到了一个Java文件中,注释详细,一看就懂,上手就会
package yangshiwen.util.api;
import com.yangshiwen.admin.constant.CommonConstants;
import com.yangshiwen.admin.util.GeneralUtil;
import com.yangshiwen.admin.util.LogUtil;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
/**
* 诸葛IO API - 请求统一工具类
*
* @author shiwen
* @date 2020/11/10
*/
public class ZhugeRequestApiUtils {
// The accept
public static final String ACCEPT = "*/*";
// The user agent
public static final String USER_AGENT = "Mozilla/5.0";
// The connection
public static final String KEEP_ALIVE = "Keep-Alive";
// The request url
public static final String REQUEST_URL = "https://api.zhugeio.com/v2/stat/{appid}";
// The Authorization (Base64Encoder)
public static final String AUTHORIZATION = "Basic <base64Encode的username:password>";
/**
* 统一生成base64的加密源
*
* @param origin
* @return
*/
public static String base64Encode(String origin) {
try {
return Base64.getUrlEncoder().encodeToString(origin.getBytes("utf-8"));
} catch (Exception ex) {
return null;
}
}
/**
* 统一生成urlEncode的加密源
*
* @param origin
* @return
*/
public static String urlEncode(String origin) {
try {
return URLEncoder.encode(origin, "utf-8");
} catch (UnsupportedEncodingException e) {
return null;
}
}
/**
* 根据账号密码获取请求头的Authorization
*
* @param username
* @param password
* @return Authorization (base64encode)
*/
public static String getAuthorizationByAccount(String username, String password) {
// 组装账号密码
String account = username + ":" + password;
return base64Encode(account);
}
/**
* 根据map集合转换为string字符串, 拼接成urlCode编码的请求参数
*
* @param mapParams
* @return strParams
*/
public static String getStrByMap(Map<String, String> mapParams) {
String strResult = "";
int mapSize = mapParams.size();
if (!GeneralUtil.isMapNotNull(mapParams)) {
return strResult;
}
for (String key : mapParams.keySet()) {
// 判断是不是最后一次执行, 如果是的话就不需要拼接 [ & ] 了
if (mapSize == CommonConstants.ONE) {
strResult = strResult + key + "=" + urlEncode(mapParams.get(key));
} else {
strResult = strResult + key + "=" + urlEncode(mapParams.get(key)) + "&";
}
mapSize--;
}
return strResult;
}
/**
* @param url
* @param mapParams
* @return URL 所代表远程资源的响应结果
*
* 向指定URL发送GET方法的请求
* 发送请求的URL
* 请求参数,请求参数应该是 [name1=value1 & name2=value2] 的形式。
*/
@SuppressWarnings("unused")
public static String getRequest(String url, Map<String, String> mapParams) {
String result = "";
BufferedReader in = null;
try {
// 凭借url路径
String urlNameString = url + "?" + getStrByMap(mapParams);
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", ACCEPT);
connection.setRequestProperty("connection", KEEP_ALIVE);
connection.setRequestProperty("user-agent", USER_AGENT);
connection.setRequestProperty("Authorization", AUTHORIZATION);
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
LogUtil.info("Processing zhugeIo request fail!url = %s, mapParams = %s", url, mapParams);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
新增用户查询信息:
Map<String, String> mapParam = new HashMap<>();
mapParam.put("metrics", "users");
mapParam.put("dimensions", "$birth_day");
mapParam.put("conditions", "{\"$birth_day\":[\"between\",\"2020-11-01\",\"2020-11-10\"],\"$current_page_url\":[\"contains\", \"orgId=340\"]}");
System.out.println(getRequest(REQUEST_URL, mapParam));
*/
/**
访问次数信息查询:
Map<String, String> mapParam = new HashMap<>();
mapParam.put("metrics", "sessions");
mapParam.put("dimensions", "$day");
mapParam.put("conditions", "{\"$day\":[\"between\",\"2020-11-01\",\"2020-11-10\"],\"$current_page_url\":[\"contains\", \"orgId=340\"]}");
System.out.println(getRequest(REQUEST_URL, mapParam));
*/
/**
活跃用户信息查询:
Map<String, String> mapParam = new HashMap<>();
mapParam.put("metrics", "users");
mapParam.put("dimensions", "$day");
mapParam.put("conditions", "{\"$day\":[\"between\",\"2020-11-01\",\"2020-11-10\"],\"$current_page_url\":[\"contains\", \"orgId=340\"]}");
System.out.println(getRequest(REQUEST_URL, mapParam));
*/
public static void main(String[] args) {
Map<String, String> mapParam = new HashMap<>();
mapParam.put("metrics", "users");
mapParam.put("dimensions", "$day");
mapParam.put("conditions", "{\"$day\":[\"between\",\"2020-11-01\",\"2020-11-10\"],\"$current_page_url\":[\"contains\", \"orgId=11\"]}");
System.out.println(getRequest(REQUEST_URL, mapParam));
}
}