惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

Wulu's Blog

开放课程推荐 「面向所有人的 AI 提示词技巧」 2025 读书总结 树莓派5 优化与踩坑 在 Antigravity 使用 VS Code 应用扩展商店 树莓派安装 OpenWrt 及扩容教程 使用 Docker 在树莓派上安装 Moritx 下载工具 使用 Home Assistant 将米家设备接入 HomeKit 教程 Docker容器中的定时任务:使用Supercronic运行Python脚本 在 AI 时代,我为什么写博客? 记录 DIY 更换 CASIO G-SHOCK GBA-800 电池过程 2024 读书总结 使用 Audacity 制作立体音效果 使用 Audacity 进行音频降噪教程 Moonhack 2024: 缓解气候变化 谈谈 Follow 这款 RSS 阅读器 OpenAI Python API 新版本示例 使用HomeAssistant将米家设备接入到HomeKit AutoHotkey 脚本实现一键复制文本到 ChatGPT 提示模板 开放课程推荐 「面向开发者的 ChatGPT 提示词工程」 指定 Whisper 输出为简体中文 Api2d 国内可用的chatgpt api代理 利用chatgpt实现编程想法的实践-PyPower 树莓派安装docker版百度网盘 近期音乐分享 AI绘画 6PEN 人工智能艺术?
树莓派 | 欧路词典生词本 & 墨墨背单词 云同步教程 (eudic-maimemo-sync)
2025-04-16 · via Wulu's Blog

在浏览网页时,我常用欧路词典的“欧路翻译”浏览器插件进行划词翻译。这个插件会自动记录查阅过的单词,并将其添加到欧路词典的生词本中。 然而,在单词记忆方面,我更习惯使用“墨墨背单词”。

因此,我在寻找一种方法,将欧路词典的生词本同步到墨墨背单词的词库。这样,我就可以用自己习惯的软件来记忆日常阅读中遇到的生词了。

欧陆墨墨.png

后来我发现,这两个软件其实都提供开放 API。于是,我开发了 eudic-maimemo-sync 工具,实现欧路词典生词本到墨墨背单词云词库的自动同步。同时,我还将其部署在树莓派上,让它每天自动运行,实现了生词本的无缝同步。

image.png

接下来,我将介绍如何配置和使用这个工具,并分享开发过程中遇到的一些问题和解决方法。也欢迎大家贡献代码或提出建议。

目录

eudic-maimemo-sync 使用教程

1. 下载代码安装依赖

前置条件:已安装 Python 3 环境

下载代码:

git clone https://github.com/eMUQI/eudic-maimemo-sync.git

安装依赖:

cd eudic-maimemo-sync
pip install -r requirements.txt

2. 配置环境变量

接下来,需要配置环境变量。首先,复制 .env.example.env

2.1 欧路词典相关配置

  • 获取欧路词典 API 密钥

    访问此页面,登录后,获取你的API密钥。并将获取到的 API 密钥填入.env文件中的EUDIC_API_KEY字段。

    image.png
  • 获取生词本 ID

    运行 get_wordbook_id.py,查看生词本信息,记下你需要同步的生词本 ID。

    python get_wordbook_id.py
    image.png

    将需要同步的生词本 ID 填入 .env 中的 EUDIC_CATEGORY_ID

2.2 墨墨背单词相关配置

  • 获取墨墨背单词 API 密钥

    打开墨墨背单词手机 App,进入「我的」-「更多设置」-「实验功能」-「开放 API」,生成并复制 API 密钥,然后将其填入 .env 文件中的 MOMO_API_KEY 字段。

  • 获取云词库 ID

    运行 get_notepad_id.py,查看云词库信息,记住你需要同步的云词库 ID。

    python get_notepad_id.py
    image.png

    将需要同步的词库 ID 填入 .env 文件中的 MOMO_NOTEPAD_ID 字段。

3. 手动同步

运行 sync.py,即可手动触发一次同步。

