gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

月度归档11月 2020

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  2020   /  
  • 11月
Spark, 数据挖掘 11月 17,2020

Spark新闻App点击率预估实践案例

import org.apache.spark.sql.{SparkSession}

//action:userid~ docid ~behaivor(label)~time~ip
//160520092238579653~160704235940001~0~20160705000040909~1.49.185.165
//160520092238579653~160704235859003~0~20160705000040909~1.49.185.165
//define case class for action data
case class Action(docid: String, label:Int)

//document:docid ~ channelname ~ source ~ keyword:score
//160705131650005~科技~偏执电商~支付宝:0.17621 医疗:0.14105 复星:0.07106 动作:0.05235 邮局:0.04428
//160705024106002~体育~平大爷的刺~阿杜:0.23158 杜兰特:0.09447 巨头:0.08470 拯救者:0.06638 勇士:0.05453
//define case class for document data
case class Dccument(docid: String, channal: String, source: String, tags: String)

object GenTrainingData {
  def main(args: Array[String]): Unit = {

    //2rd_data/ch09/action.txt 2rd_data/ch09/document.txt output/ch11 local[2]
    val Array(actionPath, documentPath, output, mode) = args
    // 创建Spark实例
    val spark = SparkSession.builder
      .master(mode)
      .appName(this.getClass.getName)
      .getOrCreate()

    import spark.implicits._
    val ActionDF = spark.sparkContext.textFile(actionPath).map(_.split("~"))
      .map(x => Action(x(1).trim.toString, x(2).trim.toInt))
      .toDF()
    // Register the DataFrame as a temporary view
    //ActionDF.createOrReplaceTempView("actiondf")

    val documentDF = spark.sparkContext.textFile(documentPath).map(_.split("~")).filter(_.length > 3)
      .map { case x =>
        val xtags = x(3).split(" ").filter(_.length > 0).map { b => b.substring(0, b.indexOf(":")) }.mkString("|")
        Dccument(x(0).trim.toString, x(1).trim.toString, x(2).trim.toString, xtags.toString)
      }
      .toDF()
    // Register the DataFrame as a temporary view
    //documentDF.createOrReplaceTempView("documentdf")

    // 将查询结果放到tempDF中,完成dataframe转化
    //val tempDF = spark.sql("select actiondf.docid,actiondf.label,documentdf.channal,documentdf.source,documentdf.tags from actiondf,documentdf where actiondf.docid = documentdf.docid")
    val tempDF = documentDF.join(ActionDF, documentDF("docid").equalTo(ActionDF("docid")))
    //tempDF.select($"tags").show(100)

    // 编码格式转换
    val minDF = tempDF.select($"tags").rdd
      .flatMap{ x => x.toString.replace("[","").replace("]","").split('|') }.distinct
    //minDF.coalesce(1).saveAsTextFile(output+"/tags")
    val indexes = minDF.collect().zipWithIndex.toMap
    println(indexes.toList.length) //23937
    //
    val libsvmDF = tempDF.select($"label", $"tags").map {
      x =>
        val label = x(0)
        val terms = x(1).toString.replace("[","").replace("]","")
          .split('|') //使用单引号
          .map(v => (indexes.get(v).getOrElse(-1)+1, 1)) //索引从0开始
          .sortBy(_._1) //libsvm 需要升序
          .map(x => x._1 + ":" + x._2)
          .mkString(" ")
        (label.toString + " " + terms)
    }
    libsvmDF.show(100)

    //保存模型时存在:Exception while deleting local spark dir,不影响结果生成,作为已知问题暂时搁置。
    //libsvmDF.coalesce(1).write.format("text").save(output+"/model")
    //libsvmDF.rdd.coalesce(1).saveAsTextFile(output+"/model")
    val Array(trainingdata, testdata) = libsvmDF.randomSplit(Array(0.7, 0.3))
    trainingdata.rdd.coalesce(1).saveAsTextFile(output+"/training")
    testdata.rdd.coalesce(1).saveAsTextFile(output+"/test")
    //
    //spark.stop()
  }
}
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.mllib.classification.LogisticRegressionWithLBFGS
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics

object LRTrainAndTest {

  def main(args: Array[String]) {

    if (args.length < 8) {
      System.err.println("Usage:LRTrainAndTest <trainingPath> <testPath> <output> <numFeatures> <partitions> <RegParam> <NumIterations> <NumCorrections>")
      System.exit(1)
    }

    //2rd_data/ch11/test/part-00000 2rd_data/ch11/training/part-00000 output/ch11/label 23937 50 0.01 100 10
    val conf = new SparkConf()
      .setMaster("local")
      .setAppName("ADTest with logistic regression")
    val sc = new SparkContext(conf)
    val numFeatures = args(3).toInt //特征数23937
    val partitions = args(4).toInt //一般50-1000

    //label channal source tags
    //依次为:类别(是否点击,点击为1,没有点击为0)、频道、来源、关键词
    //样例:1 娱乐 腾讯娱乐 曲妖精|棉袄|王子文|老大爷|黑色

    // 导入训练样本和测试样本
    val training = MLUtils.loadLibSVMFile(sc,args(0),numFeatures,partitions)
    val test = MLUtils.loadLibSVMFile(sc,args(1),numFeatures,partitions)

    val lr = new LogisticRegressionWithLBFGS()

    //训练参数设置
    lr.optimizer.setRegParam(args(5).toDouble) //0.01
      .setNumIterations(args(6).toInt) //100
      .setNumCorrections(args(7).toInt) //10

    //训练
    val lrModel = lr.setNumClasses(2).run(training)//2分类
    lrModel.clearThreshold()

    //预测打分
    val predictionAndLabel = test.map(p=>(lrModel.predict(p.features),p.label))
    predictionAndLabel.map(x=>x._1+"\t"+x._2).repartition(1)
      .saveAsTextFile(args(2))
    val metrics = new BinaryClassificationMetrics(predictionAndLabel)

    //计算AUC
    val str = s"the value of auc is ${metrics.areaUnderROC()}"
    println(str)
  }
}
作者 east
Spark, 数据挖掘 11月 17,2020

Spark企业法人建模案例

数据格式如下:

字段含义参考上一节。

样例如下:

package com.koala.ch12

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.DataFrame
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.classification.LogisticRegression

object CreditModel {

  // 创建评分模型属性class,对字段进行命名
  // 0,1,37,10,0,3,18,7,4
  case class Credit(load_label:Double,gender:Double,age:Double,yearsmarried:Double,children:Double,housenumber:Double,captiallevel:Double,facarnumber:Double,pacarnumber:Double)

  def main(args: Array[String]) {
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    if (args.length < 3){
      System.err.println("Usage:CreditModel <creaditInPath> <outPut> <model>")
      System.exit(1)
    }

    //2rd_data/ch12/creditdata.txt output/ch12/model local[2]
    val Array(creaditInPath,output,mode) = args

    // 创建Spark实例
    val spark = SparkSession.builder
      .master(mode)
      .appName("CreditModel Example")
      .getOrCreate()

    // 加载文本,并创建RDD数据源,将变量的名称赋予各个字段
    // Create an RDD of Credit objects from a text file, convert it to a Dataframe
    import spark.implicits._
    val creditDF = spark.sparkContext.textFile(creaditInPath).map(_.split(","))
      .map(attributes => Credit(attributes(0).trim.toDouble,attributes(1).trim.toDouble,attributes(2).trim.toDouble,attributes(3).trim.toDouble,attributes(4).trim.toDouble,attributes(5).trim.toDouble,attributes(6).trim.toDouble,attributes(7).trim.toDouble,attributes(8).trim.toDouble))
      .toDF()

    // Register the DataFrame as a temporary view
    // 创建临时视图
    creditDF.createOrReplaceTempView("creditdf")

    // 将查询结果放到sqlDF中,完成dataframe转化
    val sqlDF = spark.sql("select * from creditdf")
    sqlDF.show()

    // 自变量的列名
    val colArray2 = Array("gender","age","yearsmarried","children","housenumber","captiallevel","facarnumber","pacarnumber")
    // 设置DataFrame自变量集,并将这些变量统称为"features"
    val vecDF: DataFrame = new VectorAssembler().setInputCols(colArray2).setOutputCol("features").transform(sqlDF)

    // 按7:3划分成训练集和测试集,训练集为trainingDF,测试集为testDF
    val Array(trainingDF,testDF) = vecDF.randomSplit(Array(0.7, 0.3), seed=132) //seed随机算法从该数字开始生成随机数字

    // 建立逻辑回归模型,设置目标变量(标签)和自变量集,在训练集上训练
    val lrModel = new LogisticRegression().setLabelCol("load_label").setFeaturesCol("features").fit(trainingDF)
    // 输出逻辑回归的系数和截距
    println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}")

    // 惩罚项,如果是0,是L2惩罚,如果是0-1之间是混合,如果是1,则是L1惩罚,默认是L2
    lrModel.getElasticNetParam
    // 正则化的参数,一般大于等于0,默认是0
    lrModel.getRegParam
    // 拟合之前是否需要标准化,默认是true
    lrModel.getStandardization
    // 二分类中设置阈值,范围为[0,1],如果类标签的1的概率大于该阈值,则会判定为1,默认是0.5
    lrModel.getThreshold
    // 设置迭代的收敛容限,默认值为1e-6
    lrModel.getTol

    // 使用测试集进行预测,包括原始的字段,在加上综合的自变量集字段features,预测的原始值,转化的概率值,预测的类别
    lrModel.transform(testDF).show

    //具体的查看features,预测的原始值,转化的概率值,预测的类别
    lrModel.transform(testDF).select("features","rawPrediction","probability","prediction").show(30,false)

    //查看模型训练过程中损失的迭代情况
    val trainingSummary = lrModel.summary
    val objectiveHistory = trainingSummary.objectiveHistory
    objectiveHistory.foreach(loss => println(loss))
    //保存模型
    lrModel.save(output)
    //
    spark.close()
  }
}
作者 east
Spark, 数据挖掘 11月 17,2020

Spark道路拥堵模式聚类案例

从基础的道路通行状态统计、分析、聚类等维度开展对某个城市道路拥堵情况的分析和研究。

13.3.2 数据预处理根据给定的某地图路况数据,首先进行数据预处理工作,清洗原始数据并去除缺失数据、错误数据,根据道路ID进行数据汇集,计算拥堵指数。1)清除缺失数据:清除字段为空记录;

2)清除错误数据:清除字段错误记录;

3)根据道路ID进行道路拥堵指数聚合;

4)根据时间进行道路拥堵指数排序。

13.3.3 特征构建仍然以半小时为最小时间粒度(每日24小时划分为48维时间片),并对道路拥堵指数按时间片进行聚合计算,同时按照48维时间片进行拥堵指数排列。具体处理过程以及代码如下:

package com.koala.ch13

import org.apache.spark.{SparkConf, SparkContext}
import java.text.SimpleDateFormat
import java.util.Calendar

import breeze.linalg.Counter
import org.apache.log4j.{Level, Logger}

object CrowdModel {

  def main(args: Array[String]){
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    if (args.length < 2) {
      System.err.println("Usage:CrowdModel <InPath> <OutPut> <Model>")
      System.exit(1)
    }

    // 2rd_data/ch13/user_location_sample.txt output/ch13/CrowdModel local[2]
    val Array(input,output,mode) = args

    //初始化SparkContext
    val conf = new SparkConf()
      .setMaster(mode)//.setMaster("local")
      .setAppName(this.getClass.getSimpleName)
    val sc = new SparkContext(conf)

    // 位置筛选
    // 清洗数据,通过split(",")切分数据,得到 User_id Time_stamp Cell_id三个维度的数据列表。
    // (Time_stamp,Cell_id,User_id)-> (User_id,Time_stamp,Cell_id)
    // 20160501055052,209059,898
    val data = sc.textFile(input).map(_.split(",")).map {
      x => (x(2), x(0), x(1))
    }
    //data.coalesce(1).saveAsTextFile(output)

    // 根据Time_stamp分析当前日期为工作日或节假日,并添加time标签标识HH:mm,work_flag标签标识工作日(work_falg=1)或节假日(work_flag=0)
    // 输出:(User_id,work_flag,date_time,Cell_id)
    val preData = data.map {
      case (preUser_id, preTime_stamp, preCell_id) => {

        //将日期转变成星期,获取工作日(星期一至星期五)和非工作日(星期六、星期日)
        // 20160501 055052
        val sdf = new SimpleDateFormat("yyyyMMddHHmmss") //24小时工作制
        val date = sdf.parse(preTime_stamp)
        val cal = Calendar.getInstance
        cal.setTime(date)
        var w = cal.get(Calendar.DAY_OF_WEEK) - 1
        // 工作日默认为1 非工作日默认为0
        var work_flag = 1
        if (w <= 0 || w >= 6) {
          work_flag = 0
        }

        // 按照30分钟间隔处理时间
        val time_ = preTime_stamp.substring(8, 12)
        // 截取指定位置的元素,前包括后不包括
        var minute_ = "00"
        if (time_.substring(2).toInt >= 30) {
          minute_ = "30"
        }
        val date_time = time_.toString.substring(0, 2) + minute_
        ((preUser_id, work_flag, date_time, preCell_id), 1)
      }
    }
    //preData.coalesce(1).saveAsTextFile(output)

    //使用reduceByKey(_+_)对(User_id,work_flag,date_time,Cell_id)访问次数进行聚合,根据聚合结果,选择用户某段时间在30分钟内划分访问次数最多的基站为标准访问地点。
    val aggData = preData.reduceByKey(_ + _)
      .map { x => ((x._1._1, x._1._2, x._1._3), (x._1._4, x._2)) }
      .reduceByKey((a, b) => if (a._2 > b._2) a else b)//选取访问次数最多的cell
    //aggData.coalesce(1).saveAsTextFile(output)

    //获取用户工作日24小时访问地点cell_id、节假日24小时访问地点cell_id,以30分钟为最小时间粒度划分时间片,得到user_id工作日48维时间片访问cell_id和节假日48维时间片访问cell_id,共计96维时间片。
    //(User_id,work_flag,date_time),(Cell_id,nums)->(User_id,work_flag),(date_time,Cell_id)

    val slotData = aggData.map { x => ((x._1._1, x._1._2), (x._1._3 + ":" + x._2._1)) }.reduceByKey(_ + ";" + _)
    //slotData.coalesce(1).saveAsTextFile(output)

    // 位置编码
    // 根据聚合结果,提取所有用户访问的基站进行重新编码,获得用户访问位置列表cell_id,并进行排序去重
    // (User_id,work_flag,date_time),(Cell_id,nums)
    val minCell = aggData.map(x => x._2._1).sortBy(x=>x.toLong,true).collect().distinct
    println(minCell.toList)
    //使用zip方法从1开始对用户访问地址进行编码,并将编码进行保存。
    val index_list = minCell.zip(Stream from 1).toMap
    println(index_list)
    //得到的index_list即是用户访问位置编码特征向量。
  }
}
import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}

object CleanCongestionData {

