📑 每日商务英语学习推送机器人 – 第二辑

第一辑我们完成了学习/复习闭环,并稳定地实现了每日推送。

在使用过程中,用户反馈了一个不足之处:

虽然我们能看到中文解释和例句,但缺少音标和发音音频,对于英语学习体验不够完整。


数据库扩展

CREATE TABLE `business_vocab` (
  `id` int NOT NULL AUTO_INCREMENT,
  `term` varchar(255) NOT NULL COMMENT '英文单词或短语',
  `part_of_speech` varchar(50) DEFAULT NULL COMMENT '词性(如n.、v.、adj.)',
  `translation` text NOT NULL COMMENT '中文解释',
  `example_sentence` text NOT NULL COMMENT '英文例句',
  `example_chinese` text COMMENT '(可选)中文例句翻译',
  `learned` tinyint(1) DEFAULT '0' COMMENT '是否已学习',
  `needs_review` tinyint(1) DEFAULT '0' COMMENT '是否标记为待复习',
  `learn_date` date DEFAULT NULL COMMENT '首次学习日期',
  `review_count` int DEFAULT '0' COMMENT '复习次数',
  `last_review_date` date DEFAULT NULL COMMENT '上次复习日期',
  `phonetic` varchar(100) DEFAULT NULL COMMENT '国际音标',
  `audio_url` varchar(255) DEFAULT NULL COMMENT '单词发音音频链接',
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_term` (`term`)
) ENGINE=InnoDB AUTO_INCREMENT=512 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci


在原有表结构上,增加了两个关键字段:

  • phonetic 字段:存储国际音标,方便后续发音学习。
  • audio_url 字段:更新注释为「单词发音音频链接」,增强可读性。

音标与读音清洗脚本

数据来源

  • 使用开源 Free Dictionary API (dictionaryapi.dev) 获取词汇详情。

https://api.dictionaryapi.dev/api/v2/entries/en

  • 响应中包含 phonetics 字段,既有国际音标(如 /hɛd/),也有音频文件链接(mp3)。

清洗逻辑

核心脚本实现步骤:

  1. 查询数据库中缺失音标或音频的词条
  2. 调用 Dictionary API 获取 phonetic & audio。
  3. 优先使用英式音标与英式发音(符合学习需求)。
  4. 写回 MySQL
    • phonetic 填写 IPA 格式音标
    • audio_url 填写 mp3 直链
  5. 日志输出区分成功与失败:
    • ✅ 成功补全音标与发音
    • ℹ️ 仅获取到音标 / 仅获取到音频
    • ❌ 未找到该单词

飞书卡片效果

新的飞书卡片格式:

  • /hɛd/ → 来自 phonetic 字段
  • 🔊 → 实际是一个可点击的超链接,链接到 audio_url,点击即可播放发音

主循环脚本在逻辑上保持一致,生成卡片时会优先读取 phonetic 和 audio_url。

若字段为空,不影响推送(自动省略音标与喇叭按钮)。


刷库参考语句

在测试或数据初始化时,可以用下面 SQL 将所有词条重置

UPDATE business_vocab
SET learned = 0,
    needs_review = 1,
    learn_date = NULL,
    review_count = 0,
    last_review_date = NULL,
    phonetic = NULL,
    audio_url = NULL;

在对于已经学习过的单词,可以用下面 SQL 将指定词语刷成已学习态

UPDATE business_vocab
SET learned = 1,
    needs_review = 1,
    learn_date = CURDATE(),
    review_count = 0,
    last_review_date = NULL
WHERE term IN ('reposition', 'sick', 'prototype', 'conflict', 'vision');

数据库备份

mysqldump -h 127.0.0.1 -u root -p --databases english_study > english_study_backup_$(date +%F).sql

数据库恢复

mysql -h 127.0.0.1 -u root -p < english_study_backup_2025-09-08.sql