python sync.py

4. 自动同步(部署到树莓派上或者其他 Linux 设备)

确保部署前已经成功手动运行过 python sync.py,验证配置无误。

使用Docker

我个人比较喜欢用 Docker, 隔离性好,依赖管理简单,不会弄乱系统的环境。在我的树莓派 5 上运行良好,额外的性能开销在可接受范围内。

创建一个 docker-compose.yml 配置文件:

services:
  eudic-maimemo-sync:
    image: ghcr.io/emuqi/eudic-maimemo-sync:latest
    container_name: eudic-maimemo-sync
    restart: unless-stopped
    env_file:
      - .env
    # volumes:
    #   - ./words_data.txt:/app/words_data.txt # 如果想查看单词记录,取消此行和上一行的注释
    environment:
      - TZ=Asia/Shanghai
      - RUN_ON_STARTUP=true # 设置为 true 时,容器每次启动时会执行一次同步任务
      # CRON 定时任务表达式配置:
      # 示例:每小时的第 0 分钟执行(即整点执行)
      # - CRON_SCHEDULE=0 * * * *
      # 示例:每天凌晨 3:15 执行
      - CRON_SCHEDULE=15 3 * * *
      # 请确保所有必需的环境变量(如 EUDIC_API_KEY 等)已在 .env 文件中定义或在此处直接指定。
    healthcheck:
      # Test if the supercronic process is running
      test: ["CMD-SHELL", "pgrep supercronic || exit 1"]
      interval: 2m
      timeout: 5s
      retries: 3
      start_period: 10s

你可以通过 CRON_SCHEDULE 来设置任务的运行周期:

  • CRON_SCHEDULE=0 * * * *: 每小时的第 0 分钟执行(即整点执行)
  • CRON_SCHEDULE=15 3 * * *: 每天凌晨 3:15 执行

在相同目录下创建一个 words_data.txt 文件,用于记录同步的单词列表,方便调试或查看。如果不需要,可以跳过此步。

touch words_data.txt

启动容器

docker compose up -d

其他方式

你还可以使用 cron 或者 systemctl 的方式来定时运行这个同步脚本。如果你熟悉这些工具的配置,欢迎分享你的方法或提交 Pull Request。


开发中遇到的问题

  1. 欧路词典 API 的 User-Agent 要求: 欧路词典 API 对请求的 User-Agent 有特定要求,不接受 Python HTTP 库(如 requests)的默认 User-Agent。因此,在与该 API 交互时,必须显式设置一个浏览器类型的 User-Agent,以确保请求被正确处理。本项目中,我采用了 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36

  2. 墨墨背单词 API 云词库格式: 墨墨背单词 API 文档中关于添加单词到云词库所需的数据格式说明不够清晰。文档中只说明数据类型是 string,但未明确其具体结构。经过试验,结构为以井号 # 开头的行作为分类标记(例如日期),换行后紧跟该分类下的单词,每个单词独占一行。下一个分类同样以 # 开头的标记开始。如 #20250415\napple\nboy#20250416\ncat

    #20250415
    apple
    boy
    #20250416
    cat
  3. Docker 中定时任务:从 Cron 到 Supercronic 的迁移: 一开始,我尝试在 Docker 容器内部署 Cron 来定时执行 Python 任务。但是,Cron 任务默认在隔离的、极简的环境中执行,无法直接继承 Docker 容器启动时定义的环境变量(例如 API 密钥等配置)。虽然有方法可以间接加载,但配置比较繁琐。于是我迁移到了 SupercronicSupercronic 是一款专为容器环境设计的 Cron 实现,它兼容标准的 Crontab 语法,还能继承容器的环境变量。如果你有类似的项目,推荐你使用 Supercronic 作为替代方案。

最后,欢迎提交 Pull Requests 或 Issues 到 eudic-maimemo-sync。有任何想法,也欢迎在下方留言。

相关链接