考生数据管理接口¶
注: 所有接口只针对旗舰会员提供,非旗舰会员无法调用,所有开放平台接口默认共享10QPS
1、获取考生字段信息¶
获取考生字段信息:¶
GET https://api.kyexam.com/api/v1/student/getFields?code=xxx&time=当前时间戳
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"data":[
{
"sfid":1,
"label":"姓名"
},
{
"sfid":2,
"label":"性别"
},
{
"sfid":4,
"label":"手机"
},
{
"sfid":10,
"label":"密码"
}
],
"status":"ok"
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strconv"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/getFields"
client := &http.Client{}
fullPath := host + resource
req, _ := http.NewRequest(http.MethodGet, fullPath, nil)
time64 := time.Now().UTC().Unix()
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
q := req.URL.Query()
q.Add("code", Code)
q.Add("time", strconv.Itoa(int(time64)))
req.URL.RawQuery = q.Encode()
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
// fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
2、批量插入考生信息¶
批量插入考生信息:¶
POST https://api.kyexam.com/api/v1/student/addStudents
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
info 要插入的数据。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"fail":[
//如插入失败,返回数据对应的下标位置
],
"status":"ok",
"success":[//插入成功的数据...
{
"sid":170603,//插入后学生的sid
"index":1 //数据所在传入数据的位置
},
{
"sid":170604,
"index":2
}
]
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/addStudents"
client := &http.Client{}
fullPath := host + resource
info := `
[
{
"gid": "2993",
"fields": [
{
"sfid": 4,
"value": "2993"
},
{
"sfid": 1,
"value": "stufor2993"
}
]
},
{
"gid": "2994",
"fields": [
{
"sfid": 10,
"value": "2994"
},
{
"sfid": 1,
"value": "stufor2994"
}
]
}
]
`
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["info"] = []string{info}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
3、批量修改考生信息¶
批量插入考生信息:¶
POST https://api.kyexam.com/api/v1/student/changeStuinfo
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
info 要插入的数据。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"fail":[
//如失败,返回数据对应的下标位置
],
"status":"ok",
"success":[
"170603",//修改成功的sid
"170604"
]
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/changeStuinfo"
client := &http.Client{}
fullPath := host + resource
info := `
[
{
"sid":170603,
"loginValue": "",
"fields": [
{
"sfid": 1,
"value": "stufor2993change"
},
{
"sfid": 4,
"value": "18320320xxx"
}
]
},
{
"sid":170604,
"loginValue": "",
"fields": [
{
"sfid": 1,
"value": "stufor2994change"
},
{
"sfid": 10,
"value": "29944"
}
]
}
]
`
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["info"] = []string{info}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
4、批量删除考生信息¶
批量删除考生信息:¶
POST https://api.kyexam.com/api/v1/student/delStu
参数:¶
code=权限码&time=当前时间戳&sids=学生唯一id(二选一字段)
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
sids(二选一) 学生唯一id。格式如下:[170603,170604] 也可参照实例代码
-
loginValues(二选一) 管理员设定的登录字段,例如名字,手机等。格式如下: ["李三","张四"] 也可参照实例代码
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"fail":[
//如失败,返回数据对应的下标位置
],
"status":"ok",
"success":[
"170603",//删除成功的sid
"170604"
]
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/delStu"
client := &http.Client{}
fullPath := host + resource
sids := "[170603,170604]"
// loginValues := "[\"登录字段xx\",\"登录字段xxx\"]"
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["sids"] = []string{sids}
// data["loginValues"] = []string{loginValues}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
5、移动考生到组¶
移动考生到组:¶
POST https://api.kyexam.com/api/v1/student/movestugroup
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
mvStuInfo 格式请参照示例代码,在loginValues与sid中任选其一。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"fail":[
//如失败,返回数据对应的下标位置
],
"status":"ok",
"success":[
"170606",//移动成功的sid
"170607"
]
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/movestugroup"
client := &http.Client{}
fullPath := host + resource
mvStuInfo := `
{
"gids": [2993],
"loginValues":[],
"sid":[170606,170607],
"action": "moveto"
}
`
/*
上面以sid为例,如使用loginValues 格式如下 ["登录字段1","登录字段2"]
action 可以为 addto moveto delfrom
addto: 表示添加到组,这个时候一个考生可能存在多个组
moveto: 表示移动到组,这个时候考生只存在传入的组
delfrom: 表示考生从指定组移除,需注意移除后至少应还存在一个组中,否则移除失败
*/
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["mvStuInfo"] = []string{mvStuInfo}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
6、获取考生信息¶
获取考生信息:¶
POST https://api.kyexam.com/api/v1/student/getstudentsinfo
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
loginValues(二选一字段) 管理员设定的登录字段,例如名字,手机等。格式如下: ["李三","张四"] 也可参照实例代码。
-
sids(二选一字段) 学生唯一id。格式如下:[170603,170604] 也可参照实例代码。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"data":[
{
"sid":170605,
"fields":[
{
"sFid":1,
"label":"姓名",
"value":"newstufor2993"
}
],
"group":[
{
"gid":2993,
"title":"2993"
}
]
},
{
"sid":170606,
"fields":[
{
"sFid":1,
"label":"姓名",
"value":"newstufor2994"
}
],
"group":[
{
"gid":2993,
"title":"2993"
}
]
}
],
"fail":[
//如失败,返回对应的sid或loginValues,这种情况可能是因为考生已被删除
],
"status":"ok"
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/getstudentsinfo"
client := &http.Client{}
fullPath := host + resource
// sids := "[170603,170604]"
sids := "[170605,170606]"
// loginValues := "[\"登录字段xx\",\"登录字段xxx\"]"
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["sids"] = []string{sids}
// data["loginValues"] = []string{loginValues}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
7、获取考生列表¶
获取考生列表:¶
POST https://api.kyexam.com/api/v1/student/getstulist
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
start 分页参数。
-
limit 查询个数,最大为100。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"data":[
{
"loginValue":"newstufor2993",
"fields":[
{
"sFid":1,
"label":"姓名",
"value":"newstufor2993"
},
{
"sFid":4,
"label":"手机",
"value":"2993"
}
]
},
{
"loginValue":"newstufor2994",
"fields":[
{
"sFid":1,
"label":"姓名",
"value":"newstufor2994"
},
{
"sFid":10,
"label":"密码",
"value":"2994"
}
]
},
{
"loginValue":"newstufor29942",
"fields":[
{
"sFid":1,
"label":"姓名",
"value":"newstufor29942"
},
{
"sFid":10,
"label":"密码",
"value":"2994"
}
]
}
],
"status":"ok",
"total":12
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/getstulist"
client := &http.Client{}
fullPath := host + resource
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["start"] = []string{"0"}
data["limit"] = []string{"3"}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
8、获取所有考生或者单一考生的考试记录¶
获取考生列表:¶
GET https://api.kyexam.com/api/v1/student/queryresults
参数:¶
code=权限码&time=当前时间戳
参数说明:¶
-
code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
-
time 当前时间戳,例如1638768935。
-
start 分页参数。
-
limit 查询个数,最大为100。
-
loginValues 如需查询单个考生的考试记录,需配合eid使用。
-
eid 如需查询单个考生的考试记录,需配合loginValues使用,详见示例代码。
-
Authorization 放到请求头的Token,详见示例代码。简单来说就是:将当前时间戳和您的code拼接起来,进行MD5加密而得。
如果操作成功,则返回:¶
{
"data":[
{
"viewResult":"https://api.kyexam.com/transgetresult?tid=xxx\u0026token=xxx", //试卷详情链接,其中 '\u0026' 为 '&' 符号, 需要转码方可正常使用。
"score":"2",//分数
"passed":"0",//考试是否及格
"status":"1",
"startTime":"1639647217",//考试考试时间
"endTime":"1639647236",//考试结束时间
"sid":"170597",
"loginValue":"n11",//登录字段
"name":"n11",//考生名字
"eid":"107264"//试卷id
},
{
"viewResult":"https://api.kyexam.com/transgetresult?tid=xxx\u0026token=xxx",
"score":"1",
"passed":"0",
"status":"1",
"startTime":"1639647122",
"endTime":"1639647132",
"sid":"170597",
"loginValue":"n11",
"name":"n11",
"eid":"107264"
}
],
"status":"ok",
"total":1877
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strconv"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/queryresults"
client := &http.Client{}
fullPath := host + resource
req, _ := http.NewRequest(http.MethodGet, fullPath, nil)
time64 := time.Now().UTC().Unix()
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
q := req.URL.Query()
q.Add("code", Code)
q.Add("start", "0")
q.Add("limit", "2")
// ↑↑获取所有考生考试数据↑↑
// ↓↓获取单一考生参与考试的记录↓↓
// q.Add("loginValues", "n11")
// q.Add("eid", "107264")
q.Add("time", strconv.Itoa(int(time64)))
req.URL.RawQuery = q.Encode()
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
// fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}