import win.ui; import win.ui.atom; /*DSG{{*/ var frmWebView = win.form(text="COCA 20000 生词本练习";right=999;bottom=622) frmWebView.add() /*}}*/ var atom,hwnd= frmWebView.atom("B9935759-6658-4FCC-8250-6407337469F0.COCA20000"); if(!atom)return frmWebView.close(); import web.view; var wb = web.view(frmWebView); import fsys.table; var config = fsys.table(io.appData("aardio/std/tools/coca2000.table"),{newWords={}}); var newWords = config.newWords; var dataset = [] import table.coca20000; for(i,v in table.coca20000){ if(newWords[v.word]){ table.push(dataset,v); } } if(#dataset<10){ win.msgboxErr("生词本单词数目不能少于 10 个。"); return frmWebView.close(); } wb.export( getNewWords = function(){ return dataset; } pronounce = function(word,site){ var url; if(site=="youdao"){ url = "https://dict.youdao.com/dictvoice?audio="+word+"&type=2" } else{ if(!soundUrlCache) soundUrlCache = table.cache(); url = soundUrlCache[word] || ..thread.invokeAndWait( function(word){ import web.rest.htmlClient; var http = web.rest.htmlClient(); var webster = http.api("https://www.merriam-webster.com/dictionary/","GET"); var htmlDoc = webster[word].get();//抓取韦氏词典网页 var ele = htmlDoc.queryEle({"class":"play-pron-v2"});//获取指定 HTML 元素 var url; if(ele && ele["data-dir"] && ele["data-file"]){ //合成韦氏词典美式发音链接 url = "https://media.merriam-webster.com/audio/prons/en/us/mp3/" + ele["data-dir"] + "/" + ele["data-file"] + ".mp3" } else{ //合成柯林斯词典美式发音链接 url = "https://www.collinsdictionary.com/sounds/hwd_sounds/en_us_"+string.lower(word)+".mp3" } return url; } ,word ) soundUrlCache[word] = url; } wmPlayer := com.CreateObject("WMPlayer.OCX"); wmPlayer.url = url; } ) wb.html = /********