예제 #1
0
        private List <ExtractedValues> FetchAllPoliticians()
        {
            List <ExtractedValues> politicians = new List <ExtractedValues>();
            bool hasNextLink = true;

            while (hasNextLink)
            {
                OdataClient client = new OdataClient(url);
                Odata       page   = client.fetchData();

                foreach (var politician in page.Value)
                {
                    BiographyReader reader = new BiographyReader(politician.Biografi);
                    reader.ReadBiography();
                    ExtractedValues tempPol = reader.GetPolitician();
                    politicians.Add(tempPol);
                }
                if (page.NextLink == null)
                {
                    hasNextLink = false;
                }
                else
                {
                    url = page.NextLink;
                }
            }
            return(politicians);
        }
예제 #2
0
 private ExtractedValues CombineToPolitician(string firstname, string lastname, string party, string formattedTitle, string partyShortname, ContactInfo contact)
 {
     politicianValues = new ExtractedValues {
         Firstname      = firstname,
         Lastname       = lastname, Party = party,
         Title          = formattedTitle,
         PartyShortname = partyShortname,
         Contact        = contact
     };
     return(politicianValues);
 }
예제 #3
0
        private ExtractedValues ConvertToPolitician(string line, string contactLine)
        {
            string[] splittedLine;
            string[] splittedContactLine;
            splittedLine        = line.Split(' ');
            splittedContactLine = contactLine.Split(' ');

            ExtractedValues politician = new ExtractedValues();

            var name = GetNameFromSL(splittedLine);

            politician.Title     = GetTitleFromSL(splittedLine);
            politician.Firstname = name.Item1;
            politician.Lastname  = name.Item2;
            politician.Party     = GetPartyFromSL(splittedLine);
            politician.Contact   = GetContactFromCL(splittedContactLine);
            return(politician);
        }
        public async Task <List <BalanceSheet> > ScrapeBalanceSheet(string ticker, string apiKey)
        {
            #region Data from QuickFS
            var url = $" https://api.quickfs.net/stocks/{ticker}:US/bs/Annual/{apiKey}";

            var helper = new WebHelper();

            var request = await helper.ComposeWebRequestGet(url);

            var result = await helper.CallWebRequest(request);

            result = result.Replace("<\\/td>", "");

            var html = new HtmlAgilityPack.HtmlDocument();
            html.LoadHtml(result);

            var htmlNodes = html.DocumentNode.Descendants("td").ToList();
            #endregion

            #region DataOrganization

            #region WordRemover
            var word      = "Liabilities & Equity";
            var isDeleted = false;
            foreach (var nodeItem in htmlNodes.ToList())
            {
                if (nodeItem.InnerHtml.Equals(word) && isDeleted == false)
                {
                    nodeItem.InnerHtml = "";
                    isDeleted          = true;
                }
            }
            #endregion

            var numberOfColumns = html.DocumentNode.SelectNodes("//tr[@class='thead']").Descendants("td").ToList().Count();

            var numberOfRows = htmlNodes.Count / numberOfColumns;
            var count        = 1;

            var extractedValuesList = new List <ExtractedValues>();

            var valuesFinalList = new List <float>();

            var balanceSheets = new List <BalanceSheet>();

            for (var i = 1; i < numberOfColumns; i++)
            {
                var parsedYear = int.TryParse(htmlNodes[i].InnerText, out int yearNumber);
                //if (!parsedYear) return; lançar exceção

                for (var j = 1; j < numberOfRows; j++)
                {
                    var extractedValues = new ExtractedValues();
                    var baseItems       = new BaseItem();

                    var name = htmlNodes[j * numberOfColumns].InnerText;
                    baseItems.Name = name;

                    var valuesList = new List <string>();
                    foreach (var item in htmlNodes)
                    {
                        var htmlValue = item.GetAttributeValue("data-value", null);
                        valuesList.Add(htmlValue);
                    }

                    var  valuesFromNodes = valuesList[(j * numberOfColumns) + count];
                    bool parsedFloat     = float.TryParse(valuesFromNodes, NumberStyles.Float, CultureInfo.InvariantCulture, out float valuesFloat);
                    valuesFinalList.Add(valuesFloat);

                    if (yearNumber != 0 && name != "" && name != "Assets")
                    {
                        extractedValues.Year = yearNumber;
                        baseItems.Name       = name;
                        baseItems.Value      = valuesFloat;
                        extractedValues.Items.Add(baseItems);
                        extractedValuesList.Add(extractedValues);
                    }
                }
                #endregion

                #region Add to BalanceSheet
                var balanceSheet = new BalanceSheet();

                foreach (var extractedItem in extractedValuesList)
                {
                    var props = balanceSheet.GetType().GetProperties();

                    balanceSheet.Year = extractedItem.Year;

                    foreach (var prop in props)
                    {
                        var displayAttribute = prop.GetCustomAttributes <DisplayAttribute>().SingleOrDefault();

                        if (displayAttribute != null)
                        {
                            var item = extractedItem.Items.SingleOrDefault(i => i.Name == displayAttribute.Name);

                            if (item != null)
                            {
                                prop.SetValue(balanceSheet, item.Value);
                            }
                        }
                    }
                }

                if (balanceSheet.Year != 0)
                {
                    balanceSheets.Add(balanceSheet);
                }
                #endregion
            }

            Random rnd = new Random();
            await Task.Delay(TimeSpan.FromSeconds(rnd.Next(1, 10)));

            return(balanceSheets);
        }
