예제 #1
0
        protected override NasdaqEarningForecastResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, Base.SettingsBase settings)
        {
            List <NasdaqEarningForecastData> yearly    = new List <NasdaqEarningForecastData>(10);
            List <NasdaqEarningForecastData> quarterly = new List <NasdaqEarningForecastData>(10);

            System.Globalization.CultureInfo culture = Factory.DownloadCultureInfo;
            string pattern = @"<title>.*\((\w*)\).*</title>";

            if (stream != null)
            {
                var content = MyHelper.StreamToString(stream, System.Text.Encoding.UTF8);

                var matchPattern = "(<div class=\"genTable\">.*?</div>)";
                var match        = Regex.Matches(content, matchPattern, RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant);

                XParseDocument year    = MyHelper.ParseXmlDocument(match[0].Groups[0].Value);
                XParseDocument quarter = MyHelper.ParseXmlDocument(match[1].Groups[0].Value);


                var symbol     = Regex.Match(content, pattern).Groups[1].Value;
                var resultNode = XPath.GetElement("//table", year);
                ParseTable(yearly, resultNode, symbol, "");

                resultNode = XPath.GetElement("//table", quarter);
                ParseTable(quarterly, resultNode, symbol, "");

                return(new NasdaqEarningForecastResult(yearly.ToArray(), quarterly.ToArray()));
            }
            return(null);
        }
        protected override QuoteOptionsResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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()));
        }
예제 #3
0
        protected override WeatherFeedResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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 PlacesResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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 LocationIDSearchResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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()));
        }
예제 #6
0
        protected override CompanyInfoResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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 StockScreenerResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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()));
        }
예제 #8
0
        protected override SearchResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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));
        }
예제 #9
0
        protected override IDSearchResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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");
                    XParseDocument doc = MyHelper.ParseXmlDocument(stream);

                    XParseElement resultNode = XPath.GetElement("//div[@id=\"yfi_sym_lookup\"]", doc);
                    if (resultNode != null)
                    {
                        XParseElement 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);
                                }
                            }
                        }

                        XParseElement contentNode = XPath.GetElement("div[1]", resultNode);
                        if (contentNode != null)
                        {
                            XParseElement tableNode     = XPath.GetElement("/div[1]/table", contentNode);
                            XParseElement tableHeadNode = XPath.GetElement("/thead/tr", tableNode);
                            XParseElement 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 (XParseElement rowNode in tableBodyNode.Elements())
                            {
                                IEnumerable <XParseElement> 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;
                            XParseElement 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
                    XParseDocument  doc          = MyHelper.ParseXmlDocument(stream);
                    XParseElement[] resultsNodes = XPath.GetElements("//results", doc);

                    if (resultsNodes.Length > 0)
                    {
                        XParseElement resultNode = resultsNodes[0];

                        foreach (XParseElement trNode in resultNode.Elements())
                        {
                            XParseElement[] enm = MyHelper.EnumToArray(trNode.Elements());
                            if (trNode.Name.LocalName == "tr" && enm.Length >= 2)
                            {
                                string name = string.Empty;
                                foreach (XParseElement 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);
        }
예제 #10
0
        protected override CompanyProfileResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, Base.SettingsBase settings)
        {
            CompanyProfileData res = null;

            System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US");
            if (stream != null)
            {
                XParseDocument doc        = MyHelper.ParseXmlDocument(stream);
                XParseElement  resultNode = XPath.GetElement("//table[@id=\"yfncsumtab\"]/tr[2]", doc);

                if (resultNode != null)
                {
                    res = new CompanyProfileData();
                    res.SetID(FinanceHelper.CleanIndexID(((CompanyProfileDownloadSettings)settings).ID.ToUpper()));

                    XParseElement nameNode = XPath.GetElement("td[1]/b[1]", resultNode);
                    if (nameNode != null)
                    {
                        res.CompanyName = nameNode.Value;
                    }

                    XParseElement 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();
                    }

                    XParseElement 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 (XParseElement 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();
                    }

                    XParseElement sectorsNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[2]/td[2]", resultNode);
                    if (sectorsNode != null)
                    {
                        foreach (XParseElement 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;
                                    }
                                }
                            }
                        }
                    }

                    XParseElement industryNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[3]/td[2]", resultNode);
                    if (industryNode != null)
                    {
                        foreach (XParseElement 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;
                                }
                            }
                        }
                    }

                    XParseElement 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;
                        }
                    }

                    XParseElement 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();
                    }

                    XParseElement websitesNodes = XPath.GetElement("td[1]/table[5]/tr/td", resultNode);
                    if (websitesNodes != null)
                    {
                        List <Uri> lstWebsites = new List <Uri>();
                        foreach (XParseElement linkNode in websitesNodes.Elements())
                        {
                            if (linkNode.Name.LocalName == "a")
                            {
                                lstWebsites.Add(new Uri(MyHelper.GetXmlAttributeValue(linkNode, "href")));
                            }
                        }
                        res.CompanyWebsites = lstWebsites.ToArray();
                    }



                    XParseElement governanceNode   = null;
                    XParseElement 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();
                    }



                    XParseElement executivesNode   = null;
                    XParseElement 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 (XParseElement row in executivesNode.Elements())
                        {
                            if (!isFirst)
                            {
                                if (row.Name.LocalName == "tr")
                                {
                                    XParseElement[] 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));
        }
예제 #11
0
        protected override MarketQuotesResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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()));
        }
예제 #12
0
        protected override PlaceFinderResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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;

            XParseDocument doc = MyHelper.ParseXmlDocument(stream);

            XParseElement[] resultSet = XPath.GetElements("//ResultSet", doc);
            if (resultSet.Length == 1)
            {
                XParseElement resultSetNode = resultSet[0];

                foreach (XParseElement 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 (XParseElement 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 (XParseElement 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));
        }
예제 #13
0
 internal IndustryResponse(Base.ConnectionInfo info, IndustryResult result)
     : base(info, result)
 {
 }
예제 #14
0
 internal SectorResponse(Base.ConnectionInfo info, SectorResult result)
     : base(info, result)
 {
 }
예제 #15
0
        protected override MarketResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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");
                XParseDocument  doc     = MyHelper.ParseXmlDocument(stream);
                XParseElement[] results = XPath.GetElements("//sector", doc);
                foreach (XParseElement 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 (XParseElement industryNode in node.Elements())
                    {
                        if (industryNode.Name.LocalName == "industry")
                        {
                            IndustryData ind = new IndustryData();
                            foreach (XParseAttribute 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");
                XParseDocument  doc     = MyHelper.ParseXmlDocument(stream);
                XParseElement[] results = XPath.GetElements("//industry", doc);
                foreach (XParseElement node in results)
                {
                    IndustryData ind = new IndustryData();
                    foreach (XParseAttribute 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 (XParseElement companyNode in node.Elements())
                    {
                        if (companyNode.Name.LocalName == "company")
                        {
                            CompanyInfoData comp = new CompanyInfoData();
                            foreach (XParseAttribute 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);
            }
        }
예제 #16
0
        protected override QuotesResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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));
        }
예제 #17
0
 public ExchangeRateResponse(Base.ConnectionInfo connInfo, ExchangeRateResult result)
     : base(connInfo, result)
 {
 }
예제 #18
0
        protected override FuturesResult ConvertResult(Base.ConnectionInfo connInfo, System.IO.Stream stream, 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));
        }