篮球爱好和程序的结合: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);}}}}#endregionMatchList.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/
轉載于:https://www.cnblogs.com/zb-success/archive/2013/04/12/zb.html
總結
以上是生活随笔為你收集整理的篮球爱好和程序的结合:C#生成NBA赛事预告页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt延时和startTimer
- 下一篇: 【转】CCIE一年后的心语