萤石开放平台 您所在的位置:网站首页 萤石云开放平台登录提示1015 萤石开放平台

萤石开放平台

2024-07-13 18:05| 来源: 网络整理| 查看: 265

毕业设计中,有一项海康威视摄像头实时监控的功能,需要去萤石开放平台获取AppKey、Secret和AccessToken。但是有一个问题,获取到的AccessToken只有7天有效期。每隔7天就要获取一次token。项目发布后不可能通过手动去获取,而是要通过代码自动去获取。因此,去查找萤石开放平台的官方文档,通过接口进行调用。

萤石开放平台文档

因为项目采用的是ssm框架,因此在这里,使用springmvc配置定时执行任务,定期通过接口获取AccessToken,然后修改MySQL数据库中的数据,来达到定期更换token的效果。当想要访问实时监控画面时,只需在Controller中添加一个方法,从数据库中获取AccessToken,然后利用session传到前端即可。

1. 首先在spring-mvc.xml配置文件中添加

xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd

配置扫描任务位置

2. (因为项目需要,我将要定期执行获取AccessToken的方法放到了controller包里。)具体实现如下:

因为要用到http客户端,所以需要导入httpclient依赖。同时,因为从接口获取到的数据是Json格式,因此在这里采用阿里巴巴的fastjson。

首先在pom.xml中添加依赖

org.apache.httpcomponents httpclient 4.5.5 com.alibaba fastjson 1.2.47

HistoryDataController类:

@Controller @RequestMapping("/historydata") public class HistoryDataController { @Autowired private HistoryDataService historyDataService; private static String appKey = "*********************";//填上自己的appKey和Secret即可 private static String appSecret="**********************";// @Scheduled(cron = "0 0 13 ? * MON") public void updateVideoToken() throws IOException { CloseableHttpClient httpClient = HttpClientBuilder.create().build(); StringBuffer params = new StringBuffer(); params.append("appKey="+appKey); params.append("&"); params.append("appSecret="+appSecret); // 创建Post请求 HttpPost httpPost = new HttpPost("https://open.ys7.com/api/lapp/token/get" + "?" + params); httpPost.setHeader("Content-Type","application/x-www-form-urlencoded"); // 响应模型 CloseableHttpResponse response = null; // 由客户端执行(发送)Post请求 response = httpClient.execute(httpPost); // 从响应模型中获取响应实体 HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { //返回数据 String responseString = EntityUtils.toString(responseEntity); //生成实体类(responseString就可以看到数据的) JSONObject jsonObject = JSON.parseObject(responseString); String msg = jsonObject.getString("msg"); String code = jsonObject.getString("code"); JSONObject dataJson = jsonObject.getJSONObject("data"); Data data = JSONObject.toJavaObject(dataJson, Data.class); VideoToken videoToken = new VideoToken(); videoToken.setId(1); videoToken.setAccesstoken(data.getAccessToken()); if(code.equals("200")){ historyDataService.updateAccessToken(videoToken); } } } @RequestMapping("/toreal") public String toRealJsp(HttpServletRequest request){ int id=1; VideoToken videoToken = historyDataService.getVideoToken(id); String accesstoken = videoToken.getAccesstoken(); request.setAttribute("accesstoken",accesstoken); return "real"; } }

 在方法上添加了 @Scheduled(cron = "0 0 13 ? * MON")注解,意思为每周一中午13点执行一次,关于该注释的参数详解,可以点击这里进行查看

其中,Data类为自定义类,如下:

package com.gong.pojo; @lombok.Data public class Data { private String accessToken; private long expireTime; }

VideoToken类如下:

package com.gong.pojo; import lombok.Data; @Data public class VideoToken { private int id; private String accesstoken; }

在HistoryDataController中定义了HistoryDataService,调用updateAccessToken()方法来实现更新AccessToken。

其中,HistoryDataMapper.xml文件中的语句如下:

update ssmiot.videotoken set accesstoken = #{accesstoken} where id = #{id} select * from ssmiot.videotoken where id = #{id}

数据库中的表如下

 在HistoryDataController中,给id赋值为1,即修改id为1的accesstoken值。

每当想进入实时监控画面时,必须通过/toreal路径去访问,该方法会去数据库获取accesstoken的值,然后传给前端页面。

其中,xxxxxxxxx处填写对应摄像头的设备序列号。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有