篮球爱好和程序的结合:C#生成NBA赛事预告页面

 

一直看博客园的文章,也没有写篇文章开张下。今天总结下自己最近闲暇时间做的一个NBA赛事预告的页面的程序,也许会比较乱,请大家撮合看吧。

我是一名篮球爱好者,一直关注NBA,就要去赛事预告的网站去看看最近都有哪些比赛要进行,我非常喜欢热火队,是韦德的球迷,欢迎篮球爱好者一块交流交流。好了不扯篮球了,说说我的程序吧。我是用C#的WebBrowser来采集比赛信息的(不用自己往页面添加比赛信息,因为那个实时性比较强,比较麻烦),用程序生成HTML页面,挂到网上。

我用WebBrowser去访问http://nba.sports.sina.com.cn/match_result.php,新浪的比赛预告页面,获取页面元素并解析

View Code
 public static List<MatchAdByDay> GetMatchAdvanceList(int count,out int result)
        {
            List<MatchAdByDay> MatchDayList = new List<MatchAdByDay>();
            WebBrowser mybrowser = new WebBrowser();
            mybrowser.Navigate("http://nba.sports.sina.com.cn/match_result.php"); //比赛预告网站 
            WebBrowser mybrowser2 = new WebBrowser();
            mybrowser2.Navigate("http://www.fengyunzhibo.com/play-list"); //风云直播网站

            while(mybrowser.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }

            while (mybrowser2.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            try
            {
                HtmlElement element = mybrowser.Document.GetElementById("table980middle");
                HtmlElementCollection list = element.GetElementsByTagName("tr");
                List<string> NBAList = new List<string>();
                int a = 0;
                foreach (var v in list)
                {
                    HtmlElement e = v as HtmlElement;
                    string s = e.InnerText;
                    if (s.Contains("星期"))
                    {
                        HtmlElement td = e.GetElementsByTagName("td")[0];//直播时间
                        NBAList.Add(td.InnerText);
                        a += 1;
                    }
                    else
                    {
                        var tds = e.GetElementsByTagName("td");
                        NBAList[a - 1] = string.Format("{0}@{1},{2},{3},{4},{5},{6},{7}", NBAList[a - 1], tds[0].InnerText, tds[2].InnerText, string.Format(@"{0}&{1}", tds[3].InnerText, tds[3].GetElementsByTagName("a")[0].GetAttribute("href")), tds[4].InnerText, string.Format(@"{0}&{1}", tds[8].InnerText, tds[8].GetElementsByTagName("a")[0].GetAttribute("href")), string.Format(@"{0}&{1}", tds[7].InnerText, tds[7].GetElementsByTagName("a")[0].GetAttribute("href")), tds[11].InnerText);
                    }
                }

                for (int j = 0; j < count; j++) //只显示count天
                {
                    MatchAdByDay entity = new MatchAdByDay();
                    MatchDayList.Add(entity);
                }
                for (int j = 0; j < count; j++)
                {
                    List<MatchAdModel> MatchList = new List<MatchAdModel>();
                    string[] matchs = NBAList[j].Split('@');
                    string matchDate = matchs[0];
                    for (int i = 1; i < matchs.Length; i++)
                    {
                        MatchAdModel model = new MatchAdModel();
                        model.MatchDate = matchDate;
                        string[] ls = matchs[i].Split(',');
                        model.MatchTime = ls[0];
                        model.Away = ls[1];
                        model.MatchScore = ls[2].Split('&')[0];
                        model.MatchScoreHref = ls[2].Split('&')[1];
                        model.Home = ls[3];
                        model.MatchData = ls[4].Split('&')[0];
                        model.MatchDataHref = ls[4].Split('&')[1];
                        model.WordLive = "战报/图文直播";
                        model.WordLiveAddress = ls[5].Split('&')[1];
                        #region 视频直播
                        switch (ls[6])
                        {
                            case "新浪体育": MatchLiveModel live = new MatchLiveModel();
                                List<MatchLiveModel> liveList = new List<MatchLiveModel>();
                                live.Title = "新浪直播";
                                live.Address = "http://live.video.sina.com.cn/room/nba";
                                liveList.Add(live);
                                model.Lives = liveList;
                                break;
                            case "中央五套": MatchLiveModel live2 = new MatchLiveModel();
                                List<MatchLiveModel> liveList2 = new List<MatchLiveModel>();
                                live2.Title = "CCTV5";
                                live2.Address = "http://2012.cntv.cn/live/CCTV5/index.shtml";
                                live2.Address2 = "http://sports.cntv.cn/live/cctv5/index.shtml";
                                live2.Address3 = "http://tv.qqst.com/fy/cctv5.htm";
                                liveList2.Add(live2);
                                model.Lives = liveList2;
                                break;
                            default: model.Lives = new List<MatchLiveModel>();
                                break;
                        }
                        #endregion
                        #region 获取风云直播直播列表
                        if (j < 2)
                        {
                            HtmlElement ele = mybrowser2.Document.GetElementById("content");
                            HtmlElementCollection l = ele.GetElementsByTagName("ul")[j].GetElementsByTagName("li");
                            foreach (var m in l)
                            {
                                HtmlElement e = m as HtmlElement;
                                string fyLaber = e.GetElementsByTagName("label")[1].InnerText.Trim().Replace(" ", "");
                                if (fyLaber.Contains(string.Format("{0}-{1}", model.Home, model.Away)))
                                {
                                    MatchLiveModel live = new MatchLiveModel();
                                    HtmlElementCollection ha = e.GetElementsByTagName("a");
                                    live.Title = ha[0].InnerText;
                                    live.Address = ha[0].GetAttribute("href");
                                    if (model.Lives != null)
                                    {
                                        model.Lives.Add(live);
                                    }
                                }
                            }
                        }
                        #endregion

                        MatchList.Add(model);
                    }
                    MatchDayList[j].MatchDayList = MatchList;
                }
                result = 0;
            }
            catch
            {
                result = 1;
            }
            return MatchDayList;
        }

 

解析人家的页面获取比赛预告对象后,就开始生成HTML了

我把这个主要的类给贴出来,写的很乱。说说自己遇到的问题和解决办法:

1:好多NBA爱好者看预告,其中的直播信息是很重要的,可以看看那场比赛有没有电视转播,视频转播,但新浪那个网站只有直播球队,时间,比分等信息,直播信息不全,这个可不行,咋办,我想到了风云直播,我就要解析他的页面了,我可以利用时间和球队名称来匹配那场比赛,然后找出他的直播列表,放入对象中,这样就实现了直播信息的添加。

2:为了美观我想把比赛球队加上图标,图标我已经下载到本地,网络获取的球队都是中文,第一次我就用中文命名图片,来显示图片,可是放到服务器上出问题呢,图片不显示,人家不识别中文啊,我只好利用方法把中文转成拼音,然后图片改成拼音命名,然后就显示出来了。下面是中文转拼音的代码:

View Code
        /// <summary>
        /// 汉字转换成字母
        /// </summary>
        public static string ToSpell(this string str_Chinese)
        {
            try
            {
                Hashtable t = hb();
                byte[] b = System.Text.Encoding.Default.GetBytes(str_Chinese);
                int p;
                StringBuilder ret = new StringBuilder();
                for (int i = 0; i < b.Length; i++)
                {
                    p = (int)b[i];
                    if (p > 128)
                    {
                        p = p * 256 + b[++i] - 65536;
                        ret.Append(g(t, p));
                    }
                    else
                    {
                        ret.Append((char)p);
                    }
                }
                t.Clear();
                return ret.ToString();
            }
            catch
            {
                return "";
            }
        }

 

这样页面就生成出来了

好了就介绍这里了,没啥技术含量,就是利用自己的爱好做点小东西而已,希望大家提意见和建议。网站已经挂到网上,希望篮球爱好者支持下:http://www.5ailanqiu.com/

posted @ 2013-04-12 11:51  小菜?大神?  阅读(891)  评论(7编辑  收藏  举报