protected override PlaceFinderResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <PlaceFinderData> results = new List <PlaceFinderData>(); System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); PlaceFinderError errorCode = PlaceFinderError.NoError; AddressQualitiy bestQuality = AddressQualitiy.NotAnAddress; XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] resultSet = XPath.GetElements("//ResultSet", doc); if (resultSet.Length == 1) { XElement resultSetNode = resultSet[0]; foreach (XElement resultSetElementNode in resultSetNode.Elements()) { switch (resultSetElementNode.Name.LocalName) { case "Error": errorCode = (PlaceFinderError)Convert.ToInt32(resultSetElementNode.Value.Replace("NN", "")); break; case "ErrorMessage": if (errorCode > PlaceFinderError.NoError) { connInfo = this.GetConnectionInfo(new System.Net.WebException("An internal Yahoo! error occured. Look at InnerException for more details.", new PlaceFinderException(errorCode, resultSetElementNode.Value)), connInfo); break; } break; case "Locale": string[] codes = resultSetElementNode.Value.Split(new string[] { "_", "-" }, StringSplitOptions.None); Language language = Language.en; Country country = Country.US; foreach (Language lang in Enum.GetValues(typeof(Language))) { if (lang.ToString() == codes[0]) { language = lang; break; // TODO: might not be correct. Was : Exit For } } foreach (Country cnt in Enum.GetValues(typeof(Country))) { if (cnt.ToString() == codes[1]) { country = cnt; break; // TODO: might not be correct. Was : Exit For } } break; case "Quality": bestQuality = (AddressQualitiy)Convert.ToInt32(resultSetElementNode.Value); break; case "Result": PlaceFinderData res = new PlaceFinderData(); double lat = 0; double lon = 0; double latOff = 0; double lonOff = 0; foreach (XElement resultItemNode in resultSetElementNode.Elements()) { switch (resultItemNode.Name.LocalName) { case "quality": res.Quality = (AddressQualitiy)Convert.ToInt32(resultItemNode.Value); break; case "latitude": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out lat); break; case "longitude": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out lon); break; case "offsetlat": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out latOff); break; case "offsetlon": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out lonOff); break; case "radius": int t; if (int.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out t)) { res.Radius = t; } break; case "boundingbox": double n = 0; double s = 0; double e = 0; double w = 0; foreach (XElement bbItemNode in resultItemNode.Elements()) { switch (bbItemNode.Name.LocalName) { case "north": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out n); break; case "south": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out s); break; case "east": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out e); break; case "west": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out w); break; } } Coordinates ne = new Coordinates(e, n); Coordinates sw = new Coordinates(w, s); res.BoundingBox = new CoordinatesRectangle(sw, ne); break; case "name": res.PoiAoiName = resultItemNode.Value; break; case "line1": if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.StreetAddressOrIntersection = resultItemNode.Value; break; case "line2": if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.CityOrStateOrZipCode = resultItemNode.Value; break; case ("line3"): if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.PostalCode = resultItemNode.Value; break; case "line4": if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.Country = resultItemNode.Value; break; case "cross": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CrossStreets = resultItemNode.Value; break; case "house": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.House = resultItemNode.Value; break; case "street": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } if (resultItemNode.HasElements) { res.ExtendedAddress.Street = this.GetStreetContainer(resultItemNode); } else { res.ExtendedAddress.Street = new SimpleStreetDescription { FullName = resultItemNode.Value }; } break; case "xstreet": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } if (resultItemNode.HasElements) { res.ExtendedAddress.CrossStreet = this.GetStreetContainer(resultItemNode); } else { res.ExtendedAddress.CrossStreet = new SimpleStreetDescription { FullName = resultItemNode.Value }; } break; case "unittype": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.UnitType = resultItemNode.Value; break; case "unit": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Unit = resultItemNode.Value; break; case "postal": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.PostalCode = resultItemNode.Value; break; case "neighborhood": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Neighborhoods = resultItemNode.Value.Split('/'); break; case "city": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.City = resultItemNode.Value; break; case "county": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.County = resultItemNode.Value; break; case "state": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.State = resultItemNode.Value; break; case "country": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Country = resultItemNode.Value; break; case "level4": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Neighborhoods = resultItemNode.Value.Split('/'); break; case "level3": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.City = resultItemNode.Value; break; case "level2": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.County = resultItemNode.Value; break; case "level1": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.State = resultItemNode.Value; break; case "level0": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Country = resultItemNode.Value; break; case "countycode": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountyCode = resultItemNode.Value; break; case "statecode": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.StateCode = resultItemNode.Value; break; case "countrycode": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountryCode = resultItemNode.Value; break; case "level2code": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountyCode = resultItemNode.Value; break; case "level1code": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.StateCode = resultItemNode.Value; break; case "level0code": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountryCode = resultItemNode.Value; break; case "timezone": res.TimeZone = resultItemNode.Value; break; case "areacode": res.TelephoneAreaCode = resultItemNode.Value; break; case "uzip": res.UniqueZipCode = resultItemNode.Value; break; case "hash": res.Hash = resultItemNode.Value; break; case "woeid": long l; if (long.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out l)) { res.WOEID = l; } break; case "woetype": int tInt = 0; if (int.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out tInt)) { res.WOEType = (PlaceType)tInt; } break; } } res.Position = new Coordinates(lon, lat); res.PositionOffSet = new CoordinatesOffSet { Latitude = latOff, LongitudeOffSet = lonOff }; results.Add(res); break; } } } return(new PlaceFinderResult(results.ToArray(), bestQuality, (PlaceFinderDownloadSettings)settings)); }
protected override SearchResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <SearchDataContainer> containers = new List <SearchDataContainer>(); List <SearchData> lst = new List <SearchData>(); XDocument xmlDoc = MyHelper.ParseXmlDocument(stream); if (xmlDoc != null) { XElement bossResponseNode = XPath.GetElement("bossresponse", xmlDoc); if (bossResponseNode != null) { int respCode = Convert.ToInt32(MyHelper.GetXmlAttributeValue(bossResponseNode, "responsecode")); if (respCode == 200) { foreach (XElement containerNode in bossResponseNode.Elements()) { List <SearchData> results = new List <SearchData>(); int start = Convert.ToInt32(MyHelper.GetXmlAttributeValue(containerNode, "start")); int count = Convert.ToInt32(MyHelper.GetXmlAttributeValue(containerNode, "count")); long totalResults = Convert.ToInt64(MyHelper.GetXmlAttributeValue(containerNode, "totalresults")); XElement resultsNode = MyHelper.EnumToArray(containerNode.Elements())[0]; if (resultsNode.Name.LocalName == "results") { foreach (XElement resultNode in resultsNode.Elements()) { if (resultNode.Name.LocalName == "result") { SearchData res = null; switch (containerNode.Name.LocalName) { case "web": case "limitedweb": res = this.ToBossWebSearchResult(resultNode); break; case "images": res = this.ToBossImageSearchResult(resultNode); break; case "news": res = this.ToBossNewsSearchResult(resultNode); break; case "spelling": res = this.ToBossSpellingSearchResult(resultNode); break; } if (res != null) { results.Add(res); } } } } switch (containerNode.Name.LocalName) { case "web": case "limitedweb": List <WebSearchData> webResults = new List <WebSearchData>(); foreach (SearchData res in results) { if (res is WebSearchData) { webResults.Add((WebSearchData)res); } } containers.Add(new WebSearchDataContainer(webResults.ToArray(), start, count, totalResults)); break; case "images": List <ImageSearchData> imgResults = new List <ImageSearchData>(); foreach (SearchData res in results) { if (res is ImageSearchData) { imgResults.Add((ImageSearchData)res); } } containers.Add(new ImageSearchDataContainer(imgResults.ToArray(), start, count, totalResults)); break; case "news": List <NewsSearchResult> newsResults = new List <NewsSearchResult>(); foreach (SearchData res in results) { if (res is NewsSearchResult) { newsResults.Add((NewsSearchResult)res); } } containers.Add(new NewsSearchDataContainer(newsResults.ToArray(), start, count, totalResults)); break; case "spelling": List <SpellingSearchData> splResults = new List <SpellingSearchData>(); foreach (SearchData res in results) { if (res is SpellingSearchData) { splResults.Add((SpellingSearchData)res); } } containers.Add(new SpellingSearchDataContainer(splResults.ToArray(), start, count, totalResults)); break; } } } } } return(new SearchResult(containers.ToArray(), (SearchDownloadSettings)settings)); }
protected override ChartResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { return(new ChartResult(MyHelper.CopyStream(stream))); }
protected override MarketResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { MarketDownloadSettings set = (MarketDownloadSettings)settings; if (set.Sectors != null) { List <SectorData> sectors = new List <SectorData>(); System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] results = XPath.GetElements("//sector", doc); foreach (XElement node in results) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } SectorData sect = new SectorData(); string nameAtt = MyHelper.GetXmlAttributeValue(node, FinanceHelper.NameMarketName); if (nameAtt != string.Empty) { for (Sector s = 0; s <= Sector.Utilities; s++) { if (s.ToString().Replace("_", " ") == nameAtt) { sect.ID = s; break; // TODO: might not be correct. Was : Exit For } } } foreach (XElement industryNode in node.Elements()) { if (industryNode.Name.LocalName == "industry") { IndustryData ind = new IndustryData(); foreach (XAttribute att in industryNode.Attributes()) { if (att.Name.LocalName == FinanceHelper.NameIndustryID) { int i = 0; int.TryParse(att.Value, out i); if (i != 0) { ind.ID = (Industry)i; } } else if (att.Name.LocalName == FinanceHelper.NameMarketName) { ind.Name = att.Value; } } sect.Industries.Add(ind); } } sectors.Add(sect); } return(new SectorResult(sectors.ToArray())); } else if (set.Industries != null) { List <IndustryData> industries = new List <IndustryData>(); System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] results = XPath.GetElements("//industry", doc); foreach (XElement node in results) { IndustryData ind = new IndustryData(); foreach (XAttribute att in node.Attributes()) { if (att.Name.LocalName == FinanceHelper.NameIndustryID) { int i = 0; int.TryParse(att.Value, out i); if (i != 0) { ind.ID = (Industry)i; } } else if (att.Name.LocalName == FinanceHelper.NameMarketName) { ind.Name = att.Value; } } foreach (XElement companyNode in node.Elements()) { if (companyNode.Name.LocalName == "company") { CompanyInfoData comp = new CompanyInfoData(); foreach (XAttribute att in companyNode.Attributes()) { if (att.Name.LocalName == FinanceHelper.NameCompanySymbol) { comp.SetID(att.Value); } else if (att.Name.LocalName == FinanceHelper.NameMarketName) { comp.Name = att.Value; } } ind.Companies.Add(comp); } } industries.Add(ind); } return(new IndustryResult(industries.ToArray())); } else { return(null); } }
protected override QuoteOptionsResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <QuoteOptionsDataChain> options = new List <QuoteOptionsDataChain>(); System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] mainLst = XPath.GetElements("//optionsChain", doc); foreach (XElement chain in mainLst) { string idAtt = MyHelper.GetXmlAttributeValue(chain, "symbol"); string expirationDateAtt = MyHelper.GetXmlAttributeValue(chain, "expiration"); DateTime expirationDate = default(DateTime); if (!System.DateTime.TryParseExact(expirationDateAtt, "yyyy-MM-dd", culture, System.Globalization.DateTimeStyles.None, out expirationDate)) { System.DateTime.TryParseExact(expirationDateAtt, "yyyy-MM", culture, System.Globalization.DateTimeStyles.None, out expirationDate); } List <QuoteOptionsData> lst = new List <QuoteOptionsData>(); foreach (XElement optionNode in chain.Elements()) { if (optionNode.Name.LocalName == "option") { QuoteOptionsData opt = ImportExport.ToQuoteOption(optionNode, culture); if (opt != null) { lst.Add(opt); } } } options.Add(new QuoteOptionsDataChain(idAtt, expirationDate, lst)); } return(new QuoteOptionsResult(options.ToArray())); }
protected abstract T ConvertResult(ConnectionInfo connInfo, System.IO.Stream stream, SettingsBase settings);
protected override MarketQuotesResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { System.Globalization.CultureInfo ci = FinanceHelper.DefaultYqlCulture; string text = MyHelper.StreamToString(stream, ((MarketQuotesDownloadSettings)settings).TextEncoding); char delimiter = ','; string[][] table = MyHelper.CsvTextToStringTable(text, delimiter); List <MarketQuotesData> lst = new List <MarketQuotesData>(); if (table.Length > 1) { for (int i = 1; i <= table.Length - 1; i++) { if (table[i].Length == 10) { MarketQuotesData quote = new MarketQuotesData(); quote.Name = table[i][0]; double t1; if (double.TryParse(table[i][1], System.Globalization.NumberStyles.Any, ci, out t1)) { quote.OneDayPriceChangePercent = t1; } string mktcap = table[i][2]; if (mktcap != "NA" & mktcap != string.Empty & mktcap.Length > 1) { double value = 0; double.TryParse(mktcap.Substring(0, mktcap.Length - 1), System.Globalization.NumberStyles.Any, ci, out value); quote.MarketCapitalizationInMillion = value * FinanceHelper.GetStringMillionFactor(mktcap); } double t2; double t3; double t4; double t5; double t6; double t7; double t8; if (double.TryParse(table[i][3], System.Globalization.NumberStyles.Any, ci, out t2)) { quote.PriceEarningsRatio = t2; } if (double.TryParse(table[i][4], System.Globalization.NumberStyles.Any, ci, out t3)) { quote.ReturnOnEquityPercent = t3; } if (double.TryParse(table[i][5], System.Globalization.NumberStyles.Any, ci, out t4)) { quote.DividendYieldPercent = t4; } if (double.TryParse(table[i][6], System.Globalization.NumberStyles.Any, ci, out t5)) { quote.LongTermDeptToEquity = t5; } if (double.TryParse(table[i][7], System.Globalization.NumberStyles.Any, ci, out t6)) { quote.PriceToBookValue = t6; } if (double.TryParse(table[i][8], System.Globalization.NumberStyles.Any, ci, out t7)) { quote.NetProfitMarginPercent = t7; } if (double.TryParse(table[i][9], System.Globalization.NumberStyles.Any, ci, out t8)) { quote.PriceToFreeCashFlow = t8; } lst.Add(quote); } } } return(new MarketQuotesResult(lst.ToArray())); }
protected override FuturesResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { FutureData[] result = null; if (stream != null) { System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement resultNode = XPath.GetElement("//table[@id=\"yfncsumtab\"]/table/tr/td/table[2]/tr/td/table", doc); if (resultNode != null) { System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); List <FutureData> lst = new List <FutureData>(); int cnt = 0; foreach (XElement node in resultNode.Elements()) { if (node.Name.LocalName == "tr") { cnt++; if (cnt > 1) { try { FutureData data = new FutureData(); double d; XElement tempNode = null; tempNode = XPath.GetElement("/td[1]", node); if (tempNode != null) { data.SetID(tempNode.Value); } tempNode = XPath.GetElement("/td[2]", node); if (tempNode != null) { data.Name = tempNode.Value; } tempNode = XPath.GetElement("/td[3]/b", node); if (tempNode != null && double.TryParse(tempNode.Value, System.Globalization.NumberStyles.Any, ci, out d)) { data.LastTradePriceOnly = d; } tempNode = XPath.GetElement("/td[3]/nobr/small", node); if (tempNode != null) { data.LastTradeTime = tempNode.Value; } tempNode = XPath.GetElement("/td[4]/b[1]", node); if (tempNode != null && double.TryParse(tempNode.Value, System.Globalization.NumberStyles.Any, ci, out d)) { data.Change = d; } tempNode = XPath.GetElement("/td[4]/b[2]", node); if (tempNode != null && double.TryParse(tempNode.Value.Replace("(", "").Replace(")", "").Replace("%", ""), System.Globalization.NumberStyles.Any, ci, out d)) { data.ChangeInPercent = d; } lst.Add(data); } catch (Exception ex) { } } } } result = lst.ToArray(); } } return(new FuturesResult(((FuturesChainDownloadSettings)settings).ID, result)); }
protected override BondScreenerInfoResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { BondScreenerInfoDownloadSettings set = (BondScreenerInfoDownloadSettings)settings; BondScreenerInfoData res = new BondScreenerInfoData(); System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); //XDocument doc = MyHelper.ParseXmlDocument(stream); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] resultsNodes = XPath.GetElements("//results", doc); if (resultsNodes.Length > 0) { XElement resultNode = resultsNodes[0]; if (MyHelper.EnumToArray(resultNode.Elements()).Length > 0) { XElement tdNode = null;// MyHelper.EnumToArray(resultNode.Elements())[0]; int tableIndex = 0; foreach (XElement tableNode in tdNode.Elements()) { XElement[] tableEnm = MyHelper.EnumToArray(tableNode.Elements()); switch (tableIndex) { case 0: XElement trNode = tableEnm[1]; //res.Title = MyHelper.EnumToArray<XElement>(MyHelper.EnumToArray<XElement>(trNode.Elements())[0].Elements())[0].Value; DateTime d; //if (System.DateTime.TryParseExact(trNode.LastNode.FirstNode.Value.Replace("As of ", ""), "dd-MMM-yyyy", convCulture, System.Globalization.DateTimeStyles.None, out d)) res.AsOf = d; break; case 3: XElement innerTableNode = null; //tableNode.FirstNode.FirstNode.FirstNode; int innerIndex = 0; foreach (XElement innerTrNode in innerTableNode.Elements()) { switch (innerIndex) { case 0: double t; //if (double.TryParse(innerTrNode.LastNode.Value, System.Globalization.NumberStyles.Any, convCulture, out t)) res.Price = t; break; case 1: //if (double.TryParse(innerTrNode.LastNode.Value, System.Globalization.NumberStyles.Any, convCulture, out t)) res.CouponInPercent = t; break; case 2: //if (System.DateTime.TryParseExact(innerTrNode.LastNode.Value, "dd-MMM-yyyy", convCulture, System.Globalization.DateTimeStyles.None, out d)) res.Maturity = d; break; case 3: //if (double.TryParse(innerTrNode.LastNode.Value, System.Globalization.NumberStyles.Any, convCulture, out t)) res.YieldToMaturityInPercent = t; break; case 4: //if (double.TryParse(innerTrNode.LastNode.Value, System.Globalization.NumberStyles.Any, convCulture, out t)) res.CurrentYieldInPercent = t; break; case 5: //res.CouponPaymentFrequency = innerTrNode.LastNode.Value; break; case 6: //if (System.DateTime.TryParseExact(innerTrNode.LastNode.Value, "dd-MMM-yyyy", convCulture, System.Globalization.DateTimeStyles.None, out d)) res.FirstCouponDate = d; break; case 7: /* switch (innerTrNode.LastNode.Value) * { * case "Treasury": * res.Type = BondType.Treasury; * break; * case "Treasury Zero": * res.Type = BondType.TreasuryZeroCoupon; * break; * case "Corporate": * res.Type = BondType.Corporate; * break; * case "Municipal": * res.Type = BondType.Municipal; * break; * } */ break; case 8: //res.Callable = Convert.ToBoolean((innerTrNode.LastNode.Value == "Yes" ? true : false)); break; } innerIndex += 1; } break; case 7: innerTableNode = null; // tableNode.FirstNode.FirstNode.FirstNode; innerIndex = 0; foreach (XElement innerTrNode in innerTableNode.Elements()) { switch (innerIndex) { case 0: int n; //if (int.TryParse(innerTrNode.LastNode.Value, System.Globalization.NumberStyles.Any, convCulture, out n)) res.AvailableQuantity = n; break; case 1: //if (int.TryParse(innerTrNode.LastNode.Value, System.Globalization.NumberStyles.Any, convCulture, out n)) res.MinimumTradeQuantity = n; break; case 2: //if (System.DateTime.TryParseExact(innerTrNode.LastNode.Value, "dd-MMM-yyyy", convCulture, System.Globalization.DateTimeStyles.None, out d)) res.DatedDate = d; break; case 3: //if (System.DateTime.TryParseExact(innerTrNode.LastNode.Value, "dd-MMM-yyyy", convCulture, System.Globalization.DateTimeStyles.None, out d)) res.SettlementDate = d; break; } innerIndex += 1; } break; } tableIndex += 1; } res.Issue = new Link(set.Data.Issue.Title, set.Data.Issue.Url); res.FitchRating = set.Data.FitchRating; } } return(new BondScreenerInfoResult(res)); }
protected override AlphabeticIDIndexResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { AlphabeticIDIndexSettings s = (AlphabeticIDIndexSettings)settings; System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] resultsNodes = null; switch (s.Type) { case AlphabeticalIndexDownloadType.TopIndex: resultsNodes = XPath.GetElements("//results", doc); List <AlphabeticalTopIndex> lstTopIndex = new List <AlphabeticalTopIndex>(); if (resultsNodes.Length > 0) { XElement resultNode = resultsNodes[0]; foreach (XElement tdNode in resultNode.Elements()) { foreach (XElement aNode in tdNode.Elements()) { if (aNode.Name.LocalName == "a") { string att = MyHelper.GetXmlAttributeValue(aNode, "href"); if (att != string.Empty) { lstTopIndex.Add(new AlphabeticalTopIndex(aNode.Value, "http://biz.yahoo.com" + att)); } } } } } return(new AlphabeticIDIndexResult(lstTopIndex.ToArray())); case AlphabeticalIndexDownloadType.Index: resultsNodes = XPath.GetElements("//results", doc); List <AlphabeticalIndex> lstIndex = new List <AlphabeticalIndex>(); if (resultsNodes.Length > 0) { XElement resultNode = resultsNodes[0]; foreach (XElement tdNode in resultNode.Elements()) { foreach (XElement tableNode in tdNode.Elements()) { if (tableNode.Name.LocalName == "table") { XElement[] chdLst = MyHelper.EnumToArray(MyHelper.EnumToArray(tableNode.Elements())[0].Elements()); if (chdLst.Length >= 3) { lstIndex.Add(new AlphabeticalIndex(chdLst[1].Value, s.TopIndex.URL)); if (chdLst.Length > 3) { for (int i = 3; i <= chdLst.Length - 1; i++) { XElement tdTbNode = chdLst[i]; XElement[] enm = MyHelper.EnumToArray(tdTbNode.Elements()); if (enm.Length > 0 && enm[0].Name.LocalName == "a") { string name = enm[0].Value.Replace("\n", "").Replace(" ", "").Trim(); string url = string.Empty; string att = MyHelper.GetXmlAttributeValue(enm[0], "href"); if (att != string.Empty) { url = "http://biz.yahoo.com" + att.Trim(); } if (url != string.Empty & name != string.Empty) { lstIndex.Add(new AlphabeticalIndex(name, url)); } } } } } } } } } s.TopIndex.SetIndices(lstIndex.ToArray()); return(new AlphabeticIDIndexResult(s.TopIndex.SubIndices)); default: return(null); } }
internal DefaultDownloadCompletedEventArgs(object userArgs, Response <T> response, SettingsBase settings) : base(userArgs, response, settings) { }
protected override HistQuotesResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { HistQuotesDownloadSettings s = (HistQuotesDownloadSettings)settings; string text = MyHelper.StreamToString(stream, s.TextEncoding); HistQuotesDataChain[] quotes = new HistQuotesDataChain[-1 + 1]; if (connInfo.State == YahooManaged.Base.ConnectionState.Success) { if (s.JSON) { quotes = this.ConvertJSON(text, s.IDs); } else { quotes = this.ConvertCSV(text, s.IDs[0]); } } return(new HistQuotesResult(quotes, s)); }
internal StreamDownloadSettings(SettingsBase settings) { mUserSettings = settings; }
protected DownloadCompletedEventArgs(object userArgs, Response <T> resp, SettingsBase settings) : base(userArgs) { mResponse = resp; mSettings = settings; }
protected override PlacesResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { if (settings is PlacesDownloadSettings) { List <PlacesData> places = new List <PlacesData>(); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] results = XPath.GetElements("//place", doc); foreach (XElement node in results) { places.Add(this.ToPlace(node)); } return(new PlacesResult(places.ToArray())); } else { return(null); } }
protected override SuggestionResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <string> lst = new List <string>(); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] results = XPath.GetElements("//s", doc); foreach (XElement resultNode in results) { string att = MyHelper.GetXmlAttributeValue(resultNode, "k"); if (att != string.Empty) { lst.Add(att); } } return(new SuggestionResult(lst.ToArray(), (SuggestionDownloadSettings)settings)); }
protected void SetSettings(SettingsBase value) { mSettings = value; }
protected override StockScreenerResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { StockScreenerDownloadSettings set = (StockScreenerDownloadSettings)settings; List <StockScreenerData> results = new List <StockScreenerData>(); string result = MyHelper.StreamToString(stream, set.TextEncoding); List <string> lines = new List <string>(result.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); if (lines.Count > 0) { System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); List <QuoteProperty> quoteProps = new List <QuoteProperty>(); List <StockScreenerProperty> screenerProps = new List <StockScreenerProperty>(); foreach (StockCriteriaDefinition crit in set.Criterias) { foreach (QuoteProperty qp in crit.ProvidedQuoteProperties) { if (!quoteProps.Contains(qp)) { quoteProps.Add(qp); } } foreach (StockScreenerProperty sp in crit.ProvidedScreenerProperties) { if (!screenerProps.Contains(sp)) { screenerProps.Add(sp); } } } string[] propertySymbols = new string[-1 + 1]; string[] propertyNames = new string[-1 + 1]; int startIndex = 0; if (!set.Comparing) { startIndex = 2; propertySymbols = lines[0].Split('|'); propertyNames = lines[1].Split('|'); } else { startIndex = 0; List <string> lstSymbols = new List <string>(); lstSymbols.Add(""); lstSymbols.Add(""); lstSymbols.Add("b"); lstSymbols.Add(""); lstSymbols.Add("c"); lstSymbols.Add("8o"); lstSymbols.Add("9c"); lstSymbols.Add("9t"); foreach (StockCriteriaDefinition crt in set.Criterias) { if (crt.ProvidedQuoteProperties.Length > 5 | crt.ProvidedScreenerProperties.Length > 3) { lstSymbols.Add(crt.CriteriaTag); } } propertySymbols = lstSymbols.ToArray(); List <string> lstNames = new List <string>(); lstNames.Add("Ticker"); lstNames.Add("Company Name"); lstNames.Add("Last Trade"); lstNames.Add("Trade Time"); lstNames.Add("Mkt Cap"); lstNames.Add("Return On Equity"); lstNames.Add("Return On Assets"); lstNames.Add("Forward PE"); foreach (StockCriteriaDefinition crt in set.Criterias) { if (crt.ProvidedQuoteProperties.Length > 5 | crt.ProvidedScreenerProperties.Length > 3) { switch (crt.CriteriaTag) { case "f": case "g": if (crt is PriceGainerLosersCriteria) { PriceGainerLosersCriteria mngCrt = (PriceGainerLosersCriteria)crt; if (mngCrt.ValueRelativeTo == StockTradingAbsoluteTimePoint.TodaysOpen) { lstNames.Add("(open)"); } else { lstNames.Add("(close)"); } } break; case "h": case "i": if (crt is PriceMomentumCriteria) { PriceMomentumCriteria mngCrt = (PriceMomentumCriteria)crt; lstNames.Add("(" + mngCrt.RelativeTimeSpanInMinutes.ToString().Replace("_", "") + "m)"); } break; default: lstNames.Add(""); break; } } } propertyNames = lstNames.ToArray(); } for (int i = startIndex; i <= lines.Count - 1; i++) { string[] values = lines[i].Split('|'); if (propertySymbols.Length >= 4 & values.Length == propertySymbols.Length & values.Length == propertyNames.Length) { string id = values[0]; string name = values[1]; double lastTradePriceOnly = 0; double.TryParse(values[2], System.Globalization.NumberStyles.Any, convCulture, out lastTradePriceOnly); DateTime tradeTime = new DateTime(); DateTime.TryParse(values[3], convCulture, System.Globalization.DateTimeStyles.None, out tradeTime); tradeTime = tradeTime.AddHours(tradeTime.Hour).AddMinutes(tradeTime.Minute); StockScreenerData res = new StockScreenerData(id, name, lastTradePriceOnly, tradeTime, quoteProps.ToArray(), screenerProps.ToArray()); if (values.Length >= 5) { for (int p = 4; p <= values.Length - 1; p++) { if (values[p] != string.Empty & values[p] != "N/A") { double dblValue = 0; if (double.TryParse(values[p], System.Globalization.NumberStyles.Any, convCulture, out dblValue) || FinanceHelper.GetMillionValue(values[p]) != 0) { switch (propertySymbols[p]) { case "c": res[QuoteProperty.MarketCapitalization] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; //case "c": //res.AdditionalValues[(int)StockScreenerProperty.RevenueEstimate_ThisYear] = dblValue; //break; case "8o": res.AdditionalValues[(int)StockScreenerProperty.ReturnOnEquity] = dblValue; break; case "9c": res.AdditionalValues[(int)StockScreenerProperty.ReturnOnAssets] = dblValue; break; case "9t": res.AdditionalValues[(int)StockScreenerProperty.ForwardPriceToEarningsRatio] = dblValue; break; case "9o": res.AdditionalValues[(int)StockScreenerProperty.NumberOfEmployees] = dblValue; break; case "f": double absoluteChange = dblValue; double absolutePreviousValue = res.LastTradePriceOnly - absoluteChange; double changeInPercent = absoluteChange / absolutePreviousValue; res[QuoteProperty.ChangeInPercent] = changeInPercent * 100; res[QuoteProperty.Change] = absoluteChange; if (propertyNames[p].EndsWith("(open)")) { res[QuoteProperty.Open] = absolutePreviousValue; } else { res[QuoteProperty.PreviousClose] = absolutePreviousValue; } break; case "g": changeInPercent = dblValue; absolutePreviousValue = (res.LastTradePriceOnly / (100 + changeInPercent)) * 100; absoluteChange = res.LastTradePriceOnly - absolutePreviousValue; res[QuoteProperty.ChangeInPercent] = changeInPercent; res[QuoteProperty.Change] = absoluteChange; if (propertyNames[p].EndsWith("(open)")) { res[QuoteProperty.Open] = absolutePreviousValue; } else { res[QuoteProperty.PreviousClose] = absolutePreviousValue; } break; case "h": if (set.Criterias != null) { PriceMomentumCriteria context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is PriceMomentumCriteria && ((PriceMomentumCriteria)crit).PercentValues == false) { context = (PriceMomentumCriteria)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { if (propertyNames[p].EndsWith("(" + context.RelativeTimeSpanInMinutes.ToString().Replace("_", "") + "m)")) { TemporaryPriceChangeInfo info = new TemporaryPriceChangeInfo(); info.ChangeRelativeTimePoint = context.TimeSpanRelativeTo; info.ChangeTimeSpan = context.RelativeTimeSpanInMinutes; info.Change = dblValue * Convert.ToInt32((context.GainOrLoss == StockPriceChangeDirection.Gain ? 1 : -1)); info.ChangeInPercent = info.Change / (res.LastTradePriceOnly - info.Change); res.TemporaryLimitedChange = info; } } } break; case "i": if (set.Criterias != null) { PriceMomentumCriteria context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is PriceMomentumCriteria && ((PriceMomentumCriteria)crit).PercentValues == true) { context = (PriceMomentumCriteria)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { if (propertyNames[p].EndsWith("(" + context.RelativeTimeSpanInMinutes.ToString().Replace("_", "") + "m)")) { TemporaryPriceChangeInfo info = new TemporaryPriceChangeInfo(); info.ChangeRelativeTimePoint = context.TimeSpanRelativeTo; info.ChangeTimeSpan = context.RelativeTimeSpanInMinutes; info.ChangeInPercent = dblValue * Convert.ToInt32((context.GainOrLoss == StockPriceChangeDirection.Gain ? 1 : -1)); info.Change = res.LastTradePriceOnly - ((res.LastTradePriceOnly / (100 + info.ChangeInPercent)) * 100); res.TemporaryLimitedChange = info; } } } break; case "j": if (set.Criterias != null) { ExtremePriceCriteria context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is ExtremePriceCriteria && ((ExtremePriceCriteria)crit).PercentValues == false) { context = (ExtremePriceCriteria)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { absoluteChange = dblValue * Convert.ToInt32((context.LessGreater == LessGreater.Greater ? 1 : -1)); absolutePreviousValue = res.LastTradePriceOnly - absoluteChange; changeInPercent = absoluteChange / absolutePreviousValue; switch (context.ExtremeParameter) { case StockExtremeParameter.TodaysHigh: res[QuoteProperty.DaysHigh] = absolutePreviousValue; break; case StockExtremeParameter.TodaysLow: res[QuoteProperty.DaysLow] = absolutePreviousValue; break; case StockExtremeParameter.YearsHigh: res[QuoteProperty.YearHigh] = absolutePreviousValue; res[QuoteProperty.ChangeInPercentFromYearHigh] = changeInPercent; res[QuoteProperty.ChangeFromYearHigh] = absoluteChange; break; case StockExtremeParameter.YearsLow: res[QuoteProperty.YearLow] = absolutePreviousValue; res[QuoteProperty.PercentChangeFromYearLow] = changeInPercent; res[QuoteProperty.ChangeFromYearLow] = absoluteChange; break; } } } break; case "k": if (set.Criterias != null) { ExtremePriceCriteria context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is ExtremePriceCriteria && ((ExtremePriceCriteria)crit).PercentValues == true) { context = (ExtremePriceCriteria)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { changeInPercent = dblValue * Convert.ToInt32((context.LessGreater == LessGreater.Greater ? 1 : -1)); absolutePreviousValue = (res.LastTradePriceOnly / (100 + changeInPercent)) * 100; absoluteChange = res.LastTradePriceOnly - absolutePreviousValue; switch (context.ExtremeParameter) { case StockExtremeParameter.TodaysHigh: res[QuoteProperty.DaysHigh] = absolutePreviousValue; break; case StockExtremeParameter.TodaysLow: res[QuoteProperty.DaysLow] = absolutePreviousValue; break; case StockExtremeParameter.YearsHigh: res[QuoteProperty.YearHigh] = absolutePreviousValue; res[QuoteProperty.ChangeInPercentFromYearHigh] = changeInPercent; res[QuoteProperty.ChangeFromYearHigh] = absoluteChange; break; case StockExtremeParameter.YearsLow: res[QuoteProperty.YearLow] = absolutePreviousValue; res[QuoteProperty.PercentChangeFromYearLow] = changeInPercent; res[QuoteProperty.ChangeFromYearLow] = absoluteChange; break; } } } break; case "l": if (set.Criterias != null) { GapVsPreviousClose context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is GapVsPreviousClose && ((GapVsPreviousClose)crit).PercentValues == false) { context = (GapVsPreviousClose)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { res.AdditionalValues[(int)StockScreenerProperty.Gap] = dblValue; } } break; case "m": if (set.Criterias != null) { GapVsPreviousClose context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is GapVsPreviousClose && ((GapVsPreviousClose)crit).PercentValues == true) { context = (GapVsPreviousClose)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { res.AdditionalValues[(int)StockScreenerProperty.GapInPercent] = dblValue; } } break; case "o": if (set.Criterias != null) { PriceToMovingAverageRatioCriteria context = null; foreach (StockCriteriaDefinition crit in set.Criterias) { if (crit != null && crit is PriceToMovingAverageRatioCriteria) { context = (PriceToMovingAverageRatioCriteria)crit; break; // TODO: might not be correct. Was : Exit For } } if (context != null) { changeInPercent = dblValue; double maValue = (dblValue / (100 + changeInPercent)) * 100; absoluteChange = res.LastTradePriceOnly - maValue; if (context.MovingAverage == MovingAverageType.FiftyDays) { res[QuoteProperty.FiftydayMovingAverage] = maValue; res[QuoteProperty.ChangeFromFiftydayMovingAverage] = absoluteChange; res[QuoteProperty.PercentChangeFromFiftydayMovingAverage] = changeInPercent; } else { res[QuoteProperty.TwoHundreddayMovingAverage] = maValue; res[QuoteProperty.ChangeFromTwoHundreddayMovingAverage] = absoluteChange; res[QuoteProperty.PercentChangeFromTwoHundreddayMovingAverage] = changeInPercent; } } } break; case "7": res.AdditionalValues[(int)StockScreenerProperty.Beta] = dblValue; break; case "v": res[QuoteProperty.PriceSales] = dblValue; break; case "e": res.AdditionalValues[(int)StockScreenerProperty.PriceEarningsRatio] = dblValue; break; case "u": res[QuoteProperty.PEGRatio] = dblValue; break; case "9p": res.AdditionalValues[(int)StockScreenerProperty.EntityValue] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "9q": res.AdditionalValues[(int)StockScreenerProperty.EntityValueToRevenueRatio] = dblValue; break; case "9r": res.AdditionalValues[(int)StockScreenerProperty.EntityValueToOperatingCashFlowRatio] = dblValue; break; case "9s": res.AdditionalValues[(int)StockScreenerProperty.EntityValueToFreeCashFlowRatio] = dblValue; break; case "x": res[QuoteProperty.EPSEstimateNextQuarter] = dblValue; break; case "y": res[QuoteProperty.EPSEstimateCurrentYear] = dblValue; break; case "z": res[QuoteProperty.EPSEstimateNextYear] = dblValue; break; case "8e": res.AdditionalValues[(int)StockScreenerProperty.EPS_NYCE] = dblValue; break; case "9v": res.AdditionalValues[(int)StockScreenerProperty.SalesGrowthEstimate_ThisQuarter] = dblValue; break; case "8h": res.AdditionalValues[(int)StockScreenerProperty.EarningsGrowthEstimate_ThisYear] = dblValue; break; case "9b": res.AdditionalValues[(int)StockScreenerProperty.EarningsGrowthEstimate_NextYear] = dblValue; break; case "9u": res.AdditionalValues[(int)StockScreenerProperty.EarningsGrowthEstimate_Next5Years] = dblValue; break; case "1": res.AdditionalValues[(int)StockScreenerProperty.SharesOutstanding] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "2": res[QuoteProperty.SharesFloat] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "3": res[QuoteProperty.ShortRatio] = dblValue; break; case "8g": res.AdditionalValues[(int)StockScreenerProperty.SharesShortPriorMonth] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8m": res.AdditionalValues[(int)StockScreenerProperty.SharesShort] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "9d": res.AdditionalValues[(int)StockScreenerProperty.HeldByInsiders] = dblValue; break; case "9n": res.AdditionalValues[(int)StockScreenerProperty.HeldByInstitutions] = dblValue; break; case "4": res[QuoteProperty.TrailingAnnualDividendYield] = dblValue; break; case "5": res[QuoteProperty.TrailingAnnualDividendYieldInPercent] = dblValue; break; case "8a": res.AdditionalValues[(int)StockScreenerProperty.OperatingMargin] = dblValue; break; case "8r": res.AdditionalValues[(int)StockScreenerProperty.ProfitMargin_ttm] = dblValue; break; case "9f": res.AdditionalValues[(int)StockScreenerProperty.EBITDAMargin_ttm] = dblValue; break; case "9k": res.AdditionalValues[(int)StockScreenerProperty.GrossMargin_ttm] = dblValue; break; case "8f": res[QuoteProperty.PriceBook] = dblValue; break; //case "8f": //res.AdditionalValues[(int)StockScreenerProperty.CashPerShare] = dblValue; //break; case "8l": res.AdditionalValues[(int)StockScreenerProperty.TotalCash] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "6": res[QuoteProperty.BookValuePerShare] = dblValue; break; case "9e": res.AdditionalValues[(int)StockScreenerProperty.TotalDebt] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "9g": res.AdditionalValues[(int)StockScreenerProperty.TotalDebtToEquityRatio] = dblValue; break; case "9h": res.AdditionalValues[(int)StockScreenerProperty.CurrentRatio] = dblValue; break; case "9i": res.AdditionalValues[(int)StockScreenerProperty.LongTermDebtToEquityRatio] = dblValue; break; case "9l": res.AdditionalValues[(int)StockScreenerProperty.QuickRatio] = dblValue; break; case "w": res[QuoteProperty.DilutedEPS] = dblValue; break; case "8i": res.AdditionalValues[(int)StockScreenerProperty.EPS_mrq] = dblValue; break; case "0": res.AdditionalValues[(int)StockScreenerProperty.Sales_ttm] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "t": res[QuoteProperty.EBITDA] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8n": res.AdditionalValues[(int)StockScreenerProperty.GrossProfit] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8p": res.AdditionalValues[(int)StockScreenerProperty.NetIncome] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "9j": res.AdditionalValues[(int)StockScreenerProperty.OperatingIncome] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8v": res.AdditionalValues[(int)StockScreenerProperty.EarningsGrowth_Past5Years] = dblValue; break; case "9a": res.AdditionalValues[(int)StockScreenerProperty.RevenueEstimate_ThisQuarter] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8q": res.AdditionalValues[(int)StockScreenerProperty.RevenueEstimate_NextQuarter] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8s": res.AdditionalValues[(int)StockScreenerProperty.SalesGrowthEstimate_NextQuarter] = dblValue; break; case "8t": res.AdditionalValues[(int)StockScreenerProperty.SalesGrowthEstimate_ThisYear] = dblValue; break; case "8k": res.AdditionalValues[(int)StockScreenerProperty.SalesGrowthEstimate_NextYear] = dblValue; break; case "8y": res.AdditionalValues[(int)StockScreenerProperty.FreeCashFlow] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; case "8z": res.AdditionalValues[(int)StockScreenerProperty.OperatingCashFlow] = Convert.ToInt64(FinanceHelper.GetMillionValue(values[p]) * (Math.Pow(10, 6))); break; } } } } } results.Add(res); } } } return(new StockScreenerResult(results.ToArray())); }
protected override CompanyInfoResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <CompanyInfoData> companies = new List <CompanyInfoData>(); System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] results = XPath.GetElements("//stock", doc); foreach (XElement node in results) { CompanyInfoData stk = new CompanyInfoData(); string name = MyHelper.GetXmlAttributeValue(node, FinanceHelper.NameCompanySymbol); if (name != string.Empty) { stk.SetID(name.ToUpper()); } foreach (XElement propertyNode in node.Elements()) { switch (propertyNode.Name.LocalName) { case FinanceHelper.NameCompanyCompanyName: stk.Name = propertyNode.Value; break; case FinanceHelper.NameCompanyStart: System.DateTime dte1 = default(System.DateTime); if (System.DateTime.TryParse(propertyNode.Value.Replace(FinanceHelper.NameCompanyNotAvailable, "1"), culture, System.Globalization.DateTimeStyles.AssumeUniversal, out dte1)) { stk.StartDate = dte1; } break; case FinanceHelper.NameCompanyEnd: string dateStr = string.Empty; if (propertyNode.Value.IndexOf(FinanceHelper.NameCompanyNotAvailable) > -1) { string[] dates = propertyNode.Value.Split('-'); if (dates.Length >= 3) { if (dates[0].IndexOf(FinanceHelper.NameCompanyNotAvailable) > -1) { dateStr += System.DateTime.Now.Year.ToString() + "-"; } else { dateStr += dates[0] + "-"; } if (dates[1].IndexOf(FinanceHelper.NameCompanyNotAvailable) > -1) { dateStr += System.DateTime.Now.Month.ToString() + "-"; } else { dateStr += dates[1] + "-"; } if (dates[2].IndexOf(FinanceHelper.NameCompanyNotAvailable) > -1) { dateStr += System.DateTime.Now.Day.ToString() + "-"; } else { dateStr += dates[2]; } if (dates.Length > 3) { dateStr += "-"; for (int i = 3; i <= dates.Length - 1; i++) { dateStr += dates[i] + "-"; } } } else { dateStr = propertyNode.Value.Replace(FinanceHelper.NameCompanyNotAvailable, System.DateTime.Now.Month.ToString()); } } System.DateTime dte2; if (System.DateTime.TryParse(dateStr, culture, System.Globalization.DateTimeStyles.AssumeUniversal, out dte2)) { stk.EndDate = dte2; } break; case FinanceHelper.NameCompanySector: stk.SectorName = propertyNode.Value; break; case FinanceHelper.NameCompanyIndustry: stk.IndustryName = propertyNode.Value; break; case FinanceHelper.NameCompanyFullTimeEmployees: int i2 = 0; if (int.TryParse(propertyNode.Value, System.Globalization.NumberStyles.Any, culture, out i2)) { stk.FullTimeEmployees = i2; } break; } } companies.Add(stk); } return(new CompanyInfoResult(companies.ToArray())); }
protected override CompanyStatisticsResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { CompanyStatisticsData result = null; if (stream != null) { System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement resultNode = XPath.GetElement("//table[@id=\"yfncsumtab\"]/tr[2]",doc); if (resultNode != null) { XElement tempNode = null; XElement vmNode = XPath.GetElement("/td[1]/table[2]/tr/td/table", resultNode); double[] vmValues = new double[9]; if (vmNode != null) { tempNode = XPath.GetElement("/tr[1]/td[2]/span", vmNode); if (tempNode != null) vmValues[0] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[2]/td[2]", vmNode); if (tempNode != null) vmValues[1] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]", vmNode); if (tempNode != null) vmValues[2] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]", vmNode); if (tempNode != null) vmValues[3] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]", vmNode); if (tempNode != null) vmValues[4] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]", vmNode); if (tempNode != null) vmValues[5] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]", vmNode); if (tempNode != null) vmValues[6] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]", vmNode); if (tempNode != null) vmValues[7] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]", vmNode); if (tempNode != null) vmValues[8] = FinanceHelper.ParseToDouble(tempNode.Value); } CompanyValuationMeasures vm = new CompanyValuationMeasures(vmValues); XElement fyNode = XPath.GetElement("/td[1]/table[4]/tr/td/table",resultNode); XElement profitNode = XPath.GetElement("/td[1]/table[5]/tr/td/table", resultNode); XElement meNode = XPath.GetElement("/td[1]/table[6]/tr/td/table", resultNode); XElement isNode = XPath.GetElement("/td[1]/table[7]/tr/td/table", resultNode); XElement bsNode = XPath.GetElement("/td[1]/table[8]/tr/td/table", resultNode); XElement cfsNode = XPath.GetElement("/td[1]/table[9]/tr/td/table", resultNode); DateTime fiscalYEnds = new DateTime(); DateTime mostRecQutr = new DateTime(); double[] fhValues = new double[20]; if (fyNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]", fyNode); if (tempNode != null) fiscalYEnds = FinanceHelper.ParseToDateTime(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",fyNode); if (tempNode != null) mostRecQutr = FinanceHelper.ParseToDateTime(tempNode.Value); } if (profitNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",profitNode); if (tempNode != null) fhValues[0] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",profitNode); if (tempNode != null) fhValues[1] = FinanceHelper.ParseToDouble(tempNode.Value); } if (meNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",meNode); if (tempNode != null) fhValues[2] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",meNode); if (tempNode != null) fhValues[3] = FinanceHelper.ParseToDouble(tempNode.Value); } if (isNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]", isNode); if (tempNode != null) fhValues[4] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]", isNode); if (tempNode != null) fhValues[5] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]", isNode); if (tempNode != null) fhValues[6] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]", isNode); if (tempNode != null) fhValues[7] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]", isNode); if (tempNode != null) fhValues[8] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]", isNode); if (tempNode != null) fhValues[9] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]", isNode); if (tempNode != null) fhValues[10] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]", isNode); if (tempNode != null) fhValues[11] = FinanceHelper.ParseToDouble(tempNode.Value); } if (bsNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",bsNode); if (tempNode != null) fhValues[12] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",bsNode); if (tempNode != null) fhValues[13] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]",bsNode); if (tempNode != null) fhValues[14] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",bsNode); if (tempNode != null) fhValues[15] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",bsNode); if (tempNode != null) fhValues[16] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",bsNode); if (tempNode != null) fhValues[17] = FinanceHelper.ParseToDouble(tempNode.Value); } if (cfsNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]", cfsNode); if (tempNode != null) fhValues[18] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",cfsNode); if (tempNode != null) fhValues[19] = FinanceHelper.GetMillionValue(tempNode.Value); } CompanyFinancialHighlights fh = new CompanyFinancialHighlights(fiscalYEnds, mostRecQutr, fhValues); XElement sphNode = XPath.GetElement("/td[3]/table[2]/tr/td/table", resultNode); XElement stNode = XPath.GetElement("/td[3]/table[3]/tr/td/table", resultNode); XElement dsNode = XPath.GetElement("/td[3]/table[4]/tr/td/table", resultNode); double[] ctiValues = new double[23]; DateTime exDivDate = new DateTime(); DateTime divDate = new DateTime(); DateTime splitDate = new DateTime(); SharesSplitFactor sf = null; if (sphNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",sphNode); if (tempNode != null) ctiValues[0] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",sphNode); if (tempNode != null) ctiValues[1] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]",sphNode); if (tempNode != null) ctiValues[2] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",sphNode); if (tempNode != null) ctiValues[3] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",sphNode); if (tempNode != null) ctiValues[4] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",sphNode); if (tempNode != null) ctiValues[5] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]",sphNode); if (tempNode != null) ctiValues[6] = FinanceHelper.ParseToDouble(tempNode.Value); } if (stNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",stNode); if (tempNode != null) ctiValues[7] = FinanceHelper.ParseToDouble(tempNode.Value) / 1000; tempNode = XPath.GetElement("/tr[3]/td[2]",stNode); if (tempNode != null) ctiValues[8] = FinanceHelper.ParseToDouble(tempNode.Value) / 1000; tempNode = XPath.GetElement("/tr[4]/td[2]",stNode); if (tempNode != null) ctiValues[9] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",stNode); if (tempNode != null) ctiValues[10] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",stNode); if (tempNode != null) ctiValues[11] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",stNode); if (tempNode != null) ctiValues[12] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]",stNode); if (tempNode != null) ctiValues[13] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]",stNode); if (tempNode != null) ctiValues[14] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[10]/td[2]",stNode); if (tempNode != null) ctiValues[15] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[11]/td[2]",stNode); if (tempNode != null) ctiValues[16] = FinanceHelper.GetMillionValue(tempNode.Value); } if (dsNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",dsNode); if (tempNode != null) ctiValues[17] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",dsNode); if (tempNode != null) ctiValues[18] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]",dsNode); if (tempNode != null) ctiValues[19] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",dsNode); if (tempNode != null) ctiValues[20] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",dsNode); if (tempNode != null) ctiValues[21] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",dsNode); if (tempNode != null) ctiValues[22] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]",dsNode); if (tempNode != null) divDate = FinanceHelper.ParseToDateTime(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]",dsNode); if (tempNode != null) exDivDate = FinanceHelper.ParseToDateTime(tempNode.Value); tempNode = XPath.GetElement("/tr[10]/td[2]",dsNode); if (tempNode != null) { string[] txt = tempNode.Value.Split(':'); int from, to; if (int.TryParse(txt[0], out to) && int.TryParse(txt[1], out from)) { sf = new SharesSplitFactor(to, from); } } tempNode = XPath.GetElement("/tr[11]/td[2]",dsNode); if (tempNode != null) splitDate = FinanceHelper.ParseToDateTime(tempNode.Value); } CompanyTradingInfo cti = new CompanyTradingInfo(ctiValues, divDate, exDivDate, splitDate, sf); result = new CompanyStatisticsData(((CompanyStatisticsDownloadSettings)settings).ID, vm, fh, cti); } } return new CompanyStatisticsResult(result); }
protected override LocationIDSearchResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <LocationIDData> lst = new List <LocationIDData>(); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] results = XPath.GetElements("//loc", doc); foreach (XElement locNode in results) { LocationIDData loc = new LocationIDData(); loc.Name = locNode.Value; XAttribute att = locNode.Attribute(XName.Get("id")); if (att != null) { loc.ID = att.Value; } lst.Add(loc); } return(new LocationIDSearchResult(lst.ToArray())); }
public Response <System.IO.Stream> Download(SettingsBase userSettings) { if (!mDisposedValue) { StreamDownloadSettings <T> ss = new StreamDownloadSettings <T>(userSettings); DateTime startTime = System.DateTime.Now; HttpWebRequest wr = this.GetWebRequest(ss); byte[] postDataBytes = null; if (userSettings.PostDataInternal != string.Empty) { postDataBytes = System.Text.Encoding.ASCII.GetBytes(userSettings.PostDataInternal); wr.ContentLength = postDataBytes.Length; } mActualDownload = wr; System.IO.MemoryStream memStream = null; System.Net.WebException dlException = null; int size = 0; List <KeyValuePair <HttpResponseHeader, string> > headers = new List <KeyValuePair <HttpResponseHeader, string> >(); DateTime endTime = System.DateTime.Now; try { if (postDataBytes != null) { using (System.IO.Stream s = wr.GetRequestStream()) { s.Write(postDataBytes, 0, postDataBytes.Length); } } using (HttpWebResponse resp = (HttpWebResponse)wr.GetResponse()) { foreach (var header in resp.Headers.Keys) { headers.Add(new KeyValuePair <HttpResponseHeader, string>()); } if (userSettings.DownloadResponseStreamInternal) { System.IO.Stream s = resp.GetResponseStream(); endTime = System.DateTime.Now; memStream = MyHelper.CopyStream(s); s.Dispose(); } } if (memStream != null && memStream.CanSeek) { int.TryParse(memStream.Length.ToString(), out size); } } catch (Exception ex) { dlException = this.GetOrCreateWebException(ex, null); } finally { mActualDownload = null; } return(new DefaultResponse <System.IO.Stream>(new ConnectionInfo(dlException, this.Timeout, size, startTime, endTime, headers.ToArray()), memStream)); } else { return(null); } }
protected override QuotesResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { QuotesDownloadSettings set = (QuotesDownloadSettings)settings; return(new QuotesResult(ImportExport.ToQuotesData(MyHelper.StreamToString(stream, set.TextEncoding), ',', set.Properties, new System.Globalization.CultureInfo("en-US")), set)); }
protected override WeatherFeedResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <WeatherFeed> feeds = new List <WeatherFeed>(); XDocument xmlDoc = MyHelper.ParseXmlDocument(stream); if (xmlDoc != null) { foreach (XElement feedNode in XPath.GetElements("//channel", xmlDoc)) { WeatherFeed feed = this.ToWeatherFeed(feedNode); if (feed != null) { feeds.Add(feed); } } } return(new WeatherFeedResult(feeds.ToArray())); }
protected override IDSearchResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { IDSearchResult result = null; List <IDSearchData> lst = new List <IDSearchData>(); if (stream != null) { if (settings is IDInstantSearchDownloadSettings) { #region Instant string resultStr = MyHelper.StreamToString(stream, ((IDInstantSearchDownloadSettings)settings).TextEncoding); MatchCollection results = Regex.Matches(resultStr, "{\"symbol\":.*?}"); foreach (Match res in results) { string[] prp = res.Value.Replace("{", "").Replace("}", "").Split(','); if (prp.Length > 0) { string name = string.Empty; string id = string.Empty; string category = string.Empty; string exchange = string.Empty; string type = string.Empty; foreach (string p in prp) { string[] kvp = p.Replace("\"", "").Split(':'); if (kvp.Length == 2) { switch (kvp[0]) { case "symbol": id = kvp[1].Trim(); break; case "name": name = kvp[1].Trim(); break; case "exch": exchange = kvp[1].Trim(); break; case "type": switch (kvp[1].Trim()) { case "S": type = "Stock"; break; case "I": type = "Index"; break; case "F": type = "Future"; break; case "E": type = "ETF"; break; case "M": type = "Fund"; break; } break; } } } lst.Add(new IDSearchData(name, id, type, exchange, string.Empty, null)); } } Dictionary <SecurityType, int> dict = new Dictionary <SecurityType, int>(); dict.Add(SecurityType.Any, lst.Count); return(new IDSearchResult(lst.ToArray(), 0, lst.Count, lst.Count, dict)); #endregion } else if (settings is IDQuerySearchDownloadSettings) { #region Query IDQuerySearchDownloadSettings sett = (IDQuerySearchDownloadSettings)settings; int pageingFrom = sett.ResultsIndex, pagingTo = sett.ResultsIndex + 20, overall = 0; Dictionary <SecurityType, int> resultsCount = new Dictionary <SecurityType, int>(); System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement resultNode = XPath.GetElement("//div[@id=\"yfi_sym_lookup\"]", doc); if (resultNode != null) { XElement navigationNode = XPath.GetElement("ul[1]", resultNode); if (navigationNode != null) { string s; int t; s = XPath.GetElement("li[1]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Any, t); } s = XPath.GetElement("li[2]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Stock, t); } s = XPath.GetElement("li[3]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Fund, t); } s = XPath.GetElement("li[4]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.ETF, t); } s = XPath.GetElement("li[5]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Index, t); } s = XPath.GetElement("li[6]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Future, t); } if (MyHelper.EnumToArray(navigationNode.Elements()).Length == 7) { resultsCount.Add(SecurityType.Warrant, 0); s = XPath.GetElement("li[7]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Currency, t); } } else if (MyHelper.EnumToArray(navigationNode.Elements()).Length == 8) { s = XPath.GetElement("li[7]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Warrant, t); } s = XPath.GetElement("li[8]/a/em", navigationNode).Value; if (int.TryParse(s.Substring(s.LastIndexOf("(") + 1).Replace(")", "").Trim(), out t)) { resultsCount.Add(SecurityType.Currency, t); } } } XElement contentNode = XPath.GetElement("div[1]", resultNode); if (contentNode != null) { XElement tableNode = XPath.GetElement("/div[1]/table", contentNode); XElement tableHeadNode = XPath.GetElement("/thead/tr", tableNode); XElement tableBodyNode = XPath.GetElement("/tbody", tableNode); List <string> tableColumnNames = new List <string>(); tableColumnNames.Add("symbol"); tableColumnNames.Add("name"); bool hasISIN = XPath.GetElement("/th[3]", tableHeadNode).Value.ToLower().Contains("isin"); if (hasISIN) { tableColumnNames.Add("isin"); } else { tableColumnNames.Add("lasttrade"); } int l = MyHelper.EnumToArray(tableHeadNode.Elements()).Length; for (int i = 3; i < l; i++) { if (hasISIN) { switch (i) { case 3: tableColumnNames.Add("lasttrade"); break; case 4: tableColumnNames.Add("type"); break; case 5: tableColumnNames.Add("exchange"); break; } } else { string name = MyHelper.GetEnumItemAt(tableHeadNode.Elements(), i).Value.ToLower(); if (name.Contains("type")) { tableColumnNames.Add("type"); } else if (name.Contains("industry")) { tableColumnNames.Add("industry"); } else if (name.Contains("exchange")) { tableColumnNames.Add("exchange"); } } } foreach (XElement rowNode in tableBodyNode.Elements()) { IEnumerable <XElement> enm = rowNode.Elements(); if (MyHelper.EnumToArray(enm).Length >= tableColumnNames.Count) { string name = string.Empty, id = string.Empty, type = string.Empty, industry = string.Empty, exchange = string.Empty; ISIN isin = null; for (int i = 0; i < tableColumnNames.Count; i++) { switch (tableColumnNames[i]) { case "symbol": id = MyHelper.GetEnumItemAt(enm, i).Value.Trim(); break; case "name": name = MyHelper.GetEnumItemAt(enm, i).Value.Trim(); break; case "isin": if (MyHelper.GetEnumItemAt(enm, i).Value.Trim() != string.Empty) { try { isin = new ISIN(MyHelper.GetEnumItemAt(enm, i).Value.Trim()); } catch { } } break; case "lasttrade": break; case "type": type = MyHelper.GetEnumItemAt(enm, i).Value.Trim(); break; case "industry": industry = MyHelper.GetEnumItemAt(enm, i).Value.Trim(); break; case "exchange": exchange = MyHelper.GetEnumItemAt(enm, i).Value.Trim(); break; } } lst.Add(new IDSearchData(name, id, type, exchange, industry, isin)); } } overall = lst.Count; XElement paginationNode = XPath.GetElement("//div[@id=\"pagination\"]", doc); if (paginationNode != null) { PaginationScanner scn = new PaginationScanner(); scn.SetPagination(paginationNode.Value, out pageingFrom, out pagingTo, out overall); } } } result = new IDSearchResult(lst.ToArray(), pageingFrom, pagingTo, overall, resultsCount); #endregion } else if (settings is IDAlphabeticSearchDownloadSettings) { #region Alphabet XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] resultsNodes = XPath.GetElements("//results", doc); if (resultsNodes.Length > 0) { XElement resultNode = resultsNodes[0]; foreach (XElement trNode in resultNode.Elements()) { XElement[] enm = MyHelper.EnumToArray(trNode.Elements()); if (trNode.Name.LocalName == "tr" && enm.Length >= 2) { string name = string.Empty; foreach (XElement subNode in enm[0].Elements()) { name += subNode.Value.Trim() + " "; } name = name.TrimEnd(); string id = enm[1].Value.Trim(); lst.Add(new IDSearchData(name, id, "stock", "", null, null)); } } } result = new IDSearchResult(lst.ToArray(), -1, -1, -1, new Dictionary <SecurityType, int>()); #endregion } } if (result == null) { result = new IDSearchResult(lst.ToArray(), -1, -1, -1, new Dictionary <SecurityType, int>()); } return(result); }
protected override CompanyProfileResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { CompanyProfileData res = null; System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); if (stream != null) { XDocument doc = MyHelper.ParseXmlDocument(stream); XElement resultNode = XPath.GetElement("//table[@id=\"yfncsumtab\"]/tr[2]", doc); if (resultNode != null) { res = new CompanyProfileData(); res.SetID(FinanceHelper.CleanIndexID(((CompanyProfileDownloadSettings)settings).ID.ToUpper())); XElement nameNode = XPath.GetElement("td[1]/b[1]", resultNode); if (nameNode != null) { res.CompanyName = nameNode.Value; } XElement addressNode = XPath.GetElement("td[1]", resultNode); if (addressNode != null) { System.Text.StringBuilder formattedAddress = new System.Text.StringBuilder(); try { string addNodeStr = addressNode.ToString(); if (addNodeStr != string.Empty) { addNodeStr = addNodeStr.Substring(addNodeStr.IndexOf("/>") + 2); string[] rawAddress = addNodeStr.Substring(0, addNodeStr.IndexOf("Website")).Split(new string[] { "<b>", "<br />", "</b>", "\r", "\n", " - ", "</a>" }, StringSplitOptions.RemoveEmptyEntries); if (rawAddress.Length >= 7) { foreach (string line in rawAddress) { string l = line.Trim(); if (l != string.Empty && !l.StartsWith("<a") && l != "Map") { formattedAddress.AppendLine(l); } } } } } catch (Exception ex) { } res.Address = formattedAddress.ToString().TrimEnd(); } XElement indicesNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr/td[2]", resultNode); if (indicesNode != null) { List <KeyValuePair <string, string> > lstIndices = new List <KeyValuePair <string, string> >(); foreach (XElement indexLink in indicesNode.Elements()) { if (indexLink.Name.LocalName == "a") { string indexID = Uri.UnescapeDataString(MyHelper.GetXmlAttributeValue(indexLink, "href").ToUpper().Replace("HTTP://FINANCE.YAHOO.COM/Q?S=", "").Replace("&D=T", "")); string name = string.Empty; foreach (string p in indexLink.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { name += p.Trim() + " "; } lstIndices.Add(new KeyValuePair <string, string>(indexID, name.TrimEnd())); } } res.Details.IndexMembership = lstIndices.ToArray(); } XElement sectorsNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[2]/td[2]", resultNode); if (sectorsNode != null) { foreach (XElement sectorLink in sectorsNode.Elements()) { if (sectorLink.Name.LocalName == "a") { foreach (Sector sect in Enum.GetValues(typeof(Sector))) { string name = string.Empty; foreach (string p in sectorLink.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { name += p.Trim() + " "; } name = name.TrimEnd(); if (sect.ToString().Replace("_", " ") == name) { res.Details.Sector = sect; break; } } } } } XElement industryNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[3]/td[2]", resultNode); if (industryNode != null) { foreach (XElement industryLink in industryNode.Elements()) { if (industryLink.Name.LocalName == "a") { int indIndex = 0; if (int.TryParse(MyHelper.GetXmlAttributeValue(industryLink, "href").Replace("http://biz.yahoo.com/ic/", "").Replace(".html", ""), out indIndex)) { res.Details.Industry = (Industry)indIndex; } } } } XElement employeesNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[4]/td[2]", resultNode); if (employeesNode != null) { int fte; if (int.TryParse(employeesNode.Value.Trim(), System.Globalization.NumberStyles.Any, convCulture, out fte)) { res.Details.FullTimeEmployees = fte; } } XElement summaryNode = XPath.GetElement("td[1]/p[1]", resultNode); if (summaryNode != null) { System.Text.StringBuilder summaryText = new System.Text.StringBuilder(); foreach (string line in summaryNode.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { summaryText.Append(line.Trim() + " "); } res.BusinessSummary = summaryText.ToString().TrimEnd(); } XElement websitesNodes = XPath.GetElement("td[1]/table[5]/tr/td", resultNode); if (websitesNodes != null) { List <Uri> lstWebsites = new List <Uri>(); foreach (XElement linkNode in websitesNodes.Elements()) { if (linkNode.Name.LocalName == "a") { lstWebsites.Add(new Uri(MyHelper.GetXmlAttributeValue(linkNode, "href"))); } } res.CompanyWebsites = lstWebsites.ToArray(); } XElement governanceNode = null; XElement governanceHeader = XPath.GetElement("td[3]/table[1]/tr/th/span", resultNode); if (governanceHeader != null && governanceHeader.Value.Contains("Governance")) { governanceNode = XPath.GetElement("td[3]/table[2]/tr/td", resultNode); } if (governanceNode != null) { System.Text.StringBuilder governanceText = new System.Text.StringBuilder(); foreach (string line in governanceNode.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { governanceText.Append(line.Trim() + " "); } res.CorporateGovernance = governanceText.ToString().TrimEnd(); } XElement executivesNode = null; XElement executivesHeader = XPath.GetElement("td[3]/table[3]/tr/th/span", resultNode); if (executivesHeader != null && executivesHeader.Value.Contains("Executives")) { executivesNode = XPath.GetElement("td[3]/table[4]/tr/td/table", resultNode); } else { executivesNode = XPath.GetElement("td[3]/table[2]/tr/td/table", resultNode); } if (executivesNode != null) { List <ExecutivePersonInfo> lst = new List <ExecutivePersonInfo>(); bool isFirst = true; foreach (XElement row in executivesNode.Elements()) { if (!isFirst) { if (row.Name.LocalName == "tr") { XElement[] enm = MyHelper.EnumToArray(row.Elements()); if (enm.Length >= 3) { ExecutivePersonInfo exec = new ExecutivePersonInfo(); string name = string.Empty; foreach (string l in MyHelper.EnumToArray(enm[0].Elements())[0].Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { name += l.Trim() + " "; } exec.Name = name.TrimEnd(); string position = string.Empty; var enm2 = MyHelper.EnumToArray(enm[0].Elements()); foreach (string l in enm2[enm2.Length - 1].Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { position += l.Trim() + " "; } exec.Position = position.Trim(); string payStr = enm[1].Value.Replace("\r\n", "").Trim(); if (!payStr.Contains("N/A")) { exec.Pay = FinanceHelper.GetMillionValue(payStr) * 1000000; } string exercisedStr = enm[2].Value.Replace("\r\n", "").Trim(); if (!exercisedStr.Contains("N/A")) { double d = FinanceHelper.GetMillionValue(exercisedStr); exec.Exercised = (int)(d * 1000000); } lst.Add(exec); } } } else { isFirst = false; } } res.KeyExecutives = lst.ToArray(); } if (res.BusinessSummary.StartsWith("There is no ")) { res = null; } } } return(new CompanyProfileResult(res)); }