zoukankan      html  css  js  c++  java
  • 从谷歌和译典通能上自动下载英语单词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

  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/rockniu/p/1561251.html
Copyright © 2011-2022 走看看