public Dictionary <string, Tick> Current(IEnumerable <string> symbols) { Dictionary <string, Tick> ret = new Dictionary <string, Tick>(); string baseUrl = "http://api.money.126.net/data/feed/"; int i = 0, si = 0; string symbolsString = ""; List <string> tickStrings = new List <string>(); try { foreach (string symbol in symbols) { string neteasySymbol = this.getNeteasySymbol(symbol); symbolsString += neteasySymbol + ","; i++; si++; if (i >= this.batchSize || si >= symbols.Count()) { Stream stream = this.webClient.OpenRead(baseUrl + symbolsString); StreamReader reader = new StreamReader(stream); string tickString; while ((tickString = reader.ReadLine()) != null) { tickStrings.Add(tickString); } stream.Close(); symbolsString = ""; i = 0; } } string pattern = @"^_ntes_quote_callback\((.+)\);$"; foreach (string tickString in tickStrings) { Match mat = Regex.Match(tickString, pattern); if (mat.Groups.Count > 1) { string json = mat.Groups[1].Value; JObject data = (JObject)JsonConvert.DeserializeObject(json); foreach (string symbol in symbols) { if (!data.ContainsKey(this.dictGMToNeteasy[symbol])) { continue; } JObject record = (JObject)data[this.dictGMToNeteasy[symbol]]; Tick aTick = new Tick { Price = Utils.ParseFloat((string)record["price"]), LastClose = Utils.ParseFloat((string)record["yestclose"]), Open = Utils.ParseFloat((string)record["open"]), High = Utils.ParseFloat((string)record["high"]), Low = Utils.ParseFloat((string)record["low"]), // UpperLimit = float.Parse(data[47]), // LowerLimit = float.Parse(data[48]), DateTime = Utils.StringToDateTime(record["time"].ToString(), "NETEASY") }; for (int k = 0; k < 5; k++) { aTick.Quotes[k] = new Quote { BidPrice = Utils.ParseFloat((string)record[String.Format("bid{0}", k + 1)]), BidVolume = Utils.ParseLong((string)record[String.Format("bidvol{0}", k + 1)]), AskPrice = Utils.ParseFloat((string)record[String.Format("ask{0}", k + 1)]), AskVolume = Utils.ParseLong((string)record[String.Format("askvol{0}", k + 1)]) }; } aTick.CumVolume = Utils.ParseDouble((string)record["volume"]); aTick.CumAmount = Utils.ParseDouble((string)record["turnover"]); aTick.Source = "Neteasy"; ret.Add(symbol, aTick); } } } } catch (Exception ex) { Console.WriteLine("{0}的{1}发生错误:{2}", ex.Source, ex.TargetSite.Name, ex.Message); } return(ret); }
public Dictionary <string, Tick> Current(IEnumerable <string> symbols) { Dictionary <string, Tick> ret = new Dictionary <string, Tick>(); string url = "http://nuff.eastmoney.com/EM_Finance2015TradeInterface/JS.ashx?id="; List <string> tickStrings = new List <string>(); //只能一个个的请求,无法成批发送请求 try { foreach (string symbol in symbols) { string eastMoneySymbol = this.getEastMoneySymbol(symbol); Stream stream = this.webClient.OpenRead(url + eastMoneySymbol); StreamReader reader = new StreamReader(stream); string tickString; if ((tickString = reader.ReadLine()) != null) { tickStrings.Add(tickString); } stream.Close(); } int i = 0; foreach (string symbol in symbols) { if (i >= tickStrings.Count) { break; } string pattern = @"^callback\((.+)\)$"; Match mat = Regex.Match(tickStrings[i], pattern); if (mat.Groups.Count > 1) { string json = mat.Groups[1].Value; json.Replace("-", ""); JObject obj = (JObject)JsonConvert.DeserializeObject(json); JArray data = (JArray)obj["Value"]; if (data.Count >= 30) //保证有数据 { if ((string)data[1] != symbol.Substring(5)) { continue; } Tick aTick = new Tick { UpperLimit = Utils.ParseFloat((string)data[23]), LowerLimit = Utils.ParseFloat((string)data[24]), Price = Utils.ParseFloat((string)data[25]), Open = Utils.ParseFloat((string)data[28]), High = Utils.ParseFloat((string)data[30]), CumVolume = Utils.ParseDouble((string)data[31]) * 100, Low = Utils.ParseFloat((string)data[32]), Volume = Utils.ParseInt((string)data[33]) * 100, LastClose = Utils.ParseFloat((string)data[34]), CumAmount = Utils.ParseDouble(((string)data[35]).Replace('万', ' ')) * 10000, }; for (int k = 0; k < 5; k++) { aTick.Quotes[k] = new Quote { BidPrice = Utils.ParseFloat((string)data[3 + k]), BidVolume = Utils.ParseLong((string)data[13 + k]) * 100, AskPrice = Utils.ParseFloat((string)data[8 + k]), AskVolume = Utils.ParseLong((string)data[18 + k]) * 100 }; } aTick.DateTime = Utils.StringToDateTime((string)data[49], "EASTMONEY"); this.dictLastTradeDate[symbol] = aTick.DateTime.Date;//当前交易日期 aTick.Source = "EastMoney"; ret.Add(symbol, aTick); } } i++; } } catch (Exception ex) { Console.WriteLine("{0}的{1}发生错误:{2}", ex.Source, ex.TargetSite.Name, ex.Message); } return(ret); }