起因
用Anki背单词,Android手机上面用AnkiHelp往AnkiDroid添加单词的时候,发音用的是有道的api
之前在PC/MacOS/Android三端都可以正常使用,正常发音。之后各端分别更新了几个版本之后,渐渐发音不好用了。发现只有保存了mp3附件的单词才能够正常发音。
当然首先我是去修改anki卡片,改了半天终于能够让PC端的Anki调用有道api发音了,但是到Android手机上面又不能发音了,手机上面还不好调试。又去官网看了看。
Anki官网Api
大意是说,Anki只是部分支持JavaScript,由于JavaScript太丰富了,Anki不保证现在能用JavaScript实现的功能,在未来Anki更新后还能继续使用,所以建议避免使用JavaScript。
So,PC能发音,Android不能发音大概就是这个锅了。既然用Mp3音频的能够正常发音,那就手动全都修改成Mp3的音频吧!
下载准备
-
首先,有道的Api:
api仅有两个参数,就是发音类型和单词,在audio=后面加上单词就ok了,type=0为美国发音,type=1为英国发音。
例子,美音 king 发音(点击链接):
http://dict.youdao.com/dictvoice?type=0&audio=king例子,英音 king 发音(点击链接):
http://dict.youdao.com/dictvoice?type=1&audio=king由于主要语言用的是Java,就用参考了网上部分的代码,改了改。
参考:
https://blog.youkuaiyun.com/sinat_42483341/article/details/96342364
https://blog.youkuaiyun.com/humanking7/article/details/88630856 -
从Anki导出需要下载的单词列表
第三步:可以发现每一行的第一个单词就是我们需要的单词,后面都是不需要的内容。我们可以用正则表达式(匹配单词或者短语),筛选出我们要的单词。
^\b(\w+((\s\w+)+)?)\b
解释一下这个正则表达式:匹配字符串开头,单词开头,匹配字母数字无数个,单词结尾
Java代码
Application
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 爬取指定链接的一组MP3 文件
*
* 放入指定的目录中
*
*/
public class Application {
public static void main(String[] args) {
System.out.println("请输入需要的单词发音类型:0-美式 1-英式");
Scanner scanner = new Scanner(System.in);
String targetType = scanner.next();
if(targetType.equals("1") && targetType.equals("0")){
System.out.println("您输入的是"+ targetType +",请输入0或1,不支持其他类型!");