  def main(args: Array[String]) {
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    if (args.length < 2) {
      System.err.println("Usage:CleanCongestionData <InPath> <OutPut> <Model>")
      System.exit(1)
    }

    // 2rd_data/ch13/road_congestion_sample.txt output/ch13/CongestionModel local[2]
    val Array(input,output,mode) = args

    // 初始化SparkContext
    val conf = new SparkConf()
      .setMaster(mode)//.setMaster("local")
      .setAppName(this.getClass.getSimpleName)
    val sc = new SparkContext(conf)

    // 计算link的拥堵情况,指定道路、工作日状态、时间片时,link拥堵指数的平均值(四舍五入)取整,
    // key (linkid, work_flag, hour) value (congestion)
    // 85349482;1;20.5;1
    val data = sc.textFile(input).map(_.split(";"))
      .map {x => ((x(0),x(1),x(2)),x(3))}
      .groupByKey().mapValues(x=>{
        val a = x.toList.reduceLeft((sum,i)=>sum +i)//拥堵指数求和
        val b = x.toList.length
        Math.round(a.toInt/b)//平均拥堵指数
      })
    //data.coalesce(1).saveAsTextFile(output)

    // 根据key聚合数据后,使用hour 进行排序 并删除hour数据
    // key (linkid,work_flag, hour) value (congestion)->(linkid) value(work_flag,congestion)
    val collectData = data.sortBy(x=>x._1._3).map(x => ((x._1._1),(x._1._2+":"+x._2))).reduceByKey(_ + ";" + _)
    collectData.coalesce(1).saveAsTextFile(output)
  }
}
作者 east
Java 11月 17,2020

GAT1400的注册流程RFC2617认证

此图像的alt属性为空;文件名为image.png


Authorization 请求头字段

  • response: 客户端根据算法算出的摘要值
  • username: 要认证的用户名
  • realm: 认证域,可取任意标识值
  • uri: 请求的资源位置
  • qop: 保护质量
  • nonce: 服务器密码随机数
  • nc: 16进制请求认证计数器,第一次 00000001
  • algorithm: 默认MD5算法
  • cnonce: 客户端密码随机数

Request-Digest 摘要计算过程

若算法是:MD5 或者是未指定
则 A1= <username>:<realm>:<passwd>

若 qop 未定义或者 auth:
则 A2= <request-method>:<digest-uri-value>

若 qop 为 auth
      response=MD5(MD5(A1):<nonce>:<nc>:<cnonce>:<qop>:MD5(A2)) 
若 qop 没有定义
      response=MD5(MD5(A1):<nonce>:MD5(A2)) 

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.Validate;

import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.Random;

/**
 * Http Digest
 * @author zhouzhixiang
 * @date 2019-05-14
 */
public class Digests {

    private static SecureRandom random = new SecureRandom();
    /**
     * 加密遵循RFC2671规范 将相关参数加密生成一个MD5字符串,并返回
     */
    public static String http_da_calc_HA1(String username, String realm, String password,
                                          String nonce, String nc, String cnonce, String qop,
                                          String method, String uri, String algorithm) {
        String HA1, HA2;
        if ("MD5-sess".equals(algorithm)) {
            HA1 = HA1_MD5_sess(username, realm, password, nonce, cnonce);
        } else {
            HA1 = HA1_MD5(username, realm, password);
        }
        byte[] md5Byte = md5(HA1.getBytes());
        HA1 = new String(Hex.encodeHex(md5Byte));

        md5Byte = md5(HA2(method, uri).getBytes());
        HA2 = new String(Hex.encodeHex(md5Byte));

        String original = HA1 + ":" + (nonce + ":" + nc + ":" + cnonce + ":" + qop) + ":" + HA2;

        md5Byte = md5(original.getBytes());
        return new String(Hex.encodeHex(md5Byte));

    }

    /**
     * algorithm值为MD5时规则
     */
    private static String HA1_MD5(String username, String realm, String password) {
        return username + ":" + realm + ":" + password;
    }

    /**
     * algorithm值为MD5-sess时规则
     */
    private static String HA1_MD5_sess(String username, String realm, String password, String nonce, String cnonce) {
        //      MD5(username:realm:password):nonce:cnonce

        String s = HA1_MD5(username, realm, password);
        byte[] md5Byte = md5(s.getBytes());
        String smd5 = new String(Hex.encodeHex(md5Byte));

        return smd5 + ":" + nonce + ":" + cnonce;
    }

    private static String HA2(String method, String uri) {
        return method + ":" + uri;
    }

    /**
     * 对输入字符串进行md5散列.
     */
    public static byte[] md5(byte[] input) {
        return digest(input, "MD5", null, 1);
    }

    /**
     * 对字符串进行散列, 支持md5与sha1算法.
     */
    private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
        try {
            MessageDigest digest = MessageDigest.getInstance(algorithm);

            if (salt != null) {
                digest.update(salt);
            }

            byte[] result = digest.digest(input);

            for (int i = 1; i < iterations; i++) {
                digest.reset();
                result = digest.digest(result);
            }
            return result;
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 随机生成numBytes长度数组
     * @param numBytes
     * @return
     */
    public static byte[] generateSalt(int numBytes) {
        Validate.isTrue(numBytes > 0, "numBytes argument must be a positive integer (1 or larger)", (long)numBytes);
        byte[] bytes = new byte[numBytes];
        random.nextBytes(bytes);
        return bytes;
    }

    @Deprecated
    public static String generateSalt2(int length) {
        String val = "";
        Random random = new Random();
        //参数length,表示生成几位随机数
        for(int i = 0; i < length; i++) {
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            //输出字母还是数字
            if( "char".equalsIgnoreCase(charOrNum) ) {
                //输出是大写字母还是小写字母
                int temp = random.nextInt(2)%2 == 0 ? 65 : 97;
                val += (char)(random.nextInt(26) + temp);
            } else if( "num".equalsIgnoreCase(charOrNum) ) {
                val += String.valueOf(random.nextInt(10));
            }
        }
        return val.toLowerCase();
    }


    //测试
    public static void main(String[] args) throws UnsupportedEncodingException {
        // String s = http_da_calc_HA1("povodo", "realm@easycwmp", "povodo",
        //                             "c10c9897f05a9aee2e2c5fdebf03bb5b0001b1ef", "00000001", "d5324153548c43d8", "auth",
        //                             "GET", "/", "MD5");
        // System.out.println("加密后response为:" + s);

        // String s = new String(generateSalt(8),"UTF-8");

        // System.out.println(s);
    }
}

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • Http Digest Request contains POST、GET、PUT
  • @author zhouzhixiang
  • @date 2019-05-14
    */
    public class HttpRequestUtils { private static final Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class); public static void main(String[] args) {
    // String url = “http://192.168.200.117:8087/v2/servers/defaultServer/vhosts/defaultVHost/applications/live/publishers”;
    // String url = “http://192.168.200.117:8087/v2/servers/defaultServer/vhosts/defaultVHost/applications/Relay/streamfiles/1234566/actions/connect?&vhost=defaultVHost&appType=live&appName=Relay&appInstance=definst&connectAppName=Relay&connectAppInstance=definst&streamFile=1234566.stream&mediaCasterType=liverepeater”;
    String param = “”;
    String username = “xxxxxx”;
    String password = “xxxxxx”;
    // String json = “{ \”password\”: \”plmo13579123\”, \”publisherName\”: \”4\”, \”serverName\”: \”defaultServer\”, \”description\”: \”\”, \”saveFieldList\”: [ \”\” ], \”version\”: \”v1.0\” }”;
    // String s = sendPost(url, param, username, password, json); // String s = sendPost(url, param, username, password, json); // -----------------GET-success------------------ String getUrl = "http://192.168.200.117:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications"; // String s = sendGet(getUrl, param, username, password, null); // -----------------GET-success------------------ // -----------------PUT-success------------------ String putUrl = "http://192.168.200.117:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/Relay/streamfiles/6D07D7E7623B95889C33DC5901307461_0/actions/connect"; String putJson = "{ \"vhost\":\"_defaultVHost_\", \"mediaCasterType\":\"liverepeater\" }"; // String s = sendPUT(putUrl, param, username, password, putJson, null); // -----------------PUT-success------------------ // -----------------POST-success------------------ String postUrl = "http://192.168.200.117:8087/v2/servers/_defaultServer_/users"; String postJson = "{ \"password\": \"123456\", \"serverName\": \"_defaultServer_\", \"description\": \"\", \"groups\": [ \"\" ], \"saveFieldList\": [ \"\" ], \"userName\": \"test6\", \"version\": \"v1.0\" }"; // String s = sendPost(postUrl, param, username, password, postJson, null); // -----------------POST-success------------------ // -----------------POST-success------------------ String postUrl2 = "http://192.168.200.117:8087/v2/servers/_defaultServer_/publishers"; String postJson2 = "{ \"password\": \"1579655633@qq.com\", \"name\": \"test11\", \"serverName\": \"_defaultServer_\", \"description\": \"test\", \"saveFieldList\": [ \"\" ], \"version\": \"v1.0\" }"; // String s = sendPost(postUrl2, param, username, password, postJson2, null); // -----------------POST-success------------------ // -----------------DELETE-success------------------ String deleteUrl = "http://192.168.200.117:8087/v2/servers/_defaultServer_/users/test5"; // String deleteJson = "{ \"password\": \"1579655633@qq.com\", \"name\": \"test11\", \"serverName\": \"_defaultServer_\", \"description\": \"test\", \"saveFieldList\": [ \"\" ], \"version\": \"v1.0\" }"; String s = sendDelete(deleteUrl, param, username, password, null, null); // -----------------DELETE-success------------------ System.out.println(s); } static int nc = 0; //调用次数
    private static final String GET = “GET”;
    private static final String POST = “POST”;
    private static final String PUT = “PUT”;
    private static final String DELETE = “DELETE”; /**
    • 向指定URL发送DELETE方法的请求
    • @param url 发送请求的URL
    • @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    • @param username 验证所需的用户名
    • @param password 验证所需的密码
    • @param json 请求json字符串
    • @param type 返回xml和json格式数据,默认xml,传入json返回json数据
    • @return URL 所代表远程资源的响应结果
      */
      public static String sendDelete(String url, String param, String username, String password, String json, String type) { StringBuilder result = new StringBuilder();
      BufferedReader in = null;
      try {
      String wwwAuth = sendGet(url, param); //发起一次授权请求
      if (wwwAuth.startsWith(“WWW-Authenticate:”)) {
      wwwAuth = wwwAuth.replaceFirst(“WWW-Authenticate:”, “”);
      } else {
      return wwwAuth;
      }
      nc ++;
      String urlNameString = url + (StringUtils.isNotEmpty(param) ? “?” + param : “”);
      URL realUrl = new URL(urlNameString);
      // 打开和URL之间的连接
      HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection(); // 设置是否向connection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true connection.setDoOutput(true); // Read from the connection. Defaultis true. connection.setDoInput(true); // 默认是 GET方式 connection.setRequestMethod(DELETE); // 设置通用的请求属性 setRequestProperty(connection, wwwAuth, realUrl, username, password, DELETE, type); if (!StringUtils.isEmpty(json)) { byte[] writebytes =json.getBytes(); connection.setRequestProperty("Content-Length",String.valueOf(writebytes.length)); OutputStream outwritestream = connection.getOutputStream(); outwritestream.write(json.getBytes()); outwritestream.flush(); outwritestream.close(); } if (connection.getResponseCode() == 200) { in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result.append(line); } } else { String errResult = formatResultInfo(connection, type); logger.info(errResult); return errResult; } nc = 0; } catch (Exception e) {
      nc = 0;
      throw new RuntimeException(e);
      } finally {
      try {
      if (in != null) in.close();
      } catch (Exception e2) {
      e2.printStackTrace();
      }
      }
      return result.toString();
      }
    /**
    • 向指定URL发送PUT方法的请求
    • @param url 发送请求的URL
    • @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    • @param username 验证所需的用户名
    • @param password 验证所需的密码
    • @param json 请求json字符串
    • @param type 返回xml和json格式数据,默认xml,传入json返回json数据
    • @return URL 所代表远程资源的响应结果
      */
      public static String sendPUT(String url, String param, String username, String password, String json, String type) { StringBuilder result = new StringBuilder();
      BufferedReader in = null;
      try {
      String wwwAuth = sendGet(url, param); //发起一次授权请求
      if (wwwAuth.startsWith(“WWW-Authenticate:”)) {
      wwwAuth = wwwAuth.replaceFirst(“WWW-Authenticate:”, “”);
      } else {
      return wwwAuth;
      }
      nc ++;
      String urlNameString = url + (StringUtils.isNotEmpty(param) ? “?” + param : “”);
      URL realUrl = new URL(urlNameString);
      // 打开和URL之间的连接
      HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection(); // 设置是否向connection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true connection.setDoOutput(true); // Read from the connection. Defaultis true. connection.setDoInput(true); // 默认是 GET方式 connection.setRequestMethod(PUT); // Post 请求不能使用缓存 connection.setUseCaches(false); // 设置通用的请求属性 setRequestProperty(connection, wwwAuth,realUrl, username, password, PUT, type); if (!StringUtils.isEmpty(json)) { byte[] writebytes =json.getBytes(); connection.setRequestProperty("Content-Length",String.valueOf(writebytes.length)); OutputStream outwritestream = connection.getOutputStream(); outwritestream.write(json.getBytes()); outwritestream.flush(); outwritestream.close(); } if (connection.getResponseCode() == 200) { in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result.append(line); } } else { String errResult = formatResultInfo(connection, type); logger.info(errResult); return errResult; } nc = 0; } catch (Exception e) {
      nc = 0;
      throw new RuntimeException(e);
      } finally {
      try {
      if (in != null) in.close();
      } catch (Exception e2) {
      e2.printStackTrace();
      }
      }
      return result.toString();
      }
    /**
    • 向指定URL发送POST方法的请求
    • @param url 发送请求的URL
    • @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    • @param username 验证所需的用户名
    • @param password 验证所需的密码
    • @param json 请求json字符串
    • @param type 返回xml和json格式数据,默认xml,传入json返回json数据
    • @return URL 所代表远程资源的响应结果
      */
      public static String sendPost(String url, String param, String username, String password, String json, String type) { StringBuilder result = new StringBuilder();
      BufferedReader in = null;
      try {
      String wwwAuth = sendGet(url, param); //发起一次授权请求
      if (wwwAuth.startsWith(“WWW-Authenticate:”)) {
      wwwAuth = wwwAuth.replaceFirst(“WWW-Authenticate:”, “”);
      } else {
      return wwwAuth;
      }
      nc ++;
      String urlNameString = url + (StringUtils.isNotEmpty(param) ? “?” + param : “”);
      URL realUrl = new URL(urlNameString);
      // 打开和URL之间的连接
      HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection(); // 设置是否向connection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true connection.setDoOutput(true); // Read from the connection. Defaultis true. connection.setDoInput(true); // 默认是 GET方式 connection.setRequestMethod(POST); // Post 请求不能使用缓存 connection.setUseCaches(false); // 设置通用的请求属性 setRequestProperty(connection, wwwAuth,realUrl, username, password, POST, type); if (!StringUtils.isEmpty(json)) { byte[] writebytes =json.getBytes(); connection.setRequestProperty("Content-Length",String.valueOf(writebytes.length)); OutputStream outwritestream = connection.getOutputStream(); outwritestream.write(json.getBytes()); outwritestream.flush(); outwritestream.close(); } if (connection.getResponseCode() == 200 || connection.getResponseCode() == 201) { in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result.append(line); } } else { String errResult = formatResultInfo(connection, type); logger.info(errResult); return errResult; } nc = 0; } catch (Exception e) {
      nc = 0;
      throw new RuntimeException(e);
      } finally {
      try {
      if (in != null) in.close();
      } catch (Exception e2) {
      e2.printStackTrace();
      }
      }
      return result.toString();
      }
    /**
    • 向指定URL发送GET方法的请求
    • @param url 发送请求的URL
    • @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    • @param username 验证所需的用户名
    • @param password 验证所需的密码
    • @param type 返回xml和json格式数据,默认xml,传入json返回json数据
    • @return URL 所代表远程资源的响应结果
      */
      public static String sendGet(String url, String param, String username, String password, String type) { StringBuilder result = new StringBuilder();
      BufferedReader in = null;
      try {
      String wwwAuth = sendGet(url, param); //发起一次授权请求
      if (wwwAuth.startsWith(“WWW-Authenticate:”)) {
      wwwAuth = wwwAuth.replaceFirst(“WWW-Authenticate:”, “”);
      } else {
      return wwwAuth;
      }
      nc ++;
      String urlNameString = url + (StringUtils.isNotEmpty(param) ? “?” + param : “”);
      URL realUrl = new URL(urlNameString);
      // 打开和URL之间的连接
      HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection();
      // 设置通用的请求属性
      setRequestProperty(connection, wwwAuth,realUrl, username, password, GET, type);
      // 建立实际的连接
      // connection.connect();
      in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
      result.append(line);
      }
      nc = 0;
      } catch (Exception e) {
      nc = 0;
      throw new RuntimeException(e);
      } finally {
      try {
      if (in != null) in.close();
      } catch (Exception e2) {
      e2.printStackTrace();
      }
      }
      return result.toString();
      }
    /**
    • 生成授权信息
    • @param authorization 上一次调用返回401的WWW-Authenticate数据
    • @param username 用户名
    • @param password 密码
    • @return 授权后的数据, 应放在http头的Authorization里
    • @throws IOException 异常
      */
      private static String getAuthorization(String authorization, String uri, String username, String password, String method) throws IOException { uri = StringUtils.isEmpty(uri) ? “/” : uri;
      // String temp = authorization.replaceFirst(“Digest”, “”).trim();
      String temp = authorization.replaceFirst(“Digest”, “”).trim().replace(“MD5″,”\”MD5\””);
      // String json = “{\”” + temp.replaceAll(“=”, “\”:”).replaceAll(“,”, “,\””) + “}”;
      String json = withdrawJson(authorization);
      // String json = “{ \”realm\”: \”Wowza\”, \” domain\”: \”/\”, \” nonce\”: \”MTU1NzgxMTU1NzQ4MDo2NzI3MWYxZTZkYjBiMjQ2ZGRjYTQ3ZjNiOTM2YjJjZA==\”, \” algorithm\”: \”MD5\”, \” qop\”: \”auth\” }”; JSONObject jsonObject = JSON.parseObject(json);
      // String cnonce = new String(Hex.encodeHex(Digests.generateSalt(8))); //客户端随机数
      String cnonce = Digests.generateSalt2(8);
      String ncstr = (“00000000” + nc).substring(Integer.toString(nc).length()); //认证的次数,第一次是1,第二次是2…
      // String algorithm = jsonObject.getString(“algorithm”);
      String algorithm = jsonObject.getString(“algorithm”);
      String qop = jsonObject.getString(“qop”);
      String nonce = jsonObject.getString(“nonce”);
      String realm = jsonObject.getString(“realm”); String response = Digests.http_da_calc_HA1(username, realm, password,
      nonce, ncstr, cnonce, qop,
      method, uri, algorithm); //组成响应authorization
      authorization = “Digest username=\”” + username + “\”,” + temp;
      authorization += “,uri=\”” + uri
      + “\”,nc=\”” + ncstr
      + “\”,cnonce=\”” + cnonce
      + “\”,response=\”” + response+”\””;
      return authorization;
      }
    /**
    • 将返回的Authrization信息转成json
    • @param authorization authorization info
    • @return 返回authrization json格式数据 如:String json = “{ \”realm\”: \”Wowza\”, \” domain\”: \”/\”, \” nonce\”: \”MTU1NzgxMTU1NzQ4MDo2NzI3MWYxZTZkYjBiMjQ2ZGRjYTQ3ZjNiOTM2YjJjZA==\”, \” algorithm\”: \”MD5\”, \” qop\”: \”auth\” }”;
      */
      private static String withdrawJson(String authorization) {
      String temp = authorization.replaceFirst(“Digest”, “”).trim().replaceAll(“\””,””);
      // String noncetemp = temp.substring(temp.indexOf(“nonce=”), temp.indexOf(“uri=”));
      // String json = “{\”” + temp.replaceAll(“=”, “\”:”).replaceAll(“,”, “,\””) + “}”;
      String[] split = temp.split(“,”);
      Map map = new HashMap<>();
      Arrays.asList(split).forEach(c -> {
      String c1 = c.replaceFirst(“=”,”:”);
      String[] split1 = c1.split(“:”);
      map.put(split1[0].trim(), split1[1].trim());
      });
      return JSONObject.toJSONString(map);
      }
    /**
    • 向指定URL发送GET方法的请求
    • @param url 发送请求的URL
    • @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    • @return URL 所代表远程资源的响应结果
      */
      public static String sendGet(String url, String param) {
      StringBuilder result = new StringBuilder();
      BufferedReader in = null;
      try { String urlNameString = url + (StringUtils.isNotEmpty(param) ? "?" + param : ""); URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.connect(); //返回401时需再次用用户名和密码请求 //此情况返回服务器的 WWW-Authenticate 信息 if (((HttpURLConnection) connection).getResponseCode() == 401) { Map<String, List<String>> map = connection.getHeaderFields(); return "WWW-Authenticate:" + map.get("WWW-Authenticate").get(0); } in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result.append(line); } } catch (Exception e) {
      throw new RuntimeException(“get请求发送失败”,e);
      }
      // 使用finally块来关闭输入流
      finally {
      try {
      if (in != null) in.close();
      } catch (Exception e2) {
      e2.printStackTrace();
      }
      }
      return result.toString();
      }
    /**
    • HTTP set request property
      *
    • @param connection HttpConnection
    • @param wwwAuth 授权auth
    • @param realUrl 实际url
    • @param username 验证所需的用户名
    • @param password 验证所需的密码
    • @param method 请求方式
    • @param type 返回xml和json格式数据,默认xml,传入json返回json数据
      */
      private static void setRequestProperty(HttpURLConnection connection, String wwwAuth, URL realUrl, String username, String password, String method, String type)
      throws IOException { if (type != null && type.equals(“json”)) {
      // 返回json
      connection.setRequestProperty(“accept”, “application/json;charset=UTF-8”);
      connection.setRequestProperty(“Content-Type”,”application/json;charset=UTF-8″);
      connection.setRequestProperty(“connection”, “Keep-Alive”);
      connection.setRequestProperty(“user-agent”,
      “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)”);
      } else {
      // 返回xml
      if (!method.equals(GET)) {
      connection.setRequestProperty(“Content-Type”,”application/json;charset=UTF-8″);
      }
      connection.setRequestProperty(“accept”, “/“);
      connection.setRequestProperty(“connection”, “Keep-Alive”);
      // connection.setRequestProperty(“Cache-Control”, “no-cache”);
      connection.setRequestProperty(“user-agent”,
      “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)”); }
      //授权信息
      String authentication = getAuthorization(wwwAuth, realUrl.getPath(), username, password, method);
      connection.setRequestProperty(“Authorization”, authentication);
      }
    /**
    • 格式化请求返回信息,支持json和xml格式
    • @param connection HttpConnection
    • @param type 指定返回数据格式,json、xml,默认xml
    • @return 返回数据
      */
      private static String formatResultInfo(HttpURLConnection connection, String type) throws IOException {
      String result = “”;
      if (type != null && type.equals(“json”)) {
      result = String.format(“{\”errCode\”:%s, \”message\”:%s}”,connection.getResponseCode(),connection.getResponseMessage());
      } else {
      result = String.format(” “
      + ” ” + ” %d” + ” %s” + ” “,connection.getResponseCode(),connection.getResponseMessage());
      }
      return result;
      }

}

