考生數(shù)據(jù)管理接口¶
注: 所有接口只針對旗艦會員提供,非旗艦會員無法調(diào)用,所有開放平臺接口默認共享10QPS
1、獲取考生字段信息¶
獲取考生字段信息:¶
GET https://api.kyexam.com/api/v1/student/getFields?code=xxx&time=當前時間戳
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
info 要插入的數(shù)據(jù)。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"fail":[
//如插入失敗,返回數(shù)據(jù)對應(yīng)的下標位置
],
"status":"ok",
"success":[//插入成功的數(shù)據(jù)...
{
"sid":170603,//插入后學(xué)生的sid
"index":1 //數(shù)據(jù)所在傳入數(shù)據(jù)的位置
},
{
"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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
info 要插入的數(shù)據(jù)。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"fail":[
//如失敗,返回數(shù)據(jù)對應(yīng)的下標位置
],
"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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳&sids=學(xué)生唯一id(二選一字段)
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
sids(二選一) 學(xué)生唯一id。格式如下:[170603,170604] 也可參照實例代碼
-
loginValues(二選一) 管理員設(shè)定的登錄字段,例如名字,手機等。格式如下: ["李三","張四"] 也可參照實例代碼
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"fail":[
//如失敗,返回數(shù)據(jù)對應(yīng)的下標位置
],
"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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
mvStuInfo 格式請參照示例代碼,在loginValues與sid中任選其一。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"fail":[
//如失敗,返回數(shù)據(jù)對應(yīng)的下標位置
],
"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: 表示考生從指定組移除,需注意移除后至少應(yīng)還存在一個組中,否則移除失敗
*/
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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
loginValues(二選一字段) 管理員設(shè)定的登錄字段,例如名字,手機等。格式如下: ["李三","張四"] 也可參照實例代碼。
-
sids(二選一字段) 學(xué)生唯一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":[
//如失敗,返回對應(yīng)的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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
start 分頁參數(shù)。
-
limit 查詢個數(shù),最大為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
參數(shù):¶
code=權(quán)限碼&time=當前時間戳
參數(shù)說明:¶
-
code 每個賬戶唯一對應(yīng)的驗證碼,string類型,旗艦會員及以上可在系統(tǒng)設(shè)置->開放平臺設(shè)置中獲取。
-
time 當前時間戳,例如1638768935。
-
start 分頁參數(shù)。
-
limit 查詢個數(shù),最大為100。
-
loginValues 如需查詢單個考生的考試記錄,需配合eid使用。
-
eid 如需查詢單個考生的考試記錄,需配合loginValues使用,詳見示例代碼。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"data":[
{
"viewResult":"https://api.kyexam.com/transgetresult?tid=xxx\u0026token=xxx", //試卷詳情鏈接,其中 '\u0026' 為 '&' 符號, 需要轉(zhuǎn)碼方可正常使用。
"score":"2",//分數(shù)
"passed":"0",//考試是否及格
"status":"1",
"startTime":"1639647217",//考試考試時間
"endTime":"1639647236",//考試結(jié)束時間
"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")
// ↑↑獲取所有考生考試數(shù)據(jù)↑↑
// ↓↓獲取單一考生參與考試的記錄↓↓
// 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)
}