예제 #5
0
        public async Task <List <CashFlowStatement> > ScrapeCashFlowStatement(string ticker, string apiKey)
        {
            #region Data From QuickFS

            string url = "https://api.quickfs.net/stocks/" + ticker + ":US/cf/Annual/" + apiKey;

            var helper  = new WebHelper();
            var request = await helper.ComposeWebRequestGet(url);

            var result = await helper.CallWebRequest(request);

            result = result.Replace("<\\/td>", "");
            result = result.Replace("$", "");
            result = result.Replace(",", ".");
            var html = new HtmlAgilityPack.HtmlDocument();
            html.LoadHtml(result);

            var htmlNodes = html.DocumentNode.Descendants("td").ToList();

            var numberOfColumns = html.DocumentNode.SelectNodes("//tr[@class='thead']").Descendants("td").ToList().Count();

            var numberOfRows = htmlNodes.Count / numberOfColumns;
            var count        = 1;

            #endregion

            #region Data Organization


            var namesList          = new List <string>();
            var cashFlowStatements = new List <CashFlowStatement>();
            var cashFlowStatementForCompanyList = new List <CashFlowStatement>();

            for (var i = 1; i < numberOfColumns; i++)
            {
                var extractedValuesList = new List <ExtractedValues>();

                for (var h = 1; h < numberOfRows; h++)
                {
                    var name = htmlNodes[h * numberOfColumns].InnerText;

                    if (name == "Other")
                    {
                        name = name + h;
                    }

                    namesList.Add(name);
                }

                var parsedYear = int.TryParse(htmlNodes[i].InnerText, out int yearNumber);
                //if (!parsedYear) return; lançar exceção

                for (var j = 1; j < numberOfRows; j++)
                {
                    var extractedValues = new ExtractedValues();
                    var baseItems       = new BaseItem();

                    var name = namesList[j - 1];
                    baseItems.Name = name;

                    var valuesList = new List <string>();
                    foreach (var item in htmlNodes)
                    {
                        var htmlValue = item.GetAttributeValue("data-value", null);
                        valuesList.Add(htmlValue);
                    }

                    var  valuesFromNodes = valuesList[(j * numberOfColumns) + count];
                    bool parsedFloat     = float.TryParse(valuesFromNodes, NumberStyles.Float, CultureInfo.InvariantCulture, out float valuesFloat);


                    if (yearNumber != 0 && name != "" && name != "Operating Expenses")
                    {
                        extractedValues.Year = yearNumber;
                        baseItems.Name       = name;
                        baseItems.Value      = valuesFloat;
                        extractedValues.Items.Add(baseItems);
                        extractedValuesList.Add(extractedValues);
                    }
                }
                count++;
                #endregion

                #region Add to CashFlowStatement

                foreach (var extractedItem in extractedValuesList)
                {
                    var cashFlowStatement = new CashFlowStatement();
                    var props             = cashFlowStatement.GetType().GetProperties();

                    cashFlowStatement.Year = extractedItem.Year;

                    foreach (var prop in props)
                    {
                        var displayAttribute = prop.GetCustomAttributes <DisplayAttribute>().SingleOrDefault();
                        if (displayAttribute != null)
                        {
                            var item = extractedItem.Items.SingleOrDefault(i => i.Name == displayAttribute.Name);

                            if (item != null)
                            {
                                prop.SetValue(cashFlowStatement, item.Value);
                            }
                        }
                    }
                    cashFlowStatements.Add(cashFlowStatement);
                }

                //if (cashFlowStatement.Year != 0) cashFlowStatementForCompanyList.Add(cashFlowStatement);

                #endregion
            }
            await Task.Delay(TimeSpan.FromSeconds(2));

            return(cashFlowStatements);
        }
        public async Task <List <KeyRatio> > ScrapeKeyRatio(string ticker, string apiKey)
        {
            #region Data from QuickFS
            string url = "https://api.quickfs.net/stocks/" + ticker + ":US/ratios/Annual/" + apiKey;

            var helper  = new WebHelper();
            var request = await helper.ComposeWebRequestGet(url);

            var result = await helper.CallWebRequest(request);

            result = result.Replace("<\\/td>", "");
            result = result.Replace("<\\/tr>", "");
            result = result.Replace("$", "");
            result = result.Replace(",", ".");
            var html = new HtmlDocument();
            html.LoadHtml(result);


            var htmlNodes = html.DocumentNode.Descendants("td").ToList();

            var numberOfColumns = html.DocumentNode.SelectNodes("//tr[@class='thead']").Descendants("td").ToList().Count();

            var numberOfRows = htmlNodes.Count / numberOfColumns;
            var count        = 1;

            #endregion

            #region DataOrganization

            var namesList       = new List <string>();
            var keyRatios       = new List <KeyRatio>();
            var valuesFinalList = new List <float>();

            for (var i = 1; i < numberOfColumns; i++)
            {
                var extractedValuesList = new List <ExtractedValues>();


                for (var h = 1; h < numberOfRows; h++)
                {
                    var name = htmlNodes[h * numberOfColumns].InnerText;

                    if (name == "Revenue" || name == "EBITDA" || name == "Operating Income" || name == "Free Cash Flow" || name == "Book Value" || name == "Tangible Book Value")
                    {
                        name = name + h;
                    }
                    namesList.Add(name);
                }


                var parsedYear = int.TryParse(htmlNodes[i].InnerText, out int yearNumber);
                //if (!parsedYear) return; lançar exceção


                for (var j = 1; j < numberOfRows; j++)
                {
                    var name = htmlNodes[j * numberOfColumns].InnerText;


                    var valuesList = new List <string>();
                    foreach (var item in htmlNodes)
                    {
                        var htmlValue = item.GetAttributeValue("data-value", null);
                        valuesList.Add(htmlValue);
                    }

                    var  valuesFromNodes = valuesList[(j * numberOfColumns) + count];
                    bool parsedFloat     = float.TryParse(valuesFromNodes, NumberStyles.Float, CultureInfo.InvariantCulture, out float valuesFloat);
                    valuesFinalList.Add(valuesFloat);

                    if (yearNumber != 0 && name != "" && name != "Returns")
                    {
                        var baseItems       = new BaseItem();
                        var extractedValues = new ExtractedValues();
                        extractedValues.Year = yearNumber;
                        baseItems.Name       = name;
                        baseItems.Value      = valuesFloat;
                        extractedValues.Items.Add(baseItems);
                        extractedValuesList.Add(extractedValues);
                    }
                }

                count++;
                #endregion



                #region Add to KeyRatio


                foreach (var extractedItem in extractedValuesList)
                {
                    var keyRatio = new KeyRatio();
                    var props    = keyRatio.GetType().GetProperties();

                    keyRatio.Year = extractedItem.Year;

                    foreach (var prop in props)
                    {
                        var displayAttribute = prop.GetCustomAttributes <DisplayAttribute>().SingleOrDefault();
                        if (displayAttribute != null)
                        {
                            var item = extractedItem.Items.SingleOrDefault(i => i.Name == displayAttribute.Name);

                            if (item != null)
                            {
                                prop.SetValue(keyRatio, item.Value);
                            }
                        }
                    }
                    if (keyRatio.Year != 0)
                    {
                        keyRatios.Add(keyRatio);
                    }
                }
                #endregion
            }
            Random rnd = new Random();
            await Task.Delay(TimeSpan.FromSeconds(rnd.Next(1, 10)));

            return(keyRatios);
        }