作者 east
Java 11月 8,2020

GAT1400人脸相关接口

人脸相关接口

批量人脸新增

1.接口概览

URI /VIID/Faces
方法 查询字符串 消息体 返回结果
POST 无 <FaceList> <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.9,字段定义参考A.9 。

3.返回消息

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/ Faces
请求方法 POST
请求头 参见请求参数
请求体 {     “FaceListObject”: {         “FaceObject”: [             {                 “FaceID”: “650100000011900000010220171219100515999830656599”,                 “InfoKind”: 1,                 “SourceID”: “66000000001190123456022017120110101000007”,                 “DeviceID”: “55000111221190000007”,                 “LeftTopX”: 1,                 “LeftTopY”: 1,                 “RightBtmX”: 1,                 “RightBtmY”: 1,                 “LocationMarkTime”: “19981230010000”,                 “FaceAppearTime”: “19981230010000”,                 “FaceDisAppearTime”: “19981230010000”,                 “IDType”: “111”,                 “IDNumber”: “1”,                 “Name”: “大华”,                 “UsedName”: “dahua”,                 “Alias”: “dahua”,                 “GenderCode”: “1”,                 “AgeUpLimit”: 10,                 “AgeLowerLimit”: 20,                 “EthicCode”: “01”,                 “NationalityCode”: “CHN”,                 “NativeCityCode”: “330108”,                 “ResidenceAdminDivision”: “330100”,                 “ChineseAccentCode”: “1”,                 “JobCategory”: “1”,                 “AccompanyNumber”: 1,                 “SkinColor”: “1”,                 “HairStyle”: “1”,                 “HairColor”: “1”,                 “FaceStyle”: “1”,                 “FacialFeature”: “1”,                 “PhysicalFeature”: “1”,                 “RespiratorColor”: “1”,                 “CapStyle”: “1”,                 “CapColor”: “1”,                 “GlassStyle”: “1”,                 “GlassColor”: “1”,                 “IsDriver”: 1,                 “IsForeigner”: 1,                 “PassportType”: “1”,                 “ImmigrantTypeCode”: “1”,                 “IsSuspectedTerrorist”: 1,                 “SuspectedTerroristNumber”: “1”,                 “IsCriminalInvolved”: 1,                 “CriminalInvolvedSpecilisationCode”: “1”,                 “BodySpeciallMark”: “1”,                 “CrimeMethod”: “1”,                 “CrimeCharacterCode”: “111”,                 “EscapedCriminalNumber”: “11111111111111111111111”,                 “IsDetainees”: 1,                 “DetentionHouseCode”: “111111111”,                 “DetaineesIdentity”: “1”,                 “DetaineesSpecialIdentity”: “1”,                 “MemberTypeCode”: “1”,                 “IsVictim”: 1,                 “VictimType”: “1”,                 “InjuredDegree”: “1”,                 “CorpseConditionCode”: “1”,                 “IsSuspiciousPerson”: 1,                 “Attitude”: 1,                 “Similaritydegree”: 1,                 “EyebrowStyle”: “1”,                 “NoseStyle”: “1”,                 “MustacheStyle”: “1”,                 “LipStyle”: “1”,                 “WrinklePouch”: “1”,                 “AcneStain”: “1”,                 “FreckleBirthmark”: “1”,                 “ScarDimple”: “1”,                 “OtherFeature”: “1”,                 “SubImageList”: {                     “SubImageInfoObject”: [                         {                             “ImageID”: “33020300001190000001022017122111111100001”,                             “EventSort”: 11,                             “DeviceID”: “33070299011190000253”,                             “StoragePath”: “http://10.33.6.108:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                             “Type”: “01”,                             “FileFormat”: “Jpeg”,                             “ShotTime”: “20170825032455”,                             “Width”: 437,                             “Height”: 350                         }                     ]                 }             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/Faces”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “650100000011900000010220171219100515999830656599”,                 “LocalTime”: “20171222162927”             }         ]     } }

批量人脸查询

1.接口概览

URI /VIID/Faces
方法 查询字符串 消息体 返回结果
GET Face属性键-值对 无 < FaceList>
备注  

2.查询字符串

查询指令为Face属性键-值对,特征属性定义参考A.9 。

3.返回结果

结构参考C.9,字段定义参考A.9。

4.示例

URI /VIID/ Faces
请求方法 GET
请求头 参见请求参数
查询参数 ?FaceID =650100000011900000010220171219100515999830656599 &InfoKind=1 &IDType=111 &LocationMarkTime=19981230010000…
响应体 {     “FaceListObject”: {         “FaceObject”: [             {                 “FaceID”: “650100000011900000010220171219100515999830656489”,                 “InfoKind”: 1,                 “SourceID”: “66000000001190123456022017120110101000007”,                 “DeviceID”: “55000111221190000007”,                 “LeftTopX”: 1,                 “LeftTopY”: 1,                 “RightBtmX”: 1,                 “RightBtmY”: 1,                 “LocationMarkTime”: “19981230010000”,                 “FaceAppearTime”: “19981230010000”,                 “FaceDisAppearTime”: “19981230010000”,                 “IDType”: “111”,                 “IDNumber”: “1”,                 “Name”: “大华”,                 “UsedName”: “dahua”,                 “Alias”: “dahua”,                 “GenderCode”: “1”,                 “AgeUpLimit”: 10,                 “AgeLowerLimit”: 20,                 “EthicCode”: “1”,                 “NationalityCode”: “CHN”,                 “NativeCityCode”: “330108”,                 “ResidenceAdminDivision”: “330100”,                 “ChineseAccentCode”: “1”,                 “JobCategory”: “1”,                 “AccompanyNumber”: 1,                 “SkinColor”: “1”,                 “HairStyle”: “1”,                 “HairColor”: “1”,                 “FaceStyle”: “1”,                 “FacialFeature”: “1”,                 “PhysicalFeature”: “1”,                 “RespiratorColor”: “1”,                 “CapStyle”: “1”,                 “CapColor”: “1”,                 “GlassStyle”: “1”,                 “GlassColor”: “1”,                 “IsDriver”: 1,                 “IsForeigner”: 1,                 “PassportType”: “1”,                 “ImmigrantTypeCode”: “1”,                 “IsSuspectedTerrorist”: 1,                 “SuspectedTerroristNumber”: “1”,                 “IsCriminalInvolved”: 1,                 “CriminalInvolvedSpecilisationCode”: “1”,                 “BodySpeciallMark”: “1”,                 “CrimeMethod”: “1”,                 “CrimeCharacterCode”: “111”,                 “EscapedCriminalNumber”: “11111111111111111111111”,                 “IsDetainees”: 1,                 “DetentionHouseCode”: “111111111”,                 “DetaineesIdentity”: “1”,                 “DetaineesSpecialIdentity”: “1”,                 “MemberTypeCode”: “1”,                 “IsVictim”: 1,                 “VictimType”: “1”,                 “InjuredDegree”: “1”,                 “CorpseConditionCode”: “1”,                 “IsSuspiciousPerson”: 1,                 “Attitude”: 1,                 “Similaritydegree”: 1,                 “EyebrowStyle”: “1”,                 “NoseStyle”: “1”,                 “MustacheStyle”: “1”,                 “LipStyle”: “1”,                 “WrinklePouch”: “1”,                 “AcneStain”: “1”,                 “FreckleBirthmark”: “1”,                 “ScarDimple”: “1”,                 “OtherFeature”: “1”,                 “SubImageList”: {                     “SubImageInfoObject”: [                         {                             “ImageID”: “33020300001190000001022017122111111100001”,                             “EventSort”: 1,                             “DeviceID”: “33070299011190000253”,                             “StoragePath”: “http://172.26.8.236:11180/pictures//07314a17009347ab86d1d4a9b52abd1d.jpg”,                             “Type”: “11”,                             “FileFormat”: “Jpeg”,                             “ShotTime”: “20171221104550”,                             “Width”: 358,                             “Height”: 441                         }                     ]                 }             }         ]     } }

批量人脸修改

1.   接口概览

URI /VIID/Faces
方法 查询字符串 消息体 返回结果
PUT 无 <FaceList> <ResponseStatusList>
备注 消息体中FaceID必填,否则操作无效

2.消息体特征参数

消息体结构参考C.9,字段定义参考A.9 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Faces
请求方法 PUT
请求头 参见请求参数
请求体 {     “FaceListObject”: {         “FaceObject”: [             {                 “FaceID”: “650100000011900000010220171219100515999830656489”,                 “InfoKind”: 2,                 “LeftTopX”: 10,                 “LeftTopY”: 10,                 “RightBtmX”: 10,                 “RightBtmY”: 10,                 “NativeCityCode”: “330109”,                 “ResidenceAdminDivision”: “330101”,                 “ChineseAccentCode”: “2”,                 “JobCategory”: “2”,                 “AccompanyNumber”: 2,                 “SkinColor”: “2”,                 “HairStyle”: “2”,                 “HairColor”: “2”,                 “FaceStyle”: “2”,                 “FacialFeature”: “2”,                 “PhysicalFeature”: “2” …             }         ]     } }            
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/Faces”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “650100000011900000010220171219100515999830656489”,                 “LocalTime”: “20171223094319”             }         ]     } }

批量人脸删除

1.接口概览

URI /VIID/Faces
方法 请求参数 消息体 返回结果
DELETE 键为IDList,值为用英文半角分号”,”分隔的字符串 无 <ResponseStatusList>
备注  

2.请求参数

IDList=<FaceID >,< FaceID >。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/ Faces
请求方法 DELETE
请求头 参见请求参数
请求参数 ?IDList=650100000011900000010220171219100515999830656489,650100000011900000010220171219100515999830656490  
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/Faces”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “650100000011900000010220171219100515999830656489”,                 “LocalTime”: “20171223094319”             },             {                 “RequestURL”: “http://localhost:8080/VIID/Faces”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “650100000011900000010220171219100515999830656490”,                 “LocalTime”: “20171223094319”             }         ]     } }

单个人脸查询

1.接口概览

URI /VIID/Faces/<FaceID>
方法 请求参数 消息体 返回结果
GET 无 无 <Face>
备注  

2.   请求参数

无

3.返回结果

         结构参考C.9,字段定义参考A.9。

4.示例

URI /VIID/Faces/650100000011900000010220171219100515999830656489
请求方法 GET
请求头 参见请求参数
请求体 无
响应体 {     “FaceObject”: {         “FaceID”: “650100000011900000010220171219100515999830656489”,         “InfoKind”: 2,         “SourceID”: “66000000001190123456022017120110101000007”,         “DeviceID”: “55000111221190000007”,         “LeftTopX”: 10,         “LeftTopY”: 10,         “RightBtmX”: 10,         “RightBtmY”: 10,         “LocationMarkTime”: “19981230010000”,         “FaceAppearTime”: “19981230010000”,         “FaceDisAppearTime”: “19981230010000”,         “IDType”: “111”,         “IDNumber”: “1”,         “Name”: “大华”,         “UsedName”: “dahua”,         “Alias”: “dahua”,         “GenderCode”: “1”,         “AgeUpLimit”: 10,         “AgeLowerLimit”: 20,         “EthicCode”: “1”,         “NationalityCode”: “CHN”,         “NativeCityCode”: “330109”,         “ResidenceAdminDivision”: “330101”,         “ChineseAccentCode”: “2”,         “JobCategory”: “2”,         “AccompanyNumber”: 2,         “SkinColor”: “2”,         “HairStyle”: “2”,         “HairColor”: “2”,         “FaceStyle”: “2”,         “FacialFeature”: “2”,         “PhysicalFeature”: “2”,         “RespiratorColor”: “1”,         “CapStyle”: “1”,         “CapColor”: “1”,         “GlassStyle”: “1”,         “GlassColor”: “1”,         “IsDriver”: 1,         “IsForeigner”: 1,         “PassportType”: “1”,         “ImmigrantTypeCode”: “1”,         “IsSuspectedTerrorist”: 1,         “SuspectedTerroristNumber”: “1”,         “IsCriminalInvolved”: 1,         “CriminalInvolvedSpecilisationCode”: “1”,         “BodySpeciallMark”: “1”,         “CrimeMethod”: “1”,         “CrimeCharacterCode”: “111”,         “EscapedCriminalNumber”: “11111111111111111111111”,         “IsDetainees”: 1,         “DetentionHouseCode”: “111111111”,         “DetaineesIdentity”: “1”,         “DetaineesSpecialIdentity”: “1”,         “MemberTypeCode”: “1”,         “IsVictim”: 1,         “VictimType”: “1”,         “InjuredDegree”: “1”,         “CorpseConditionCode”: “1”,         “IsSuspiciousPerson”: 1,         “Attitude”: 1,         “Similaritydegree”: 1,         “EyebrowStyle”: “1”,         “NoseStyle”: “1”,         “MustacheStyle”: “1”,         “LipStyle”: “1”,         “WrinklePouch”: “1”,         “AcneStain”: “1”,         “FreckleBirthmark”: “1”,         “ScarDimple”: “1”,         “OtherFeature”: “1”,         “SubImageList”: {             “SubImageInfoObject”: [                 {                     “ImageID”: “33020300001190000001022017122111111100001”,                     “EventSort”: 4,                     “DeviceID”: “55220299011190000253”,                     “StoragePath”: “http://localhost:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                     “Type”: “01”,                     “FileFormat”: “Jpeg”,                     “ShotTime”: “20170925032455”,                     “Width”: 437,                     “Height”: 350                 }             ]         }     } }

单个人脸修改

1.接口概览

URI /VIID/Faces/<FaceID>
方法 请求参数 消息体 返回结果
PUT  无 <Face> <ResponseStatus>
备注  

2.消息体特征参数

         结构参考C.9,字段定义参考A.9。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Faces/650100000011900000010220171219100515999830656489
请求方法 PUT
请求头 参见请求参数
请求体 {     “FaceObject”: {         “FaceID”: “650100000011900000010220171219100515999830656489”,         “LeftTopX”: 10,         “LeftTopY”: 10,         “RightBtmX”: 10,         “RightBtmY”: 10 …     } }
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://localhost:8080 /VIID/Faces/650100000011900000010220171219100515999830656589”,         “StatusCode”: 0,         “StatusString”: “正常”,         “Id”: “650100000011900000010220171219100515999830656589”,         “LocalTime”: “20171223135905”     } }

单个人脸删除

1.接口概览

URI /VIID/Faces/<FaceID>
方法 请求参数 消息体 返回结果
DELETE  无 无 <ResponseStatus>
备注  

2.请求参数

无

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Faces/650100000011900000010220171219100515999830656489
请求方法 DELETE
请求头 参见请求参数
请求体  
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://localhost:8080 /VIID/Faces/650100000011900000010220171219100515999830656489”,         “StatusCode”: 0,         “StatusString”: “正常”,         “Id”: “650100000011900000010220171219100515999830656489”,         “LocalTime”: “20171223135905”     } }
作者 east
Java 11月 8,2020

GAT1400视图库卡口相关接口

卡口相关接口

卡口查询

1.接口概览

URI /VIID/Tollgates
方法 查询字符串 消息体 返回结果
GET Tollgate属性键-值对 无 <TollgateList>
备注  

2.查询字符串

查询指令为Tollgate属性键-值对,特征属性定义参考A.3 。

3.返回结果

         结构参考C.3,字段定义参考A.3。

4.示例

URI /VIID/Tollgates
请求方法 GET
请求头 参见请求参数
查询参数 ?TollgateID=65010000001210000080 & Name =huanggengxin & Longitude =13.145678 &…
响应体 {     “TollgateListObject”: {         “TollgateObject”: [             {                 “TollgateID”: “65010000001210000080”,                 “Name”: “huanggengxin”,                 “Longitude”: 13.145678,                 “Latitude”: 14.253654,                 “Place”: “jiedao”,                 “Status”: 1,                 “TollgateCat”: “30”,                 “TollgateCat2”: 80,                 “LaneNum”: 7,                 “OrgCode”: 650095768654,                 “ActiveTime”: “20171111122324”             }         ]     } }

车道相关接口

查询车道

1.接口概览

URI /VIID/Lanes
方法 查询字符串 消息体 返回结果
GET Lane 属性键-值对 无 <LaneList>
备注 Lane、LaneList 的定义应符合 C.4中的规定。

2.消息体特征参数

Lane 属性键-值对,字段定义参考A.4。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Lanes
请求方法 GET
请求头 参见请求参数
查询参数 ?TollgateID=65010000001210000001 &LaneId=4 &LaneNo=1&…
响应体 {     “LaneListObject”: {         “LaneObject”: [             {                 “TollgateID”: “65010000001210000001”,                 “LaneId”: 4,                 “LaneNo”: 1,                 “Name”: “123123123”,                 “Direction”: 1,                 “Desc”: “123123123”,                 “MaxSpeed”: 120,                 “CityPass”: 1,                 “ApeID”: “65010000001190000001”             }         ]     } }

机动车相关接口

批量机动车新增

1.接口概览

URI /VIID/MotorVehicles
方法 查询字符串 消息体 返回结果
POST 无 <MotorVehicleList > <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.10,字段定义参考A.10。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/MotorVehicles
请求方法 POST
请求头 参见请求参数
请求体 {     “MotorVehicleListObject”: {         “MotorVehicleObject”: [             {                 “MotorVehicleID”: “330101010012100000010220171018080608022060269899”,                 “InfoKind”: 1,                 “SourceID”: “33010101001210000001022017101808060802206”,                 “TollgateID”: “2141245”,                 “DeviceID”: “65010000001190000001”,                 “StorageUrl1”: “9527/upload/122/20130901/00/0524-NAS221-50151415-AS.jpg”,                 “StorageUrl3”: “3”,                 “StorageUrl5”: “1”,                 “LeftTopX”: 1,                 “LeftTopY”: 2,                 “RightBtmX”: 3,                 “RightBtmY”: 4,                 “LaneNo”: 1,                 “HasPlate”: “1”,                 “PlateClass”: “99”,                 “PlateColor”: “99”,                 “PlateNo”: “苏NF5676”,                 “PlateNoAttach”: “1”,                 “PlateDescribe”: “12”,                 “IsDecked”: “1”,                 “IsAltered”: “1”,                 “IsCovered”: “1”,                 “Speed”: 8,                 “Direction”: “0”,                 “DrivingStatusCode”: “1”,                 “UsingPropertiesCode”: “1”,                 “VehicleClass”: “1”,                 “VehicleBrand”: “1”,                 “VehicleModel”: “1”,                 “VehicleStyles”: “12”,                 “VehicleLength”: 0,                 “VehicleWidth”: 23,                 “VehicleHeight”: 31,                 “VehicleColor”: “1”,                 “VehicleColorDepth”: “2”,                 “VehicleHood”: “4”,                 “VehicleTrunk”: “5”,                 “VehicleWheel”: “1”,                 “WheelPrintedPattern”: “1”,                 “VehicleWindow”: “1”,                 “VehicleRoof”: “1”,                 “VehicleDoor”: “1”,                 “SideOfVehicle”: “1”,                 “CarOfVehicle”: “1”,                 “RearviewMirror”: “1”,                 “VehicleChassis”: “1”,                 “VehicleShielding”: “1”,                 “FilmColor”: “1”,                 “IsModified”: “1”,                 “HitMarkInfo”: “1”,                 “VehicleBodyDesc”: “1”,                 “VehicleFrontItem”: “1”,                 “DescOfFrontItem”: “1”,                 “VehicleRearItem”: “4”,                 “DescOfRearItem”: “3”,                 “NumOfPassenger”: 2,                 “PassTime”: “20160912220107”,                 “NameOfPassedRoad”: “12”,                 “IsSuspicious”: “1”,                 “PlateReliability”: “1”,                 “PlateCharReliability”: “苏-80,B-90,1-90,2-88,3-90,4-67,5-87”,                 “BrandReliability”: “1”,                 “SubImageList”: {                     “SubImageInfoObject”: [                         {                             “ImageID”: “33020300001190000001022017122111111100001”,                             “EventSort”: 4,                             “DeviceID”: “55220299011190000253”,                             “StoragePath”: “http://localhost:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                             “Type”: “01”,                             “FileFormat”: “Jpeg”,                             “ShotTime”: “20170925032455”,                             “Width”: 437,                             “Height”: 350                         }                     ]                 }             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/MotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101010012100000010220171018080608022060269899”,                 “LocalTime”: “20171222104143”             }         ]     } }

批量机动车查询

1.接口概览

URI /VIID/MotorVehicles
方法 查询字符串 消息体 返回结果
GET MotorVehicle属性键-值对 无 < MotorVehicleList>
备注  

2. 查询字符串

查询指令为MotorVehicle属性键-值对,特征属性定义参考A.10 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/MotorVehicles
请求方法 GET
请求头 参见请求参数
查询参数 ?MotorVehicleID=330101010012100000010220171018080608022060269895 &InfoKind=1 &SourceID=33010101001210000001022017101808060802206 &DeviceID=65010000001190000001&…
响应体 {     “MotorVehicleListObject”: {         “MotorVehicleObject”: [             {                 “MotorVehicleID”: “330101010012100000010220171018080608022060269895”,                 “InfoKind”: 1,                 “SourceID”: “33010101001210000001022017101808060802206”,                 “DeviceID”: “65010000001190000001”,                 “StorageUrl1”: “9527/upload/122/20130901/00/0524-NAS221-50151415-AS.jpg”,                 “StorageUrl3”: “3”,                 “StorageUrl5”: “1”,                 “LeftTopX”: 1,                 “LeftTopY”: 2,                 “RightBtmX”: 3,                 “RightBtmY”: 4,                 “LaneNo”: 1,                 “HasPlate”: “1”,                 “PlateClass”: “99”,                 “PlateColor”: “99”,                 “PlateNo”: “苏NF5676”,                 “PlateNoAttach”: “1”,                 “PlateDescribe”: “12”,                 “IsDecked”: “1”,                 “IsAltered”: “1”,                 “IsCovered”: “1”,                 “Speed”: 8,                 “Direction”: “9”,                 “DrivingStatusCode”: “1”,                 “VehicleClass”: “X99”,                 “VehicleBrand”: “1”,                 “VehicleModel”: “1”,                 “VehicleStyles”: “12”,                 “VehicleLength”: 0,                 “VehicleColor”: “1”,                 “VehicleColorDepth”: “2”,                 “VehicleHood”: “4”,                 “VehicleTrunk”: “5”,                 “VehicleWheel”: “1”,                 “WheelPrintedPattern”: “1”,                 “VehicleWindow”: “1”,                 “VehicleRoof”: “1”,                 “VehicleDoor”: “1”,                 “SideOfVehicle”: “1”,                 “CarOfVehicle”: “1”,                 “RearviewMirror”: “1”,                 “VehicleChassis”: “1”,                 “VehicleShielding”: “1”,                 “FilmColor”: “1”,                 “HitMarkInfo”: “1”,                 “VehicleBodyDesc”: “1”,                 “VehicleFrontItem”: “1”,                 “DescOfFrontItem”: “1”,                 “VehicleRearItem”: “4”,                 “DescOfRearItem”: “3”,                 “PassTime”: “20160912220107”,                 “NameOfPassedRoad”: “12”,                 “IsSuspicious”: “1”,                 “SafetyBelt”: 0,                 “PlateReliability”: “1”,                 “PlateCharReliability”: “苏-80,B-90,1-90,2-88,3-90,4-67,5-87”,                 “BrandReliability”: “1”,                 “SubImageList”: {                     “SubImageInfoObject”: [                         {                             “ImageID”: “33020300001190000001022017122111111100001”,                             “EventSort”: 1,                             “DeviceID”: “33070299011190000253”,                             “StoragePath”: “http://localhost:8080/pictures//07314a17009347ab86d1d4a9b52abd1d.jpg”,                             “Type”: “11”,                             “FileFormat”: “Jpeg”,                             “ShotTime”: “20171221104550”,                             “Width”: 100,                             “Height”: 100                         }                     ]                 }             }         ]     } }

批量机动车修改

1.接口概览

URI /VIID/MotorVehicles
方法 查询字符串 消息体 返回结果
PUT 无 <MotorVehicleList > <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.10,字段定义参考A.10 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/MotorVehicles
请求方法 PUT
请求头 参见请求参数
请求体 {     “MotorVehicleListObject”: {         “MotorVehicleObject”: [             {                 “MotorVehicleID”: “330101010012100000010220171018080608022060269899”,                 “InfoKind”: 1,                 “SourceID”: “33010101001210000001022017101808060802206”,                 “TollgateID”: “2141245”,                 “DeviceID”: “65010000001190000001”,                 “StorageUrl1”: “9527/upload/122/20130901/00/0524-NAS221-50151415-AS.jpg”,                 “StorageUrl3”: “3”,                 “StorageUrl5”: “1”,                 “LeftTopX”: 1,                 “LeftTopY”: 2,                 “RightBtmX”: 3,                 “RightBtmY”: 4,                 “LaneNo”: 1,                 “HasPlate”: “1”,                 “PlateClass”: “99”,                 “PlateColor”: “99”,                 “PlateNo”: “京A66666” …….             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/MotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101010012100000010220171018080608022060269899”,                 “LocalTime”: “20171223102656”             }         ]     } }

批量机动车删除

1.   接口概览

URI /VIID/MotorVehicles
方法 请求参数 消息体 返回结果
DELETE 键为IDList,值为用英文半角分号”,”分隔的字符串 无 <ResponseStatusList>
备注  

2. 请求参数

IDList=<MotorVehicleID>,<MotorVehicleID>。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/MotorVehicles
请求方法 DELETE
请求头 参见请求参数
请求参数 ?IDList=330101010012100000010220171018080608022060269895, 330101010012100000010220171018080608022060269899
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:9080/VIID/MotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “LocalTime”: “20171223103213”             },             {                 “RequestURL”: “http://localhost:9080/VIID/MotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “LocalTime”: “20171223103213”             }         ]     } }

单个机动车查询

1.接口概览

URI /VIID/MotorVehicles/<ID>
方法 查询字符串 消息体 返回结果
GET 无 无 < MotorVehicle>
备注  

2.返回结果

         结构参考C.25,字段定义参考A.26。

3.示例

URI /VIID/MotorVehicles/330203000011900000010220171218150122000010200005
请求方法 GET
请求头 参见请求参数
响应体 {     “MotorVehicleObject”: {         “MotorVehicleID”: “330203000011900000010220171218150122000010200005”,         “InfoKind”: 1,         “SourceID”: “33020300001190000001022017122111111100001”,         “DeviceID”: “65010000001190000001”,         “StorageUrl1”: “http://localhost:8080/1.jpg”,         “StorageUrl2”: “http://localhost:8080/2.jpg”,         “StorageUrl3”: “http://localhost:8080/3.jpg”,         “StorageUrl4”: “http://localhost:8080/4.jpg”,         “StorageUrl5”: “http://localhost:8080/5.jpg”,         “LeftTopX”: 1,         “LeftTopY”: 2,         “RightBtmX”: 3,         “RightBtmY”: 4,         “MarkTime”: “20171102101241”,         “DisappearTime”: “20171102101241”,         “LaneNo”: 1,         “HasPlate”: “1”,         “PlateClass”: “99”,         “PlateColor”: “1”,         “PlateNo”: “京A66666”,         “PlateNoAttach”: “京A88888”,         “PlateDescribe”: “这是一个车牌号的描述”,         “IsDecked”: “1”,         “IsAltered”: “1”,         “IsCovered”: “1”,         “Speed”: 80,         “Direction”: “9”,         “DrivingStatusCode”: “01”,         “VehicleClass”: “X99”,         “VehicleBrand”: “0”,         “VehicleModel”: “这是车辆型号描述”,         “VehicleStyles”: “2000年”,         “VehicleLength”: 12345,         “VehicleColor”: “1”,         “VehicleColorDepth”: “1”,         “VehicleHood”: “这是车前盖的描述”,         “VehicleTrunk”: “这是车后盖的描述”,         “VehicleWheel”: “这是车轮的描述”,         “WheelPrintedPattern”: “11”,         “VehicleWindow”: “这是车窗的描述”,         “VehicleRoof”: “这是车顶的描述”,         “VehicleDoor”: “这是车门的描述”,         “SideOfVehicle”: “这是车侧的描述”,         “CarOfVehicle”: “这是车厢的描述”,         “RearviewMirror”: “这是后视镜的描述”,         “VehicleChassis”: “这是底盘的描述”,         “VehicleShielding”: “这是遮挡的描述”,         “FilmColor”: “1”,         “HitMarkInfo”: “1”,         “VehicleBodyDesc”: “这是车身的描述”,         “VehicleFrontItem”: “1”,         “DescOfFrontItem”: “这是车前部物品描述”,         “VehicleRearItem”: “1”,         “DescOfRearItem”: “这是车后部物品描述”,         “PassTime”: “20171218150122”,         “NameOfPassedRoad”: “这是经过道路的名称描述”,         “IsSuspicious”: “1”,         “Sunvisor”: 1,         “SafetyBelt”: 1,         “Calling”: 1,         “PlateReliability”: “80”,         “PlateCharReliability”: “苏-80,B-90,1-90,2-88,3-90,4-67,5-87”,         “BrandReliability”: “88”,         “SubImageList”: {             “SubImageInfoObject”: [                 {                     “ImageID”: “33020300001190000001022017122111111100001”,                     “EventSort”: 4,                     “DeviceID”: “55220299011190000253”,                     “StoragePath”: “http://localhost:8080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                     “Type”: “01”,                     “FileFormat”: “Jpeg”,                     “ShotTime”: “20170925032455”,                     “Width”: 437,                     “Height”: 350                 }             ]         }     } }

单个机动车修改

1.接口概览

URI /VIID/MotorVehicles/<ID>
方法 查询字符串 消息体 返回结果
PUT 无 <MotorVehicle> <ResponseStatus>
备注  

2.消息体特征参数

消息体结构参考C.10,字段定义参考A.10 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/MotorVehicles/330203000011900000010220171218150122000010200005
请求方法 PUT
请求头 参见请求参数
请求体 {     “MotorVehicleObject”: {         “InfoKind”: 1,         “SourceID”: “33010101001210000001022017101808060802206”,         “TollgateID”: “2141245”,         “DeviceID”: “65010000001190000001”,         “StorageUrl1”: “9527/upload/122/20130901/00/0524-NAS221-50151415-AS.jpg”,         “StorageUrl3”: “3”,         “StorageUrl5”: “1”,         “LeftTopX”: 1,         “LeftTopY”: 2,         “RightBtmX”: 3,         “RightBtmY”: 4,         “LaneNo”: 1,         “HasPlate”: “1”,         “PlateClass”: “99”,         “PlateColor”: “99”,         “PlateNo”: “苏NF5676”,         “PlateNoAttach”: “1”,         “PlateDescribe”: “12”,         “IsDecked”: “1”,         “IsAltered”: “1”,         “IsCovered”: “1”,         “Speed”: 8,         “Direction”: “0”,         “DrivingStatusCode”: “1”,         “UsingPropertiesCode”: “1”,         “VehicleClass”: “1”,         “VehicleBrand”: “1”,         “VehicleModel”: “1”,         “VehicleStyles”: “12”,         “VehicleLength”: 0,         “VehicleWidth”: 23,         “VehicleHeight”: 31,         “VehicleColor”: “1”,         “VehicleColorDepth”: “2”,         “VehicleHood”: “4”,         “VehicleTrunk”: “5”,         “VehicleWheel”: “1”,         “WheelPrintedPattern”: “1”,         “VehicleWindow”: “1”,         “VehicleRoof”: “1”,         “VehicleDoor”: “1”,         “SideOfVehicle”: “1”,         “CarOfVehicle”: “1”,         “RearviewMirror”: “1”,         “VehicleChassis”: “1”,         “VehicleShielding”: “1”,         “FilmColor”: “1”,         “IsModified”: “1”,         “HitMarkInfo”: “1”,         “VehicleBodyDesc”: “1”,         “VehicleFrontItem”: “1”,         “DescOfFrontItem”: “1”,         “VehicleRearItem”: “4”,         “DescOfRearItem”: “3”,         “NumOfPassenger”: 2,         “PassTime”: “20160912220107”,         “NameOfPassedRoad”: “12”,         “IsSuspicious”: “1”,         “PlateReliability”: “1”,         “PlateCharReliability”: “苏-80,B-90,1-90,2-88,3-90,4-67,5-87”,         “BrandReliability”: “1”,         “SubImageList”: {             “SubImageInfoObject”: [                 {                     “ImageID”: “33020300001190000001022017122111111100001”,                     “EventSort”: 4,                     “DeviceID”: “55220299011190000253”,                     “StoragePath”: “http://localhost:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                     “Type”: “01”,                     “FileFormat”: “Jpeg”,                     “ShotTime”: “20170925032455”,                     “Width”: 437,                     “Height”: 350                 }             ]         }     } }
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://localhost:8080/VIID/MotorVehicles/330203000011900000010220171218150122000010200005”,         “StatusCode”: 0,         “StatusString”: “正常”,         “Id”: “330203000011900000010220171218150122000010200005”,         “LocalTime”: “20171223135728”     } }

单个机动车删除

1.接口概览

URI /VIID/MotorVehicles/<ID>
方法 查询字符串 消息体 返回结果
DELETE 无 无 <ResponseStatus>
备注  

2.返回结果

         结构参考C.25,字段定义参考A.26。

3.示例

URI /VIID/DELETE/330203000011900000010220171218150122000010200005
请求方法 DELETE
请求头 参见请求参数
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://172.6.3.107/VIID/MotorVehicles/330203000011900000010220171218150122000010200005”,         “StatusCode”: 0,         “StatusString”: “正常”,         “LocalTime”: “20171223140026”     } }

非机动车相关接口

批量非机动车新增

1.接口概览

URI /VIID/NonMotorVehicles
方法 查询字符串 消息体 返回结果
POST 无 <NonMotorVehicleList > <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考 C.11,字段定义参考A.11 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/NonMotorVehicles
请求方法 POST
请求头 参见请求参数
请求体 {     “NonMotorVehicleListObject”: {         “NonMotorVehicleObject”: [             {                 “NonMotorVehicleID”: “330101010012100000010220171018080608022060369856”,                 “InfoKind”: 1,                 “SourceID”: “33010101001210000001022017101808060802206”,                 “DeviceID”: “65010000001190000001”,                 “LeftTopX”: 4,                 “LeftTopY”: 2,                 “RightBtmX”: 21,                 “RightBtmY”: 23,                 “HasPlate”: “1”,                 “PlateClass”: “01”,                 “PlateColor”: “2”,                 “PlateNo”: “京A66666”,                 “PlateNoAttach”: “312”,                 “PlateDescribe”: “312”,                 “IsDecked”: “1”,                 “IsAltered”: “1”,                 “IsCovered”: “1”,                 “DrivingStatusCode”: “5”,                 “UsingPropertiesCode”: “152”,                 “VehicleBrand”: “2”,                 “VehicleType”: “1”,                 “VehicleLength”: 12,                 “VehicleWidth”: 45,                 “VehicleHeight”: 45,                 “VehicleColor”: “2”,                 “VehicleHood”: “44”,                 “VehicleTrunk”: “55”,                 “VehicleWheel”: “33”,                 “WheelPrintedPattern”: “2”,                 “VehicleWindow”: “013”,                 “VehicleRoof”: “1”,                 “VehicleDoor”: “1”,                 “SideOfVehicle”: “1”,                 “CarOfVehicle”: “1”,                 “RearviewMirror”: “1”,                 “VehicleChassis”: “1”,                 “VehicleShielding”: “1”,                 “FilmColor”: “1”,                 “SubImageList”: {                     “SubImageInfoObject”: [                         {                             “ImageID”: “33020300001190000001022017122111111100001”,                             “EventSort”: 4,                             “DeviceID”: “55220299011190000253”,                             “StoragePath”: “http://localhost:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                             “Type”: “01”,                             “FileFormat”: “Jpeg”,                             “ShotTime”: “20170925032455”,                             “Width”: 437,                             “Height”: 350                         }                     ]                 }             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost/VIID/NonMotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101010012100000010220171018080608022060369856”,                 “LocalTime”: “20171222104652”             }         ]     } }

批量非机动车查询

1.接口概览

URI /VIID/NonMotorVehicles
方法 查询字符串 消息体 返回结果
GET NonMotorVehicle属性键-值对 无 <NonMotorVehicleList>
备注  

2.查询字符串

查询指令为NonMotorVehicle属性键-值对,特征属性定义参考A.11 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/NonMotorVehicles
请求方法 GET
请求头 参见请求参数
查询参数 ?NonMotorVehicleID=330101010012100000010220171018080608022060269856 &LeftTopX=4&…
响应体 {     “NonMotorVehicleListObject”: {         “NonMotorVehicleObject”: [             {                 “NonMotorVehicleID”: “330101010012100000010220171018080608022060269856”,                 “InfoKind”: 1,                 “SourceID”: “33010101001210000001022017101808060802206”,                 “DeviceID”: “33010101001210000001”,                 “LeftTopX”: 4,                 “LeftTopY”: 2,                 “RightBtmX”: 21,                 “RightBtmY”: 23,                 “HasPlate”: “1”,                 “PlateClass”: “1”,                 “PlateColor”: “2”,                 “PlateNo”: “312”,                 “PlateNoAttach”: “312”,                 “PlateDescribe”: “312”,                 “IsDecked”: “1”,                 “IsAltered”: “1”,                 “IsCovered”: “1”,                 “DrivingStatusCode”: “5”,                 “UsingPropertiesCode”: “152”,                 “VehicleBrand”: “2”,                 “VehicleType”: “1”,                 “VehicleLength”: 12,                 “VehicleWidth”: 45,                 “VehicleHeight”: 45,                 “VehicleColor”: “2”,                 “VehicleHood”: “44”,                 “VehicleTrunk”: “55”,                 “VehicleWheel”: “33”,                 “WheelPrintedPattern”: “2”,                 “VehicleWindow”: “013”,                 “VehicleRoof”: “1”,                 “VehicleDoor”: “1”,                 “SideOfVehicle”: “1”,                 “CarOfVehicle”: “1”,                 “RearviewMirror”: “1”,                 “VehicleChassis”: “1”,                 “VehicleShielding”: “1”,                 “FilmColor”: 1             }         ]     } }

批量非机动车修改

1.接口概览

URI /VIID/NonMotorVehicles
方法 查询字符串 消息体 返回结果
PUT 无 <NonMotorVehicleList > <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.11,字段定义参考A.11 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/NonMotorVehicles
请求方法 PUT
请求头 参见请求参数
请求体 {     “NonMotorVehicleListObject”: {         “NonMotorVehicleObject”: [             {                 “NonMotorVehicleID”: “330101010012100000010220171018080608022060369856”,                 “InfoKind”: 1,                 “SourceID”: “33010101001210000001022017101808060802206”,                 “DeviceID”: “65010000001190000001”,                 “LeftTopX”: 4,                 “LeftTopY”: 2,                 “RightBtmX”: 21,                 “RightBtmY”: 23,                 “HasPlate”: “1”,                 “PlateClass”: “01”,                 “PlateColor”: “2”,                 “PlateNo”: “京A66666”,                 “PlateNoAttach”: “312”,                 “PlateDescribe”: “312”,                 “IsDecked”: “1”,                 “IsAltered”: “1”,                 “IsCovered”: “1”,                 “DrivingStatusCode”: “5”,                 “UsingPropertiesCode”: “152”,                 “VehicleBrand”: “2”,                 “VehicleType”: “1”,                 “VehicleLength”: 12,                 “VehicleWidth”: 45,                 “VehicleHeight”: 45,                 “VehicleColor”: “2”,                 “VehicleHood”: “44”,                 “VehicleTrunk”: “55”,                 “VehicleWheel”: “33”,                 “WheelPrintedPattern”: “2” …             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost/VIID/NonMotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101010012100000010220171018080608022060369856”,                 “LocalTime”: “20171222104652”             }         ]     } }

批量非机动车删除

1.接口概览

URI /VIID/NonMotorVehicles
方法 查询字符串 消息体 返回结果
DELETE 键为IDList,值为用英文半角分号”,”分隔的字符串 无 <ResponseStatusList>
备注  

2.请求参数

IDList=<NonMotorVehicleID>,<NonMotorVehicleID>。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/NonMotorVehicles
请求方法 DELETE
请求头 参见请求参数
请求参数 ?IDList=330101010012100000010220171018080608022060369856  
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:9080/VIID/NonMotorVehicles”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “LocalTime”: “20171225095830”             }         ]     } }

单个非机动车查询

1.接口概览

URI /VIID/NonMotorVehicles/<ID>
方法 查询字符串 消息体 返回结果
GET 无 无 < NonMotorVehicle >
备注  

2.返回结果

         结构参考C.25,字段定义参考A.26。

3.示例

URI /VIID/NonMotorVehicles/330101010012100000010220171018080608022060369856
请求方法 GET
请求头 参见请求参数
响应体 {     “NonMotorVehicleObject”: {         “NonMotorVehicleID”: “330101010012100000010220171018080608022060369856”,         “InfoKind”: 1,         “SourceID”: “33010101001210000001022017101808060802206”,         “DeviceID”: “65010000001190000001”,         “LeftTopX”: 4,         “LeftTopY”: 2,         “RightBtmX”: 21,         “RightBtmY”: 23,         “HasPlate”: “1”,         “PlateClass”: “01”,         “PlateColor”: “2”,         “PlateNo”: “京A66666”,         “PlateNoAttach”: “312”,         “PlateDescribe”: “312”,         “IsDecked”: “1”,         “IsAltered”: “1”,         “IsCovered”: “1”,         “DrivingStatusCode”: “5”,         “UsingPropertiesCode”: “152”,         “VehicleBrand”: “2”,         “VehicleType”: “1”,         “VehicleLength”: 12,         “VehicleWidth”: 45,         “VehicleHeight”: 45,         “VehicleColor”: “2”,         “VehicleHood”: “44”,         “VehicleTrunk”: “55”,         “VehicleWheel”: “33”,         “WheelPrintedPattern”: “2”,         “VehicleWindow”: “013”,         “VehicleRoof”: “1”,         “VehicleDoor”: “1”,         “SideOfVehicle”: “1”,         “CarOfVehicle”: “1”,         “RearviewMirror”: “1”,         “VehicleChassis”: “1”,         “VehicleShielding”: “1”,         “FilmColor”: 1     } }

单个非机动车修改

1.接口概览

URI /VIID/NonMotorVehicles/<ID>
方法 查询字符串 消息体 返回结果
PUT 无 <NonMotorVehicle > <ResponseStatus>
备注  

2.消息体特征参数

消息体结构参考C.11,字段定义参考A.11 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/NonMotorVehicles/330101010012100000010220171018080608022060369856
请求方法 PUT
请求头 参见请求参数
请求体 {     “NonMotorVehicleObject”: {         “NonMotorVehicleID”: “330101010012100000010220171018080608022060369856”,         “InfoKind”: 1,         “SourceID”: “33010101001210000001022017101808060802206”,         “DeviceID”: “65010000001190000001”,         “LeftTopX”: 4,         “LeftTopY”: 2,         “RightBtmX”: 21,         “RightBtmY”: 23,         “HasPlate”: “1”,         “PlateClass”: “01”,         “PlateColor”: “2”,         “PlateNo”: “京A66666”,         “PlateNoAttach”: “312”,         “PlateDescribe”: “312”,         “IsDecked”: “1”,         “IsAltered”: “1”,         “IsCovered”: “1”,         “DrivingStatusCode”: “5”,         “UsingPropertiesCode”: “152”,         “VehicleBrand”: “2”,         “VehicleType”: “1”,         “VehicleLength”: 12,         “VehicleWidth”: 45,         “VehicleHeight”: 45,         “VehicleColor”: “2”,         “VehicleHood”: “44”,         “VehicleTrunk”: “55”,         “VehicleWheel”: “33”,         “WheelPrintedPattern”: “2”,         “VehicleWindow”: “013”,         “VehicleRoof”: “1”,         “VehicleDoor”: “1”,         “SideOfVehicle”: “1”,         “CarOfVehicle”: “1”,         “RearviewMirror”: “1”,         “VehicleChassis”: “1”,         “VehicleShielding”: “1”,         “FilmColor”: “1”,         “SubImageList”: {             “SubImageInfoObject”: [                 {                     “ImageID”: “33020300001190000001022017122111111100001”,                     “EventSort”: 4,                     “DeviceID”: “55220299011190000253”,                     “StoragePath”: “http://localhost:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                     “Type”: “01”,                     “FileFormat”: “Jpeg”,                     “ShotTime”: “20170925032455”,                     “Width”: 437,                     “Height”: 350                 }             ]         }     } }
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://localhost:8080/VIID/NonMotorVehicles/330101010012100000010220171018080608022060369856”,         “StatusCode”: 0,         “StatusString”: “正常”,         “Id”: “330101010012100000010220171018080608022060369856”,         “LocalTime”: “20171225100249”     } }

单个非机动车删除

1.接口概览

URI /VIID/NonMotorVehicles/<ID>
方法 查询字符串 消息体 返回结果
DELETE 无 无 < ResponseStatus >
备注  

2.返回结果

         结构参考C.25,字段定义参考A.26。

3.示例

URI /VIID/NonMotorVehicles/330101010012100000010220171018080608022060369856
请求方法 DELETE
请求头 参见请求参数
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://localhost:8080/VIID/NonMotorVehicles/330101010012100000010220171018080608022060369856”,         “StatusCode”: 0,         “StatusString”: “正常”,         “LocalTime”: “20171225100642”     } }
作者 east
Java 11月 8,2020

GAT1400视图库采集相关接口

采集设备相关接口

查询采集设备

1.接口概览

URI /VIID/APEs
方法 查询字符串 消息体 返回结果
GET APE属性键-值对 无 <APEList>
备注  

2.查询字符串

查询指令为采集设备对象属性键-值对,特征属性定义参考A.1.1。

3.返回结果

         结构参考C.1,字段定义参考A.1.1。

4.示例

URI /VIID/APEs
请求方法 GET
请求头 参见请求参数
查询参数 ?ApeID=33070299011190000253 &Name=这是一个采集设备
响应体 {     “APEListObject”: {         “APEObject”: [             {                 “ApeID”: “33070299011190000253”,                 “Name”: “这是一个采集设备”,                 “Model”: “这是采集设备的型号”,                 “IPAddr”: “192.168.1.1”,                 “Port”: 8888,                 “Longitude”: 56.654321,                 “Latitude”: 56.123456,                 “CapDirection”: 0,                 “MonitorDirection”: “9”,                 “IsOnline”: 2,                 “UserId”: “Administrator”,                 “Password”: “p@ssword”             }         ]     } }

采集设备口令修改

1.接口概览

URI /VIID/APEs
方法 查询字符串 消息体 返回结果
PUT 无 <APEList> <ResponseStatusList>
备注  

2.消息体

采集设备的ApeID、用户账户和口令,结构参考C.1,特征属性定义参考A.1.1。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/APEs
请求方法 PUT
请求头 参见请求参数
消息体 {     “APEListObject”: {         “APEObject”: [             {                 “ApeID”: “33070299011190000253”,                 “UserId”: “Administrator”,                 “Password”: “p@ssword”             },             {                 “ApeID”: “33070299011190000252”,                 “UserId”: “Administrator”,                 “Password”: “p@sswords”             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/APEs”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “33070299011190000253”,                 “LocalTime”: “20171220204451”             },             {                 “RequestURL”: “http://localhost:8080/VIID/APEs”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “33070299011190000252”,                 “LocalTime”: “20171220204451”             }         ]     } }

采集系统相关接口

采集系统查询

1.接口概览

URI /VIID/APSs
方法 查询字符串 消息体 返回结果
GET APS属性键-值对 无 <APSList>
备注  

2.查询字符串

查询指令为APS属性键-值对,特征属性定义参考A.2。

3.返回结果

         结构参考C.2,字段定义参考A.2。

4.示例

URI /VIID/APSs
请求方法 GET
请求头 参见请求参数
查询参数 ?TollgateID=65010000001210000080 & Name =采集系统 &…
响应体 {     “APSListObject”: {         “APSObject”: [             {                 “ApsID”: “65010000001200000083”,                 “Name”: “采集系统”,                 “IPAddr”: “6.39.64.5”,                 “IPV6Addr”: “fe80::248e:ff9c:302:e2d1%11”,                 “Port”: 2,                 “IsOnline”: 1             }         ]     } }
作者 east
Java 11月 8,2020

GAT1400视图库布控告警

布控、告警流程

上下级的概念同订阅(布控),通知(告警)。

布控-告警

布控-告警流程见图5:

图5 布控-告警流程

Step1:布控者(上级)向被布控者(下级)发送HTTP POST请求/VIID/Dispositions。

Step2:被布控者(下级)将布控成功与否的响应消息返回给布控者(上级)。

布控成功后,若被布控者(下级)发现布控相关信息,其会进行告警任务。

Step3:被布控者(下级)向布控者(上级)发送HTTP POST请求/VIID/DispositionNotifications。

Step4:布控者(上级)返回响应消息。

Step5:布控信息产生重复Step3,4的操作,如此循环。

撤销布控

如果布控者想撤销布控,流程如图6:

图6 撤销布控流程

Step1:布控者(上级)可以向被布控者(下级)发送HTTP PUT请求/VIID/Dispositions/<ID>。

Step2:被布控者(下级)将撤控成功与否的响应消息返回给布控者(上级)。 Step3:撤控成功后对应的告警流程将终止。

告警相关接口

批量告警

1.接口概览

URI /VIID/DispositionNotifications
方法 查询字符串 消息体 返回结果
POST 无 <DispositionNotificationList> <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.18,字段定义参考A.18 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/DispositionNotifications
请求方法 POST
请求头 参见请求参数
请求体 {     “DispositionNotificationListObject”: {         “DispositionNotificationObject”: [             {                 “NotificationID”: “003301020002022017121416234045581”,                 “DispositionID”: “003301020001012017121416234045581”,                 “Title”: “test”,                 “TriggerTime”: “20170920121314”,                 “CntObjectID”: “330203000011900000010220171218150200000010201928”,                 “MotorVehicleObject”: {                     “MotorVehicleID”: “330203000011900000010220171218150200000010201928”,                     “InfoKind”: 1,                     “SourceID”: “33020300001190000001022017122111111100001”,                     “DeviceID”: “65010000001190000001”,                     “StorageUrl1”: “http://localhost:80/1.jpg”,                     “StorageUrl2”: “http://localhost:80/2.jpg”,                     “StorageUrl3”: “http://localhost:80/3.jpg”,                     “StorageUrl4”: “http://localhost:80/4.jpg”,                     “StorageUrl5”: “http://localhost:80/5.jpg”,                     “LeftTopX”: 1,                     “LeftTopY”: 2,                     “RightBtmX”: 3,                     “RightBtmY”: 4,                     “MarkTime”: “20171102101241”,                     “DisappearTime”: “20171102101241”,                     “LaneNo”: 1,                     “HasPlate”: “1”,                     “PlateClass”: “99”,                     “PlateColor”: “1”,                     “PlateNo”: “京A66666”,                     “PlateNoAttach”: “京A88888”,                     “PlateDescribe”: “这是一个车牌号的描述”,                     “IsDecked”: “1”,                     “IsAltered”: “1”,                     “IsCovered”: “1”,                     “Speed”: 80,                     “Direction”: “9”,                     “DrivingStatusCode”: “01”,                     “VehicleClass”: “X99”,                     “VehicleBrand”: “0”,                     “VehicleModel”: “这是车辆型号描述”,                     “VehicleStyles”: “2000年”,                     “VehicleLength”: 12345,                     “VehicleColor”: “1”,                     “VehicleColorDepth”: “1”,                     “VehicleHood”: “这是车前盖的描述”,                     “VehicleTrunk”: “这是车后盖的描述”,                     “VehicleWheel”: “这是车轮的描述”,                     “WheelPrintedPattern”: “11”,                     “VehicleWindow”: “这是车窗的描述”,                     “VehicleRoof”: “这是车顶的描述”,                     “VehicleDoor”: “这是车门的描述”,                     “SideOfVehicle”: “这是车侧的描述”,                     “CarOfVehicle”: “这是车厢的描述”,                     “RearviewMirror”: “这是后视镜的描述”,                     “VehicleChassis”: “这是底盘的描述”,                     “VehicleShielding”: “这是遮挡的描述”,                     “FilmColor”: “1”,                     “HitMarkInfo”: “1”,                     “VehicleBodyDesc”: “这是车身的描述”,                     “VehicleFrontItem”: “1”,                     “DescOfFrontItem”: “这是车前部物品描述”,                     “VehicleRearItem”: “1”,                     “DescOfRearItem”: “这是车后部物品描述”,                     “PassTime”: “20171218150122”,                     “NameOfPassedRoad”: “这是经过道路的名称描述”,                     “IsSuspicious”: “1”,                     “Sunvisor”: 1,                     “SafetyBelt”: 1,                     “Calling”: 1,                     “PlateReliability”: “80”,                     “PlateCharReliability”: “苏-80,B-90,1-90,2-88,3-90,4-67,5-87”,                     “BrandReliability”: “88”                 }             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/DispositionNotifications”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “003301020002022017121416234045581”,                 “LocalTime”: “20171222155008”             }         ]     } }

告警查询

1.接口概览

URI /VIID/DispositionNotifications
方法 查询字符串 消息体 返回结果
GET DispositionNotification属性键-值对 无 <DispositionNotificationList>
备注  

2. 查询字符串

查询指令为Disposition属性键-值对,特征属性定义参考A.18 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/DispositionNotifications
请求方法 GET
请求头 参见请求参数
查询参数 ?NotificationID=003301020002022017121416234045581 &DispositionID=003301020001012017121416234045581 &CntObjectID=330203000011900000010220171218150200000010201928&…
响应体 {     “DispositionNotificationListObject”: {         “DispositionNotificationObject”: [             {                 “NotificationID”: “003301020002022017121416234045581”,                 “DispositionID”: “003301020001012017121416234045581”,                 “Title”: “test”,                 “TriggerTime”: “20170920121314”,                 “CntObjectID”: “330203000011900000010220171218150200000010201928”,                 “MotorVehicleObject”: {                     “MotorVehicleID”: “330203000011900000010220171218150200000010201928”,                     “InfoKind”: 1,                     “SourceID”: “33020300001190000001022017122111111100001”,                     “DeviceID”: “65010000001190000001”,                     “StorageUrl1”: “http://192.168.1.1:80/1.jpg”,                     “StorageUrl2”: “http://192.168.1.1:80/2.jpg”,                     “StorageUrl3”: “http://192.168.1.1:80/3.jpg”,                     “StorageUrl4”: “http://192.168.1.1:80/4.jpg”,                     “StorageUrl5”: “http://192.168.1.1:80/5.jpg”,                     “LeftTopX”: 1,                     “LeftTopY”: 2,                     “RightBtmX”: 3,                     “RightBtmY”: 4,                     “MarkTime”: “20171102101241”,                     “DisappearTime”: “20171102101241”,                     “LaneNo”: 1,                     “HasPlate”: “1”,                     “PlateClass”: “99”,                     “PlateColor”: “1”,                     “PlateNo”: “京A66666”,                     “PlateNoAttach”: “京A88888”,                     “PlateDescribe”: “这是一个车牌号的描述”,                     “IsDecked”: “1”,                     “IsAltered”: “1”,                     “IsCovered”: “1”,                     “Speed”: 80,                     “Direction”: “9”,                     “DrivingStatusCode”: “01”,                     “VehicleClass”: “X99”,                     “VehicleBrand”: “0”,                     “VehicleModel”: “这是车辆型号描述”,                     “VehicleStyles”: “2000年”,                     “VehicleLength”: 12345,                     “VehicleColor”: “1”,                     “VehicleColorDepth”: “1”,                     “VehicleHood”: “这是车前盖的描述”,                     “VehicleTrunk”: “这是车后盖的描述”,                     “VehicleWheel”: “这是车轮的描述”,                     “WheelPrintedPattern”: “11”,                     “VehicleWindow”: “这是车窗的描述”,                     “VehicleRoof”: “这是车顶的描述”,                     “VehicleDoor”: “这是车门的描述”,                     “SideOfVehicle”: “这是车侧的描述”,                     “CarOfVehicle”: “这是车厢的描述”,                     “RearviewMirror”: “这是后视镜的描述”,                     “VehicleChassis”: “这是底盘的描述”,                     “VehicleShielding”: “这是遮挡的描述”,                     “FilmColor”: “1”,                     “HitMarkInfo”: “1”,                     “VehicleBodyDesc”: “这是车身的描述”,                     “VehicleFrontItem”: “1”,                     “DescOfFrontItem”: “这是车前部物品描述”,                     “VehicleRearItem”: “1”,                     “DescOfRearItem”: “这是车后部物品描述”,                     “PassTime”: “20171218150200”,                     “NameOfPassedRoad”: “这是经过道路的名称描述”,                     “IsSuspicious”: “1”,                     “Sunvisor”: 1,                     “SafetyBelt”: 1,                     “Calling”: 1,                     “PlateReliability”: “80”,                     “PlateCharReliability”: “苏-80,B-90,1-90,2-88,3-90,4-67,5-87”,                     “BrandReliability”: “88”,                     “SubImageList”: {                         “SubImageInfoObject”: [                             {                                 “ImageID”: “33020300001190000001022017122111111100001”,                                 “EventSort”: 4,                                 “DeviceID”: “55220299011190000253”,                                 “StoragePath”: “http://10.33.6.108:9080/testx_108_20170908/a2421c4fde6d4a74ac923e8470d6e7fa.jpg”,                                 “Type”: “01”,                                 “FileFormat”: “Jpeg”,                                 “ShotTime”: “20170925032455”,                                 “Width”: 437,                                 “Height”: 350,                                 “Data”: “/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFR…UVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBVt7IDwSOM1pKehagf/9k=”                             }                         ]                     }                 }             }         ]     } }

删除告警

1.接口概览

URI /VIID/DispositionNotifications
方法 查询字符串 消息体 返回结果
DELETE 键IDList,值为用英文半角分号”,”分隔的字符串 无 <ResponseStatusList>
备注  

2. 请求参数

IDList=<DispositionNotificationID>,<DispositionNotificationID>。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/DispositionNotifications
请求方法 DELETE
请求头 参见请求参数
请求体 ?IDList=003301020002022017121416234045581, 303301020002022017121417234045582
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/DispositionNotifications”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “LocalTime”: “20171223101737”             },             {                 “RequestURL”: “http://localhost:8080/VIID/DispositionNotifications”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “LocalTime”: “20171223101737”             }         ]     } }
作者 east
Java 11月 8,2020

GAT1400视图库订阅通知

订阅、通知流程(必读)

订阅-通知是视图库接口最核心的业务,也是大华和友商使用最频繁的一个功能。本节将描述完整的一个订阅-通知流程。

上下级概念

订阅通知过程本质是数据转移,例如A想通过视图库获得B的机动车数据,那么A就是上级、B就是下级;假如A想通过B间接获得C的机动车数据,那么A就是B的上级,B是C的上级,这个过程为跨级订阅/通知。

订阅-通知

订阅-通知流程见图2:

图2 订阅-通知流程

Step1:订阅者(上级)向被订阅者(下级)发送HTTP POST请求/VIID/Subscribes。

Step2:被订阅者(下级)将订阅成功与否的响应消息返回给订阅者(上级)。

订阅成功后,被订阅者(下级)如果有订阅信息,便会进行通知任务。

Step3:被订阅者(下级)向订阅者(上级)发送HTTP POST请求/VIID/SubscribeNotifications。

Step4:订阅者(上级)返回响应消息。

Step5:被订阅者(下级)接收到Step4订阅者(上级)正确返回结果才会再重复Step3,4的操作,如此循环。

取消订阅

如果订阅者想取消订阅,流程如图3:

图3 取消订阅流程

Step1:订阅者(上级)可以向被订阅者(下级)发送HTTP PUT请求/VIID/Subscribes/<ID>,写入订阅取消单位、订阅取消人、取消时间、取消原因。

Step2:被订阅者(下级)将取消订阅成功与否的响应消息返回给订阅者(上级)。

Step3:取消订阅成功后对应的通知流程将终止。

级联订阅

订阅相关接口

批量订阅

1.接口概览

URI /VIID/Subscribes
方法 查询字符串 消息体 返回结果
POST 无 <SubscribeList> <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.19,字段定义参考A.19 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Subscribes
请求方法 POST
请求头 参见请求参数
请求体 {     “SubscribeListObject”: {         “SubscribeObject”: [             {                 “SubscribeID”: “330101020001032017113010580006371”,                 “ApplicantName”: “admin”,                 “ApplicantOrg”: “11111”,                 “BeginTime”: “20171201000000”,                 “EndTime”: “20191230000000”,                 “OperateType”: “0”,                 “Reason”: “测试”,                 “ReceiveAddr”: “http://172.6.3.107:80/VIID/SubscribeNotifications”,                 “ResourceURI”: “00330102015030000004”,                 “SubscribeDetail”: “13”,                 “Title”: “过车”             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/Subscribes”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101020001032017113010580006371”,                 “LocalTime”: “20171220204451”             }         ]     } }

订阅任务查询

1.接口概览

URI /VIID/Subscribes
方法 查询字符串 消息体 返回结果
GET Subscribes属性键-值对 无 <SubscribeList>
备注  

2.查询字符串

查询指令为Subscribes属性键-值对,特征属性定义参考A.19 。

3.返回结果

         结构参考C.19,字段定义参考A.19。

4.示例

URI /VIID/Subscribes
请求方法 GET
请求头 参见请求参数
查询参数 ?SubscribeID=330101020001032017113010580006371 &ApplicantName=admin &ApplicantOrg=11111 &BeginTime=20171201000000 &EndTime=20191230000000&…
响应体 {     “SubscribeListObject”: {         “SubscribeObject”: [             {                 “SubscribeID”: “330101020001032017113010580006371”,                 “ApplicantName”: “admin”,                 “ApplicantOrg”: “11111”,                 “BeginTime”: “20171201000000”,                 “EndTime”: “20191230000000”,                 “OperateType”: “0”,                 “Reason”: “测试”,                 “ReceiveAddr”: “http://172.6.3.107:80/VIID/SubscribeNotifications”,                 “ResourceURI”: “00330102015030000004”,                 “SubscribeDetail”: “13”,                 “Title”: “过车”             }         ]     } }

订阅任务修改

1.接口概览

URI /VIID/Subscribes
方法 查询字符串 消息体 返回结果
PUT 无 <SubscribeList> <ResponseStatusList>
备注 消息体中SubscribeID必填,否则操作无效

2.消息体特征参数

消息体结构参考C.19,字段定义参考A.19 。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Subscribes
请求方法 PUT
请求头 参见请求参数
请求体 {     “SubscribeListObject”: {         “SubscribeObject”: [             {                 “SubscribeID”: “330101020001032017113010580006371”,                 “ApplicantName”: “admin”,                 “ApplicantOrg”: “11111”,                 “BeginTime”: “20171201000000”,                 “EndTime”: “20191230000000”,                 “OperateType”: “0”,                 “Reason”: “上下级汇聚”,                 “ReceiveAddr”: “http://172.6.3.107:80/VIID/SubscribeNotifications”,                 “ResourceURI”: “00330102015030000004”,                 “SubscribeDetail”: “13”,                 “Title”: “过车测试”             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/Subscribes”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101020001032017113010580006371”,                 “LocalTime”: “20171220204451”             }         ]     } }

订阅任务删除

1.接口概览

URI /VIID/Subscribes
方法 请求参数 消息体 返回结果
DELETE 键为IDList,值为用英文半角分号”,”分隔的字符串 无 <ResponseStatusList>
备注  

2.请求参数

IDList=<SubscribeID>,<SubscribeID>。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Subscribes
请求方法 DELETE
请求头 参见请求参数
请求参数 ?IDList=330101020001032017113010580006371,330101020001032017113010580006372
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/Subscribes”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101020001032017113010580006371”,                 “LocalTime”: “20171220204451”             },             {                 “RequestURL”: “http://localhost:8080/VIID/Subscribes”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101020001032017113010580006372”,                 “LocalTime”: “20171220204451”             }         ]     } }

取消订阅

1.接口概览

URI /VIID/Subscribes/<ID>
方法 请求参数 消息体 返回结果
PUT 无 <Subscribe> <ResponseStatus>
备注 PUT更新Subscribe写入订阅取消单位、订阅取消人、取消时间、取消原因。

2.消息体特征参数

订阅对象中的取消单位、订阅取消人、取消时间、取消原因,字段定义参考A.19。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/Subscribes/330101020001032017113010580006371
请求方法 PUT
请求头 参见请求参数
消息体 {     “SubscribeObject”: {         “SubscribeCancelOrg”: “省公安厅”,         “SubscribeCancelPerson”: “admin”,         “CancelTime”: “20171201000000”,         “CancelReason”: “服务到期”     } }
响应体 {     “ResponseStatusObject”: {         “RequestURL”: “http://localhost:8080/VIID/Subscribes/330101020001032017113010580006371”,         “StatusCode”: 0,         “StatusString”: “正常”,         “Id”: “330101020001032017113010580006371”,         “LocalTime”: “20171220204451”     } }

通知相关接口

订阅通知

1.接口概览

URI /VIID/SubscribeNotifications
方法 查询字符串 消息体 返回结果
POST 无 <SubscribeNotificationList> <ResponseStatusList>
备注  

2.消息体特征参数

消息体结构参考C.20,字段定义参考A.20。

3.返回结果

         结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/SubscribeNotifications
请求方法 POST
请求头 参见请求参数
请求体 {     “SubscribeNotificationListObject”: {         “SubscribeNotificationObject”: [             {                 “NotificationID”: “650100010000042017040112010100001”,                 “Title”: “通知主题”,                 “SubscribeID”: “650100010000032017040112010100001”,                 “TriggerTime”: “20171102101205”,                 “InfoIDs”: “650100000013200000010120170330120000000010100001”,                 “DeviceList”: {                     “APEObject”: [                         {                             “Name”: “这是一个采集设备”,                             “Port”: 8888,                             “Password”: “p@ssword”,                             “Model”: “这是采集设备的型号”,                             “ApeID”: “65010000001190000001”,                             “MonitorAreaDesc”: “监控区域说明”,                             “IPAddr”: “192.168.1.1”,                             “IPV6Addr”: “fe80::69fd:1871:b9ba:24e7%13”,                             “Longitude”: 56.654321,                             “Latitude”: 56.123456,                             “PlaceCode”: “650100”,                             “OrgCode”: “650100010000”,                             “CapDirection”: 1,                             “MonitorDirect”: “1”,                             “IsOnline”: “1”,                             “OwnerApsID”: “65010000001200000001”,                             “UserId”: “Administrator”,                             “Place”: “新疆乌鲁木齐”                         }                     ]                 }             }         ]     } }
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [{                 “RequestURL”: “http://localhost:8080/VIID/SubscribeNotifications”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “330101020001032017113010580006371”,                 “LocalTime”: “20171220204451”             }         ]} }

通知查询

1.接口概览

URI /VIID/SubscribeNotifications
方法 查询字符串 消息体 返回结果
GET SubscribeNotifaication属性键-值对 无 <SubscribeNotificationList>
备注  

2.查询字符串

查询指令为SubscribeNotifications属性键-值对,特征属性定义参考A.20。

3.返回结果

         结构参考C.20,字段定义参考A.20。

4.示例

URI /VIID/SubscribeNotifications
请求方法 GET
请求头 参见请求参数
查询参数 ?NotificationID=650100010000042017040112010100001 &Title=通知主题&…
响应体 {     “SubscribeNotificationListObject”: {         “SubscribeNotificationObject”: [             {                 “NotificationID”: “650100010000042017040112010100001”,                 “Title”: “通知主题”,                 “SubscribeID”: “650100010000032017040112010100001”,                 “TriggerTime”: “20171102101205”,                 “InfoIDs”: “650100000013200000010120170330120000000010100001”,                 “DeviceList”: {                     “APEObject”: [                         {                             “Name”: “这是一个采集设备”,                             “Port”: 8888,                             “Password”: “p@ssword”,                             “Model”: “这是采集设备的型号”,                             “ApeID”: “65010000001190000001”,                             “MonitorAreaDesc”: “监控区域说明”,                             “IPAddr”: “192.168.1.1”,                             “IPV6Addr”: “fe80::69fd:1871:b9ba:24e7%13”,                             “Longitude”: 56.654321,                             “Latitude”: 56.123456,                             “PlaceCode”: “650100”,                             “OrgCode”: “650100010000”,                             “CapDirection”: 1,                             “MonitorDirect”: “1”,                             “IsOnline”: “1”,                             “OwnerApsID”: “65010000001200000001”,                             “UserId”: “Administrator”,                             “Place”: “新疆乌鲁木齐”                         }                     ]                 }             }         ]     } }

通知删除

1.接口概览

URI /VIID/SubscribeNotifications
方法 请求参数 消息体 返回结果
DELETE 键为IDList,值为用英文半角分号”,”分隔的字符串 无 <ResponseStatusList>
备注  

2.请求参数

IDList=<NotificationID>,<NotificationID>。

3.返回结果

         结构参考C.20,字段定义参考A.20。

4.示例

URI /VIID/SubscribeNotifications
请求方法 DELETE
请求头 参见请求参数
请求参数 ?IDList=650100010000042017040112010100001,650100010000042017040112010100002
响应体 {     “ResponseStatusListObject”: {         “ResponseStatusObject”: [             {                 “RequestURL”: “http://localhost:8080/VIID/SubscribeNotifications”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “650100010000042017040112010100001”,                 “LocalTime”: “20171220204451”             },             {                 “RequestURL”: “http://localhost:8080/VIID/SubscribeNotifications”,                 “StatusCode”: 0,                 “StatusString”: “正常”,                 “Id”: “650100010000042017040112010100002”,                 “LocalTime”: “20171220204451”             }         ]     } }

C.19 订阅对象

//订阅对象

<complexType name=”Subscribe”>

<sequence>

<element name=”SubscribeID” type=”BusinessObjectIdType”/>

<element name=”Title” type=”string” />

<element name=” SubscribeDetail” type=” SubscribeDetailType”/>

<element name=” ResourceURI” type=” string”/>

<element name=”ApplicantName” type=”NameType” />

<element name=”ApplicantOrg” type=”OrgType” />

<element name=”BeginTime” type=”dateTime” />

<element name=”EndTime” type=”dateTime” />

<element name=”ReceiveAddr” type=”string” />

<element name=”OperateType” type=”int” use=”required”/>

<element name=”SubscribeStatus” type=”int” />

<element name=”Reason” type=”string”/>

<element name=”SubscribeCancelOrg” type=”OrgType”/>

<element name=”SubscribeCancelPerson” type=”string”/>

<element name=”CancelTime” type=”dateTime”/>

<element name=”CancelReason” type=”string”/>

</sequence>

</complexType>

//订阅对象列表

<complexType name=”SubscribeList”>

<sequence>

<element name=”SubscribeObject” type=”Subscribe” minOccurs=”0″ />

</sequence>

</complexType>

C.20 通知对象

//通知对象

<complexType name=”SubscribeNotification”>

<sequence>

<element name=”NotificationID” type=”BusinessObjectIdType” use=”required”/>

<element name=”SubscribeID” type=”BusinessObjectIdType” use=”required”/>

<element name=”Title” type=”string” use=”required”/>

<element name=”TriggerTime” type=”dateTime” use=”required”/>

<element name=”InfoIDs” type=”string” use=”required”/>

<element name=”CaseObjectList” type=”CaseList”/>

<element name=”TollgateObjectList” type=”TollgateList”/>

<element name=”LaneObjectList” type=”LaneList”/>

<element name=”DeviceList” type=”APEList”/>

<element name=”DeviceStatusList” type=”APEStatusList”/>

<element name=”APSObjectList” type=”APSList”/>

<element name=”APSStatusObjectList” type=”APSStatusList”/>

<element name=”PersonObjectList” type=”PersonList”/>

<element name=”MotorVehicleObjectList” type=”MotorVehicleList”/>

<element name=”NonMotorVehicleObjectList” type=”NonMotorVehicleList”/>

<element name=”ThingObjectList” type=”ThingList”/>

<element name=”SceneObjectList” type=”SceneList”/>

</sequence>

</complexType>

//通知对象列表

<complexType name=”SubscribeNotificationList”>

<sequence>

<element    name=”SubscribeNotificationObject”    type=”SubscribeNotification” minOccurs=”0″ />

</sequence>

</complexType>


作者 east
Java 11月 8,2020

GAT1400视图库通用说明

调用方式(必读)

所有接口(以下简称API)以HTTP/REST方式接入,使用URI 唯一标识,各类接口的URI参照API概览

请求结构

对视图库API调用是通过向视图库服务端地址发送请求,并按照接口说明在请求中加入相应的请求参数来完成的。视图库接口的请求结构由以下几个部分组成:

1.服务地址

HTTP URL格式的形式为:

<Protocol>://<Hostname>:<Port><URI>(?P1=v1&p2=v2…&pn=vn)。

其中:Protocol为HTTP;Hostname指视图库服务设备的主机名称、IP地址或域名;Port指端口号;URI指资源URI;(?P1=v1&p2=v2…&pn=vn)指查询字符串,每个资源都会定义需要的或可选的查询字符串参数,查询字符串参数以名字/值对形式出现。

2.请求方法

视图库API的HTTP请求方法包括GET、PUT、POST、DELETE。

方法的选取参照对应接口说明。

注意:

1、如果接口的请求方法是POST, PUT则需要对请求内容进行指定编码处理,且内容均从消息体中取得。

2、如果接口的请求方法是GET,则对所有请求参数值均需要做URL编码。

3.请求参数

视图库API每个请求都需要指定请求头参数,参数列表如下

表1 请求参数列表

序号 参数名称 参数说明 必填 备注
1 Content-Type 消息体对象的媒体类型 是/否 带有消息体的POST,PUT请求必填,支持 application/json或xml;charset=utf-8
2 Accept 请求方能接收的媒体类型 否 支持application/json或xml;charset=utf-8,默认 返回application/json;charset=utf-8
3 User-Identify 请求方系统编码 是/否 用于校验访问者身份,参考注册、保活、注销
备注:参数命名和取值,大小写敏感

返回结果

REST HTTP请求响应保留HTTP协议相关内容,其中返回结果(响应消息体)由视图库API维护。

视图库API的返回结果由请求方法决定,总结如下表:

表2 各类请求返回结果

序号 请求方法 说明 返回结果
1 GET 查询单个目标对象属性 单个目标结果
2 GET 查询符合条件的多个对象 多个目标集合
3 GET 查询异常 ResponseStatus
4 POST 提交单个目标对象 ResponseStatus
5 POST 提交多个目标对象集合 List<ResponseStatus>
6 PUT 修改单个目标对象 ResponseStatus
7 PUT 修改多个目标对象集合 List<ResponseStatus>
8 DELETE 修改单个目标对象 ResponseStatus
9 DELETE 修改多个目标对象集合 List<ResponseStatus>

ResponseStatus(应答状态对象)特征属性参照A.26 应答状态对象

其他的对象特征参见 附录A

字符编码

视图库API的请求及返回结果均使用UTF-8字符集进行编码。

通用说明

1、所有时间格式字段,若无特殊说明,均采用如下时间格式:yyyyMMddHHmmss如 20170101021020

2、所有URI中的 <ID> 在请求时需替换为具体对象的标识ID。例如:

HTTP PUT请求访问取消订阅接口 /VIID/Subscribes/<ID> 时,需要把URI中的<ID>替换成目标对象的订阅标识,如 /VIID/Subscribes/330101020001032017113010580006371

3、下文接口示例中的消息体和响应体都是基于如下请求头参数

请求头名称 取值
Content-Type application/json;charset=utf-8
Accept application/json;charset=utf-8
作者 east
Java 11月 8,2020

GAT1400视图库注册保活注销

注册、保活、注销

如果现场环境开启了注册认证机制,则需要关注本小节内容。

注册

视图库API的访问,需要进行身份验证,身份信息放在请求头部参数User-Identify,即一个新请求方的访问需要向视图库进行注册,注册成功后,才能进行后续操作。注册流程如下:

注意:在上面流程图中对接程序向视图库发起的两次请求中,请求体都应该为key为DeviceID,value为对应发起方系统的标识ID的JSON字符串,例:{“RegisterObject”:{“DeviceID”:”33010299011190000253″}},注册成功后,每次请求需添加请求头部参数User-Identify,值为DeviceID的value(33010299011190000253),详情参考接口注册。

保活

注册成功后,会有一定的有效期(一般为5分钟),在有效期内,如果没有接收到新的请求,注册信息将会失效,下次访问将需要重新注册;当然任何形式的成功请求,都能触发保活机制,重置有效期。

注销

当请求方无需和视图库进行通信时,可以请求注销接口,撤销注册消息。

注册

1.接口概览

URI /VIID/System/Register
方法 查询字符串 消息体 返回结果
POST 无 <Register> <ResponseStatus>
备注  

2.消息体特征参数

消息体结构参考C.26,字段定义参考A.27 。

3.返回结果

结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/System/Register
请求方法 POST
请求头 参见请求参数 其他请求头参照注册流程图
请求体 {“RegisterObject”:{“DeviceID”:”33010299011190000253″}}
响应体 {     “ResponseStatusObject”: {             “RequestURL”: “http://localhost:8080/VIID/Register”,             “StatusCode”: 0,             “StatusString”: “正常”,             “Id”: “33010299011190000253”,             “LocalTime”: “20171220204451”     } }

注销

1.接口概览

URI /VIID/System/UnRegister
方法 查询字符串 消息体 返回结果
POST 无 <Register> <ResponseStatus>
备注  

2.消息体特征参数

消息体结构参考C.28,字段定义参考A.29 。

3.返回结果

结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/System/UnRegister
请求方法 POST
请求头 参见请求参数
请求体 {“DeviceID”:”33010299011190000253″}
响应体 {     “ResponseStatusObject”: [         {             “RequestURL”: “http://localhost:8080/VIID/UnRegister”,             “StatusCode”: 0,             “StatusString”: “正常”,             “Id”: “33010299011190000253”,             “LocalTime”: “20171220204451”         }     ] }

保活

1.接口概览

URI /VIID/System/Keepalive
方法 查询字符串 消息体 返回结果
POST 无 < Keepalive > <ResponseStatus>
备注  

2.消息体特征参数

消息体结构参考C.27,字段定义参考A.28 。

3.返回结果

结构参考C.25,字段定义参考A.26。

4.示例

URI /VIID/System/Keepalive
请求方法 POST
请求头 参见请求参数
请求体 {“DeviceID”:”33010299011190000253″}
响应体 {     “ResponseStatusObject”: [         {             “RequestURL”: “http://localhost:8080/VIID/Keepalive”,             “StatusCode”: 0,             “StatusString”: “正常”,             “Id”: “33010299011190000253”,             “LocalTime”: “20171220204451”         }     ] }

C.25 应答状态对象

//应答状态对象

<complexType name=”ResponseStatus”>

<sequence>

<element name=”RequestURL” type=”string ” use=”required”/>

<element name=”StatusCode” type=” int” use=”required”/>

<element name=”StatusString” type=”string” />

<element name=”Id” type=”string” minOccurs=”0″ maxOccurs=”1″/>

<element name=”LocalTime” type=”dateTime” minOccurs=”0″ maxOccurs=”1″/>

</sequence>

</ complexType>

//应答状态对象列表

<complexType name=”ResponseStatusList”>

<sequence>

<element name=”ResponseStatusObject” type=”ResponseStatus” minOccurs=”1″ />

</sequence>

</complexType>

C.26 注册对象

//注册对象

<complexType name=”Register”>

<sequence>

<element name=”DeviceID” type=”DeviceIDType” use=”required”/>

</sequence>

</ complexType>

C.27 保活对象

//保活对象

<complexType name=”Keepalive”>

<sequence>

<element name=”DeviceID” type=”DeviceIDType” use=”required”/>

</sequence>

</complexType>

C.28 注销对象

//注销对象

<complexType name=”UnRegister “>

<sequence>

<element name=”DeviceID” type=”DeviceIDType” use=”required”/>

</sequence>

</ complexType>

作者 east

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.