• 从谷歌和译典通能上自动下载英语单词mp3的好方法


    最近在学英语,很多单词不怎么会读.每次得去iciba.com和dreye.com上查,很是麻烦!

    后来一想,能不能写个程序自动下载?测试一番,最终搞定!

    下载的都是真人语音mp3,效果很棒!谷歌爱词霸是女声发音,译典通是男声发音,各有千秋.

    核心的代码:

    bool DownMp3FromDrEye(string word, string localPath)
            {
                HttpWebRequest webRequest
    = WebRequest.Create("http://www.dreye.com.cn/ews/dict.php") as HttpWebRequest;
                webRequest.Method
    = "POST";
                webRequest.ContentType
    = "application/x-www-form-urlencoded";

               
    string postString = "w=" + word;
                postString
    = System.Web.HttpUtility.HtmlEncode(postString);
               
    byte[] postData = Encoding.ASCII.GetBytes(postString);
                webRequest.ContentLength
    = postData.Length;

                Stream reqStream
    = webRequest.GetRequestStream();
                reqStream.Write(postData,
    0, postData.Length);
                reqStream.Close();

                Stream respStream
    = webRequest.GetResponse().GetResponseStream();
                StreamReader reader
    = new StreamReader(respStream, true);
               
    string html = reader.ReadToEnd();
                respStream.Close();
               
    //Debug.Write(html);

               
    string prefix = "http{add}";
               
    int i = html.IndexOf(prefix);
               
    int k = i + prefix.Length;
               
    string mp3Url = "http:";
               
    while (html.Substring(k,1)!="\"")
                {
                    mp3Url
    += html.Substring(k, 1);
                    k
    ++;
                }

                Debug.WriteLine(
    "Word:" + word + ", URL; " + mp3Url);

               
    if (!mp3Url.EndsWith(".mp3"))
                {
                   
    return false;
                }

                SetLog(
    "Downloading from DrEye.com");
                SetLog(
    "Mp3 URL: " + mp3Url);
                DownFile(mp3Url, Path.Combine(localPath, word
    + ".mp3"), true);
               
    return true;
            }

           
    bool DownMp3FromIciba(string word, string localPath)
            {
               
    //_customerDetail =  _customerDb.GetCustomerById(1);
                string icabaWebUrl = "http://www.iciba.com/";
               
    string wordWebUrl = icabaWebUrl + word + "/";
                HttpWebRequest webRequest1
    = WebRequest.Create(new Uri(wordWebUrl)) as HttpWebRequest;
                HttpWebResponse webResponse1
    = webRequest1.GetResponse() as HttpWebResponse;
                Stream stream1
    = webResponse1.GetResponseStream();
                StreamReader reader1
    = new StreamReader(stream1);
               
    string html = reader1.ReadToEnd();

               
    string mp3TextStarter = "echoAudio(\"";
                int starterIndex = html.IndexOf(mp3TextStarter);
               
    int realIndex = starterIndex + mp3TextStarter.Length;
               
    string mp3Url = "";
               
    while (html.Substring(realIndex, 1) != "\"")
                {
                    mp3Url
    = mp3Url + html.Substring(realIndex, 1);
                    realIndex
    ++;
                }
                Debug.WriteLine(
    "Word:" + word + ", URL; " + mp3Url);
               
    if (!mp3Url.EndsWith(".mp3"))
                {
                   
    return false;
                }
                SetLog(
    "Downloading from Iciba.com");
                SetLog(
    "Mp3 URL: " + mp3Url);

                DownFile(mp3Url, Path.Combine(localPath, word
    + ".mp3"), true);
                stream1.Close();
               
    return true;
            }

           
    void DownFile(string fileUrl, string localPath, bool replace)
            {
               
    if (File.Exists(localPath) && !replace)
                {
                   
    return;
                }

               
    try
                {
                    HttpWebRequest webRequest2
    = WebRequest.Create(new Uri(fileUrl)) as HttpWebRequest;
                    Stream stream2
    = webRequest2.GetResponse().GetResponseStream();//TODO:Don't use GetRequestStream() directly.
                    StreamReader sr2 = new StreamReader(stream2);
                    FileStream localFile
    = new FileStream(localPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                    StreamWriter writer
    = new StreamWriter(localFile);
                   
    int bufferSize = 1024;
                   
    byte[] buffer = new byte[bufferSize];
                   
    int readcount = stream2.Read(buffer, 0, bufferSize);
                   
    while (readcount > 0)
                    {
                        localFile.Write(buffer,
    0, readcount);
                        readcount
    = stream2.Read(buffer, 0, bufferSize);
                    }
                    localFile.Close();
                    stream2.Close();               
                }
               
    catch (Exception)
                {                
                   
    throw;
                }
             
            }

    界面示例:

    未命名

    软件下载:

    WordMp3Downloader.rar

  • 相关阅读:
    浅谈.NET和JAVA的跨平台
    ADO.NET获取TIPTOP存储过程的返回值
    Hide DataGrid Columns via HeaderText
    笑话一则:开车的最高境界
    [推薦]面试时最常问的15问题
    美国小学生守则 VS 中国小学生守则
    Embedded UserControls: Revisited
    SOA认识存误区 详解SOA企业部署的六大关键要素
    Java、.NET,为什么不合二为一?
    [轉]informix语句祥解
  • 原文地址:https://www.cnblogs.com/rockniu/p/1561251.html
Copyright © 2020-2023  润新知