Adding channel name clean up.
Adding card mapping support but it's not working.
2 using System.Collections.Generic;
5 using System.Threading.Tasks;
7 using System.Diagnostics;
16 // Create a new CQ object wrapping a single element.
20 // URL to a KingOfSat channel list. Typically a package list.
23 // List of channels parsed.
24 public static List<Channel> Parse(string aUrl, string aOrbitalPosition)
26 string kos = new WebClient().DownloadString(aUrl);
31 //Get all the Frequency elements in our page
32 CQ sats = dom[".frq"];
34 //Create our list of channels
35 List<Channel> channels = new List<Channel>();
37 foreach (IDomObject frq in sats.ToList())
39 Channel common = new Channel();
41 //Parse channel details
42 common.OrbitalPosition = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td > a > font").Get(0).InnerText).Trim();
43 if (common.OrbitalPosition != aOrbitalPosition)
48 common.Satellite = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(2) > a").Get(0).InnerText);
49 common.Frequency = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(3)").Get(0).InnerText);
50 common.Polarisation = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(4)").Get(0).InnerText);
51 common.Transponder = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(5) > a").Get(0).InnerText);
52 common.Beam = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(6) > a").Get(0).InnerText);
53 common.Standard = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(7)").Get(0).InnerText);
54 common.Modulation = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(8)").Get(0).InnerText);
55 common.SymbolRate = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(9) > a").Get(0).InnerText);
56 common.FEC = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(9) > a:nth-child(2)").Get(0).InnerText);
59 common.Provider = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(10) > b").Get(0).InnerText);
65 common.Bitrate = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(10)").Get(0).InnerText);
66 if (common.Bitrate.Substring(0, ", ".Length) == ", ")
68 common.Bitrate = common.Bitrate.Substring(", ".Length, common.Bitrate.Length - ", ".Length);
71 common.NetworkID = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(11)").Get(0).InnerText);
72 common.NetworkID = common.NetworkID.Substring("NID:".Length, common.NetworkID.Length - "NID:".Length);
74 common.TransponderID = WebUtility.HtmlDecode(frq.Cq().Find("tbody > tr > td:nth-child(12)").Get(0).InnerText);
75 common.TransponderID = common.TransponderID.Substring("TID:".Length, common.TransponderID.Length - "TID:".Length);
77 //We got common properties for the coming channels
78 //Debug.Write(common.ToString());
80 //Now get all the channels for that frequency
81 //Channel common = new Channel();
83 CQ channelsDiv = frq.Cq().Next("div");
84 CQ channelsTableRows = channelsDiv.Find("table.fl > tbody").Children("tr");
86 foreach (IDomObject row in channelsTableRows)
88 Channel channel = new Channel();
89 //Initialize this channel with common properties on this frequency
92 //Try and parse channel name
93 CQ cqChannelName = row.Cq().Find("td:nth-child(3) > a");
94 if (cqChannelName.Length == 0)
96 cqChannelName = row.Cq().Find("td:nth-child(3) > i");
97 if (cqChannelName.Length == 0)
99 //Can't get channel name
100 Debug.Write("WARNING: Can't find channel name! Skipping this channel");
105 channel.Name = WebUtility.HtmlDecode(cqChannelName.Get(0).InnerText).Trim();
106 if (channel.Name == "Name")
108 //Skipping header rows
112 //Make sure our channel name looks descent
113 channel.Name = CleanChannelName(channel.Name);
115 //So we have a channel name get the other properties then
116 channel.Country = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(4)").Get(0).InnerText).Trim();
117 channel.Category = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(5)").Get(0).InnerText).Trim();
119 //Skip the encryptions
120 channel.SID = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(8)").Get(0).InnerText).Trim();
121 channel.VPID = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(9)").Get(0).InnerText).Trim();
123 channel.PMT = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(11)").Get(0).InnerText).Trim();
124 channel.PCR = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(11)").Get(0).InnerText).Trim();
125 channel.TXT = WebUtility.HtmlDecode(row.Cq().Find("td:nth-child(11)").Get(0).InnerText).Trim();
127 //Append that new channel to our list
128 channels.Add(channel);
130 //Show it in debug output
131 Debug.Write(channel);
133 } //For each frequency
139 public static string CleanChannelName(string aName)
142 string[] remove = { "Germany", "Deutschland", "(Germany)", "(Deutschland)" };
144 foreach (string item in remove)
146 if (aName.EndsWith(item))
148 aName = aName.Substring(0, aName.LastIndexOf(item));
149 break; //only allow one match at most