主要源码
InBlock.gifusing System;
InBlock.gifusing System.Collections;
InBlock.gifusing System.Collections.Generic;
InBlock.gifusing System.Net;
InBlock.gifusing System.Text;
InBlock.gifusing System.Web;
/////////////////////////////////////////////////////////////////////////////
////////////////////////////作者:kkkkyue////////////////////////////////////
////////////////////////创建时间:2008年9月8日///////////////////////////////
/////////////////////////////////////////////////////////////////////////////
InBlock.gif
InBlock.gifnamespace SougouMp3Search
InBlock.gif{
InBlock.gif    /// <summary>
InBlock.gif    /// MP3结构体
InBlock.gif    /// </summary>
InBlock.gif    public class Mp3Struck
InBlock.gif    {
InBlock.gif        /// <summary>
InBlock.gif        /// 歌名
InBlock.gif        /// </summary>
InBlock.gif        public string Name = "";
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// 歌手名
InBlock.gif        /// </summary>
InBlock.gif        public string Author = "";
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// 类型
InBlock.gif        /// </summary>
InBlock.gif        public string Type = "";
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// 大小
InBlock.gif        /// </summary>
InBlock.gif        public string Size = "";
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// SOGOU下载页面URL
InBlock.gif        /// </summary>
InBlock.gif        public string PageURI = "";
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// 下载地址集合
InBlock.gif        /// </summary>
InBlock.gif        public ArrayList DownloadURI=new ArrayList();
InBlock.gif    }
InBlock.gif
InBlock.gif    /// <summary>
InBlock.gif    /// MP3搜索
InBlock.gif    /// </summary>
InBlock.gif    public class Mp3Search
InBlock.gif    {
InBlock.gif        readonly WebClient wc = new WebClient();
InBlock.gif
InBlock.gif        private const string _URL = "http://mp3.sogou.com/music.so?as=false&w=02009900&_asf=mp3.sogou.com&_ast=1220904551";
InBlock.gif
InBlock.gif        private const string Dwordstr = "&query=";
InBlock.gif
InBlock.gif        private const string Dpage = "&page=";
InBlock.gif
InBlock.gif        //private const int count = 30;
InBlock.gif
InBlock.gif      
InBlock.gif        /// <summary>
InBlock.gif        /// 通过关键字和页数获得SOGOU下载页面URL集合
InBlock.gif        /// </summary>
InBlock.gif        /// <param name="dWord"></param>
InBlock.gif        /// <param name="page"></param>
InBlock.gif        /// <returns></returns>
InBlock.gif        public string[] GetPageURIsByDword(string dWord, int page)
InBlock.gif        {
InBlock.gif            string Html = wc.DownloadString(_URL + Dwordstr + UrlEncode(dWord) + Dpage + page);
InBlock.gif            int count1 = 0;
InBlock.gif            int count2 = 0;
InBlock.gif            int count = 0;
InBlock.gif            while (count1 != -1)
InBlock.gif            {
InBlock.gif                count1 = Html.IndexOf("down.so?gid", count2);
InBlock.gif                if (count1 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count2 = Html.IndexOf("',''", count1);
InBlock.gif                if (count2 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count++;
InBlock.gif            }
InBlock.gif            count1 = 0;
InBlock.gif            count2 = 0;
InBlock.gif
InBlock.gif            string[] mp3Strucks = new string[count];
InBlock.gif            count = 0;
InBlock.gif            while (count1 != -1)
InBlock.gif            {
InBlock.gif                count1 = Html.IndexOf("down.so?gid", count2);
InBlock.gif                if (count1 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count2 = Html.IndexOf("',''", count1);
InBlock.gif                if (count2 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                string td = Html.Substring(count1, count2 - count1);
InBlock.gif                mp3Strucks[count] = td;
InBlock.gif                count++;
InBlock.gif            }
InBlock.gif            return mp3Strucks;
InBlock.gif        }
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// 通过关键字和页数获得MP3结构体集合
InBlock.gif        /// </summary>
InBlock.gif        /// <param name="dWord"></param>
InBlock.gif        /// <param name="page"></param>
InBlock.gif        /// <returns></returns>
InBlock.gif        public Mp3Struck[] GetListByDword(string dWord, int page)
InBlock.gif        {
InBlock.gif            string Html = wc.DownloadString(_URL + Dwordstr + UrlEncode(dWord) + Dpage + page);
InBlock.gif            int count1 = 0;
InBlock.gif            int count2 = 0;
InBlock.gif            int count = 0;
InBlock.gif            while (count1!=-1)
InBlock.gif            {
InBlock.gif                count1 = Html.IndexOf("down.so?gid", count2);
InBlock.gif                if (count1==-1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count2 = Html.IndexOf("',''", count1);
InBlock.gif                if (count2==-1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count++;
InBlock.gif            }
InBlock.gif            count1 = 0;
InBlock.gif            count2 = 0;
InBlock.gif
InBlock.gif            Mp3Struck[] mp3Strucks = new Mp3Struck[count];
InBlock.gif            count = 0;
InBlock.gif            while (count1 != -1)
InBlock.gif            {
InBlock.gif                count1 = Html.IndexOf("down.so?gid", count2);
InBlock.gif                if (count1 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count2 = Html.IndexOf("',''", count1);
InBlock.gif                if (count2 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                string td = Html.Substring(count1, count2 - count1 );
InBlock.gif                mp3Strucks[count] = GetDownURI(td);
InBlock.gif                mp3Strucks[count].PageURI = td;
InBlock.gif                count++;
InBlock.gif            }
InBlock.gif            return mp3Strucks;
InBlock.gif        }
InBlock.gif
InBlock.gif
InBlock.gif        /// <summary>
InBlock.gif        /// 通过SOGOU下载页面获得MP3结构体
InBlock.gif        /// </summary>
InBlock.gif        /// <param name="downURI"></param>
InBlock.gif        /// <returns></returns>
InBlock.gif        public Mp3Struck GetDownURI(string downURI)
InBlock.gif        {
InBlock.gif            Mp3Struck mp3Struck=new Mp3Struck();
InBlock.gif            mp3Struck.PageURI = downURI;
InBlock.gif            string htm2 = "";
InBlock.gif            htm2 = wc.DownloadString("http://mp3.sogou.com/" + downURI);
InBlock.gif            int count1 = 0;
InBlock.gif            int count2 = 0;
InBlock.gif
InBlock.gif            count2 = htm2.IndexOf("歌名:<a", count2);
InBlock.gif            count1 = htm2.IndexOf(">", count2);
InBlock.gif            count2 = htm2.IndexOf("</a", count1);
InBlock.gif            mp3Struck.Name = htm2.Substring(count1 + 1, count2 - count1 - 1);
InBlock.gif
InBlock.gif            count2 = htm2.IndexOf("歌手:<a", count2);
InBlock.gif            count1 = htm2.IndexOf(">", count2);
InBlock.gif            count2 = htm2.IndexOf("</a", count1);
InBlock.gif            mp3Struck.Author = htm2.Substring(count1 + 1, count2 - count1 - 1);
InBlock.gif
InBlock.gif            count1 = htm2.IndexOf("格式:", count2);
InBlock.gif            count2 = htm2.IndexOf("</td>", count1);
InBlock.gif            mp3Struck.Type = htm2.Substring(count1 + 3, count2 - count1 - 3);
InBlock.gif
InBlock.gif            count1 = htm2.IndexOf("大小:", count2);
InBlock.gif            count2 = htm2.IndexOf("</td>", count1);
InBlock.gif            mp3Struck.Size = htm2.Substring(count1 + 3, count2 - count1 - 3);
InBlock.gif            while (count1 != -1)
InBlock.gif            {
InBlock.gif                count1 = htm2.IndexOf("http://", count2);
InBlock.gif                if (count1 == -1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                count2 = htm2.IndexOf("\">", count1);
InBlock.gif                if (count2==-1)
InBlock.gif                {
InBlock.gif                    break;
InBlock.gif                }
InBlock.gif                string td = htm2.Substring(count1, count2 - count1);
InBlock.gif                mp3Struck.DownloadURI.Add(td);
InBlock.gif            }
InBlock.gif            return mp3Struck;
InBlock.gif        }
InBlock.gif
InBlock.gif        private static string UrlEncode(string url)
InBlock.gif        {
InBlock.gif            return HttpUtility.UrlEncode(url, Encoding.GetEncoding("GB2312"));
InBlock.gif        }
InBlock.gif
InBlock.gif    }
InBlock.gif}
 
整个类没什么特别有技术含量的东西,
提供了3个方法
InBlock.gifpublic string[] GetPageURIsByDword(string dWord, int page)
 
InBlock.gifpublic Mp3Struck[] GetListByDword(string dWord, int page)
 
InBlock.gifpublic Mp3Struck GetDownURI(string downURI)
 
第2方法是获取一个 MP3STRUCK的集合
MP3STRUCK是一个结构体用来保存MP3的各种信息 包括 歌手 歌名 下载地址 等等
但是由于这个方法一次要请求30多个 SOUGOU的页面 所以不推荐使用
 
第1个方法是返回歌曲下载链接的集合
 
第3个方法则可以通过返回的歌曲下载链接地址 获取MP3STRUCK
 
下面是利用片段
InBlock.gifprotected void Button1_Click(object sender, EventArgs e)
InBlock.gif        {
InBlock.gif            SougouMp3Search.Mp3Search cl = new Mp3Search();
InBlock.gif            SougouMp3Search.Mp3Struck[] mp3Strucks = cl.GetListByDword(TextBox1.Text.Trim(), Convert.ToInt32(TextBox2.Text.Trim()));
InBlock.gif            foreach (var struck in mp3Strucks)
InBlock.gif            {
InBlock.gif                Response.Write("歌手:" + struck.Author + "</br>");
InBlock.gif                Response.Write("歌名:" + struck.Name + "</br>");
InBlock.gif                Response.Write("类型:" + struck.Type + "</br>");
InBlock.gif                Response.Write("大小:" + struck.Size + "</br>");
InBlock.gif                int count = 1;
InBlock.gif                foreach (var h in struck.DownloadURI)
InBlock.gif                {
InBlock.gif                    Response.Write("<a href=\""+h+"\">下载"+count + "</a></br>");
InBlock.gif                    count++;
InBlock.gif                }
InBlock.gif                Response.Write("</br>");
InBlock.gif            }
InBlock.gif        }