概述

智能题库API提供标准化的题库调用接口,支持开发者快速集成题库功能到自己的应用中。所有接口均采用RESTful设计风格,返回JSON格式数据。

基础信息

  • 接口域名:https://api.tiku-api.com
  • API版本:v1
  • 请求方式:GET/POST
  • 数据格式:JSON
  • 编码格式:UTF-8

接口鉴权

所有API接口调用均需要进行身份验证,目前支持API Key + Signature的鉴权方式。

获取API Key

  1. 注册并登录平台账号
  2. 进入「开发者中心」-「应用管理」
  3. 创建新应用,获取API Key和API Secret

请求头参数

参数名 是否必填 说明
Api-Key 平台分配的API Key
Timestamp 当前时间戳(秒)
Signature 签名串,计算方式见下方

签名计算方式

Signature = MD5(Api-Key + Api-Secret + Timestamp)

// Python示例
import hashlib
import time

api_key = "your_api_key"
api_secret = "your_api_secret"
timestamp = str(int(time.time()))

# 计算签名
sign_str = api_key + api_secret + timestamp
signature = hashlib.md5(sign_str.encode()).hexdigest()

print(f"Signature: {signature}")

题库查询接口

接口地址:/v1/question/query

请求方式:POST

请求参数

参数名 类型 是否必填 说明
subject string 学科代码(math/english/physics等)
grade string 学段代码(primary/junior/senior等)
type string 题型(single/blank/essay等)
difficulty int 难度(1-简单,2-中等,3-困难)
page int 页码,默认1
page_size int 每页数量,默认20,最大100

返回示例

{
  "code": 0,
  "msg": "success",
  "data": {
    "total": 1250,
    "page": 1,
    "page_size": 20,
    "list": [
      {
        "id": "q123456",
        "content": "计算:2+3×4 = ?",
        "subject": "math",
        "grade": "primary",
        "type": "single",
        "difficulty": 2,
        "options": [
          {"key": "A", "value": "14"},
          {"key": "B", "value": "20"},
          {"key": "C", "value": "10"},
          {"key": "D", "value": "18"}
        ],
        "create_time": "2025-01-15 10:30:00"
      },
      // 更多题目...
    ]
  }
}

错误码说明

错误码 说明 解决方案
0 成功 -
1001 API Key不存在 检查API Key是否正确
1002 签名验证失败 检查签名计算方式和参数
1003 请求超时 检查Timestamp是否在有效期内
2001 参数错误 检查请求参数是否完整、格式是否正确
2002 暂无数据 调整查询条件
3001 调用次数超限 升级套餐或联系客服
5000 服务器内部错误 联系技术支持

调用示例

Python示例

import requests
import hashlib
import time
import json

# 配置信息
API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
BASE_URL = "https://api.tiku-api.com/v1"

# 生成签名
def generate_signature(api_key, api_secret, timestamp):
    sign_str = api_key + api_secret + timestamp
    return hashlib.md5(sign_str.encode()).hexdigest()

# 题库查询
def query_questions():
    timestamp = str(int(time.time()))
    signature = generate_signature(API_KEY, API_SECRET, timestamp)
    
    # 请求头
    headers = {
        "Api-Key": API_KEY,
        "Timestamp": timestamp,
        "Signature": signature,
        "Content-Type": "application/json"
    }
    
    # 请求参数
    data = {
        "subject": "math",
        "grade": "primary",
        "type": "single",
        "difficulty": 2,
        "page": 1,
        "page_size": 10
    }
    
    # 发送请求
    response = requests.post(
        f"{BASE_URL}/question/query",
        headers=headers,
        json=data
    )
    
    # 处理响应
    if response.status_code == 200:
        result = response.json()
        if result["code"] == 0:
            print("查询成功!")
            print(f"总数:{result['data']['total']}")
            print(f"题目列表:{result['data']['list']}")
        else:
            print(f"查询失败:{result['msg']}")
    else:
        print(f"请求失败:{response.status_code}")

if __name__ == "__main__":
    query_questions()

Java示例

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class TikuApiClient {
    private static final String API_KEY = "your_api_key";
    private static final String API_SECRET = "your_api_secret";
    private static final String BASE_URL = "https://api.tiku-api.com/v1";
    
    // 生成MD5签名
    public static String generateSignature(String apiKey, String apiSecret, String timestamp) {
        try {
            String signStr = apiKey + apiSecret + timestamp;
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(signStr.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : bytes) {
                sb.append(String.format("%02x", b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        }
    }
    
    // 题库查询
    public static void queryQuestions() {
        OkHttpClient client = new OkHttpClient();
        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
        String signature = generateSignature(API_KEY, API_SECRET, timestamp);
        
        // 请求头
        Map params = new HashMap<>();
        params.put("subject", "math");
        params.put("grade", "primary");
        params.put("type", "single");
        params.put("difficulty", 2);
        params.put("page", 1);
        params.put("page_size", 10);
        
        MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON.toJSONString(params), JSON_TYPE);
        
        Request request = new Request.Builder()
                .url(BASE_URL + "/question/query")
                .addHeader("Api-Key", API_KEY)
                .addHeader("Timestamp", timestamp)
                .addHeader("Signature", signature)
                .post(body)
                .build();
        
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                String responseBody = response.body().string();
                System.out.println("查询结果:" + responseBody);
            } else {
                System.out.println("请求失败:" + response.code());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        queryQuestions();
    }
}