前言

首先要特别感谢诸葛io官方人员的技术支持

近期小编有在网上查看Java整合诸葛io的相关请求接口文档,但是查到的结果都不太如意,或许是官方文档给得太详细了,根本不需要参考这种相关的博客。但是为了帮助到更多的人,避免再次踩坑,这里我还是花了一些时间整合了一下接口文档,希望能帮助到更多的人。

调用接口步骤

  1. 申请诸葛io的官方api调用权限账号(PS:记住是调用官方API权限的账号和密码,并不是开通开发者权限可以了,小编当时还找官方人员帮忙申请了一下相关请求的权限)
  2. 其实官方文档中,一直请求的接口都是 https://api.zhugeio.com/v2/ ,这里我们只需要在这个请求域名下加入自己想要的所有请求参数即可,所以请求起来是十分简单的
  3. 请求官方指定的域名的时候,需要注意要在请求头header里面加入 Authorization: Basic base64_auth_string 的这个K-V键值对参数,其中 Authorization 是作为key值,Basic base64_auth_string作为value值,并且我们要对这个value值进行一个base64的解码操作。
  4. 请求官方指定的域名的时候,需要注意请求参数中,所有的K-V键值对,我们value值需要进行一个urlEncode操作。所有的K-V键值对,我们value值需要进行一个urlEncode操作。所有的K-V键值对,我们value值需要进行一个urlEncode操作
  5. 以上所有的工具类我都整合到了一个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 acceptpublic static final String ACCEPT = "*/*";// The user agentpublic static final String USER_AGENT = "Mozilla/5.0";// The connectionpublic static final String KEEP_ALIVE = "Keep-Alive";// The request urlpublic 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));}}

【呕血整合】Java整合诸葛IO官方API获取埋点数据相关推荐

  1. alexa api php,PHP通过Alexa官方API获取网站Alexa排名 - 米扑博客

    Alexa 接口 Alexa的XML API接口是:http://data.alexa.com/data?cli=10&url=YOUR_DOMAIN_URL 查询结果如下: 如果想获取更多的 ...

  2. 用java实现网络爬虫,实时获取中国地震台网数据

    用java实现网络爬虫,实时获取中国地震台网数据 1.如何从网络中爬取相关数据 2.怎么进行数据处理 3.绘图设计 4. 存在问题: 5.java程序的源文件 5.1 爬虫程序 5.2 绘制柱状图程序 ...

  3. Java通达信接口如何实现获取实时股票数据?

    Java通达信接口如何实现获取实时股票数据? 一般有三种方式: 网页爬虫.采用爬虫去爬取目标网页的股票数据,去相关网站或技术论坛上找一下别人写的爬虫集成到项目中. 请求第三方API.会有专门的公司(例 ...

  4. Java中对接钉钉API获取数据流程

    场景 需要做后台管理系统,接入钉钉API获取人员.考勤.审批等相关数据. 实现 钉钉开放平台应用开发文档 https://developers.dingtalk.com/document/app 首先 ...

  5. 使用Youtube官方API获取频道及视频数据

    2020-06-04更新 下面附上笔者提供的源码(已经验证过功能.后续会在同一个工程中更新Facebook和Insgram的相关爬虫代码). https://github.com/zhangjz777 ...

  6. alexa api php,通过官方 API 获取网站 Alexa 排名

    Alexa 官方提供了 XML API 接口工具,地址是:http://data.alexa.com/data?cli=10&url=%YOUR_URL%.如果想获取更多的数据可以用:http ...

  7. 基于官方API实现ESA遥感数据批量下载的方法

    一.确定Sentinel-2影像瓦片Tile分区号 Sentinel-2 A/B卫星的观测范围在56°S-84°N之间,影像数据采用UTM系统分区编码规则.其中,每个100km×100km的瓦片(Ti ...

  8. 爬虫实践:通过百度地图API获取省份公园数据

    目标 通过百度地图Web服务API获取中国所有城市的公园数据,并且获取每一个公园具体的评分.描述等详情,最终将数据存储到MySQL数据库中. 实践准备 百度地图Place API的地址为 http:/ ...

  9. Python网络爬虫:某度地图API获取城市餐厅数据 并提取内容展示结果

    hello,大家好,我是wangzirui32,最近笔者的文章总访问突破1万了,这一路来感谢大家的支持,谢谢!这也是我的第60篇原创博文,希望你能认真的学习完它. 开始学习吧! 1. 百度API接口 ...

最新文章

  1. tokenizer.encode() 与 tokenizer.tokenize()对比,言简意赅 转 高人讲学
  2. HEOI2018游记
  3. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
  4. UNITY Destroy()和DestroyImadiate()的区别
  5. XML——使用 XPath来定位信息+使用命名空间
  6. express 项目生成器_用于项目的Express模板生成器(2)| 应用程序结构研究
  7. 架构师必须补充的能力
  8. python polar contour_13.极坐标系(Polar coordinate system)
  9. java http服务_springboot官方例子中文翻译--RESTful服务启用CORS支持
  10. VMware Workstation 12下载安装与激活图文教程
  11. php面试题——Linux部分(高级部分)
  12. 使用mapReduce分析简单天气数据
  13. oracle 表列统计信息,Oracle中收集表与列统计信息
  14. w ndows摄像头驱动怎么安,win10摄像头驱动程序怎么下载安装
  15. mongodb 副本集Replica Set的keyfile验证
  16. linux下命令行方式的音量控制
  17. 电子书 UNIX环境高级编程(第3版).pdf
  18. java泛型的上界下界
  19. AI人工智能算法解析落地实践专栏列表
  20. 最让人舒服的11种颜色RGB值和十六进制值

热门文章

  1. perl dbd mysql 5.7_perl-DBD-MySQL 无法安装
  2. 区块链投资现状和区块链应用部署的探讨
  3. 小程序接入流量主、banner广告、激励广告
  4. 人工智能未来前景怎么样 初学者能学python人工智能吗
  5. 中缀表达式转后缀表达式详细思路及代码实现
  6. 二分查找的递归与非递归实现
  7. Git 中忽略某些文件或者文件夹
  8. 学习数学建模之优化类----蒙特卡洛迭代法(自学)+多元线性回归模型(STATA学习应用)+自己听论文排版的课程2022-01-28
  9. 如何拿到tabbarcontroller,如何拿到主导航控制器
  10. 渗透测试-信息搜集的目的和方法