private List <TengxunIndexInfoEntity> GetIndexData(List <string> codes) { var separator = Convert.ToChar(10); var list = new List <TengxunIndexInfoEntity>(); var container = new List <string>(); if (codes != null || codes.Count > 0) { codes.ForEach(cd => { var code = cd.Trim().ToLower(); if (!container.Contains(code)) { container.Add(code); } }); var scodes = string.Join(",", container); //var sb = new StringBuilder(); //container.ForEach(cd => //{ // var market = TengxunIndexInfoEntity.TellMarket(cd); // if (market == MARKET.none) return; // var ncode = market.ToString() + cd; // if (sb.Length > 0) sb.Append(","); // sb.Append(ncode); //}); var parameters = new Dictionary <string, string>(); parameters.Add("q", scodes); var script = WebRequestor.Send(url, parameters, WebRequestor.RequestMethod.get, Encoding.GetEncoding("GB2312")); var scripts = (!string.IsNullOrWhiteSpace(script)) ? new List <string>(script.Split(new char[] { separator })) : new List <string>(); scripts.ForEach(scrpt => { TengxunIndexInfoEntity info = null; TryParse(scrpt, out info); if (info != null) { list.Add(info); } }); } return(list); }
private bool TryParse(string script, out TengxunIndexInfoEntity entity) { entity = null; if (string.IsNullOrWhiteSpace(script)) { return(false); } var match = Regex.Match(script, "^[a-zA-Z0-9/_]+[=]{1}\"(?<data>.*)\";$", RegexOptions.IgnoreCase | RegexOptions.Singleline); var result = match.Success; if (result) { var data = match.Groups["data"].Value; if (string.IsNullOrWhiteSpace(data)) { return(false); } string[] temp = data.Split('~'); if (temp.Length < 50) { return(false); } entity = new TengxunIndexInfoEntity(); entity.Name = temp[1]; entity.Code = temp[2]; entity.Current = (string.IsNullOrWhiteSpace(temp[3])) ? 0m : decimal.Parse(temp[3]); entity.YesterdayClose = (string.IsNullOrWhiteSpace(temp[4])) ? 0m : decimal.Parse(temp[4]); entity.TodayOpen = (string.IsNullOrWhiteSpace(temp[5])) ? 0m : decimal.Parse(temp[5]); var stime = temp[30]; var year = Convert.ToInt32(stime.Substring(0, 4)); var month = Convert.ToInt32(stime.Substring(4, 2)); var day = Convert.ToInt32(stime.Substring(6, 2)); var hour = Convert.ToInt32(stime.Substring(8, 2)); var minute = Convert.ToInt32(stime.Substring(10, 2)); var second = Convert.ToInt32(stime.Substring(12, 2)); entity.Time = new DateTime(year, month, day, hour, minute, second); entity.High = (string.IsNullOrWhiteSpace(temp[33])) ? 0m : decimal.Parse(temp[33]); entity.Low = (string.IsNullOrWhiteSpace(temp[34])) ? 0m : decimal.Parse(temp[34]); entity.GVolAmount = (string.IsNullOrWhiteSpace(temp[36])) ? 0m : int.Parse(temp[36]); entity.GVolMoney = (string.IsNullOrWhiteSpace(temp[37])) ? 0m : decimal.Parse(temp[37]); var date = entity.Time.Date.ToString("yyyy-MM-dd"); var list = entity.IndexList; var subscript = temp[29]; var scripts = subscript.Split(new char[] { '|' }); var code = entity.Code; if (scripts != null && scripts.Length > 0) { new List <string>(scripts).ForEach(s => { var scrpts = s.Split(new char[] { '/' }); if (scrpts.Length < 6) { return; } var ent = new ItemInfoEntity(code); ent.CodeType = CODETYPE.index; ent.Time = DateTime.Parse(string.Format("{0} {1}", date, scrpts[0])); ent.Value = (string.IsNullOrWhiteSpace(scrpts[1])) ? 0m : decimal.Parse(scrpts[1]); ent.Amount = (string.IsNullOrWhiteSpace(scrpts[2])) ? 0m : decimal.Parse(scrpts[2]); ent.Type = (string.IsNullOrWhiteSpace(scrpts[3])) ? TRADE.none : "S".Equals(scrpts[3].Trim().ToUpper()) ? TRADE.sale : "B".Equals(scrpts[3].Trim().ToUpper()) ? TRADE.buy : "M".Equals(scrpts[3].Trim().ToUpper()) ? TRADE.middle : TRADE.none; ent.Money = (string.IsNullOrWhiteSpace(scrpts[4])) ? 0m : decimal.Parse(scrpts[4]); list.Add(ent); }); } if (entity.IndexList != null && entity.IndexList.Count > 0) { entity.IndexList.Sort(new IndexSort()); } } return(result); }