快速开始

使用 api.keykey.im 查询多语言词条、释义、读音、例句和结构化词典信息。

第一次查询

建议在公开查词场景启用 includeLocalDictionaryFallback=true。完整记忆卡片不存在时,接口仍可返回本地词典中的基础词形、释义和读音。

curl -G https://api.keykey.im/api/public/memory-card \
  --data-urlencode 'word=hello' \
  -d lang=en \
  -d includeLocalDictionaryFallback=true

JavaScript / TypeScript

async function getMemoryCard(word, lang = 'en') {
  const params = new URLSearchParams({
    word,
    lang,
    includeLocalDictionaryFallback: 'true',
  })

  const response = await fetch(
    `https://api.keykey.im/api/public/memory-card?${params}`,
    { cache: 'no-store' },
  )
  const payload = await response.json()

  if (!response.ok || !payload.success) {
    throw new Error(payload.error || `HTTP ${response.status}`)
  }

  console.log('展示词形:', payload.data.displayWord || payload.data.word)
  console.log('完整释义:', payload.data.trans)
  console.log('练习释义:', payload.data.practiceTrans)
  console.log('剩余配额:', payload.rateLimit.remaining)

  return payload.data
}

const card = await getMemoryCard('hello')

Python

import requests

def get_memory_card(word: str, lang: str = 'en'):
    response = requests.get(
        'https://api.keykey.im/api/public/memory-card',
        params={
            'word': word,
            'lang': lang,
            'includeLocalDictionaryFallback': 'true',
        },
        timeout=15,
    )
    payload = response.json()

    if not response.ok or not payload.get('success'):
        raise RuntimeError(payload.get('error', f'HTTP {response.status_code}'))

    return payload['data']

card = get_memory_card('日本', 'ja')
print(card.get('notation'))
print(card.get('kanaReading'))
print(card.get('practiceWord'))

PHP

<?php
function getMemoryCard($word, $lang = 'en') {
    $query = http_build_query([
        'word' => $word,
        'lang' => $lang,
        'includeLocalDictionaryFallback' => 'true',
    ]);

    $url = 'https://api.keykey.im/api/public/memory-card?' . $query;
    $payload = json_decode(file_get_contents($url), true);

    if (!$payload['success']) {
        throw new Exception($payload['error'] ?? '查询失败');
    }

    return $payload['data'];
}

$card = getMemoryCard('bonjour', 'fr');
echo $card['displayWord'] ?? $card['word'];
?>

读取响应

新版本把词条身份、展示词形和练习输入分开,并提供完整/练习两套释义:

{
  "success": true,
  "data": {
    "word": "日本",
    "languageCategory": "ja",
    "trans": ["日本"],
    "phonetic": "nippon",
    "phoneticSystem": "romaji",
    "notation": "日本(にっぽん)",
    "kanaReading": "にっぽん",
    "practiceWord": "nippon",
    "practiceAliases": ["nippon"],
    "lexemeKey": "ja:日本:にっぽん",
    "examples": [],
    "cached": true
  },
  "rateLimit": {
    "remaining": 149,
    "limit": 150,
    "reset": "2026-08-24T16:00:00.000Z"
  }
}

reset 使用 ISO 8601;上例的 2026-08-24T16:00:00.000Z 对应北京时间 2026 年 8 月 25 日 00:00。

批量查询

一次查询多个词时,直接使用批量接口,不需要在客户端循环请求:

const response = await fetch(
  'https://api.keykey.im/api/public/memory-card/batch-query',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      words: ['hello', 'world', 'study'],
      languageCategory: 'en',
      includeLocalDictionaryFallback: true,
      definitionMode: 'practice',
    }),
  },
)

const payload = await response.json()

下一步

Was this page helpful?