private void GetData() { WebClient webClient = new WebClient(); webClient.Headers.Add("user-agent", "Only a test!"); string js5on = webClient.DownloadString("https://api.mybitx.com/api/1/tickers"); //deserialse the object Dictionary <string, object> values = JsonConvert.DeserializeObject <Dictionary <string, object> >(js5on); BusLayer.Currency currencyHelper = new BusLayer.Currency(); //loop through each of the values and save the data DataLayer.TrnLunoValue.TrnLunoValueDataTable currencyTable = new DataLayer.TrnLunoValue.TrnLunoValueDataTable(); foreach (var item in values) { List <Dictionary <string, string> > itemList = JsonConvert.DeserializeObject <List <Dictionary <string, string> > >(item.Value.ToString()); int totalBids = 0; int maxTotal = 10; foreach (Dictionary <string, string> thisItem in itemList) { //get the current list item for the code //if the code exists it means we want to add the data, else we just continue to the next try { string searchCode = thisItem["pair"]; if (searchCode == "XBTZAR") { searchCode = "BTC"; } DataLayer.MstCurrencyList.MstCurrencyListRow currentListRow = currencyHelper.GetCurrentListRowForCode(searchCode); decimal thisBid = Convert.ToDecimal(thisItem["bid"]); int currentBid = Convert.ToInt32(thisBid); totalBids += currentBid; //if(totalBids >= maxTotal) //{ //stop the counter now // break; //} //order data only - must take the ["Bid"] element and save the price and volume up to a max of 10 BTC coints //add a new row and save the data DataLayer.TrnLunoValue.TrnLunoValueRow newRow = currencyTable.NewTrnLunoValueRow(); newRow.TrnLunoValueGuid = Guid.NewGuid(); newRow.MstCurrencyListGuid = currentListRow.MstCurrencyListGuid; newRow.timestamp = thisItem["timestamp"]; newRow.bid = decimal.Parse(thisItem["bid"]); newRow.ask = decimal.Parse(thisItem["ask"]); newRow.last_trade = decimal.Parse(thisItem["last_trade"]); newRow.rolling_24_hour_volume = decimal.Parse(thisItem["rolling_24_hour_volume"]); newRow.pair = thisItem["pair"]; newRow.CreateDate = DateTime.Now; newRow.PrmCurrencySourceId = (int)BusLayer.Handler.CurrencySource.Sources.Luno; currencyTable.AddTrnLunoValueRow(newRow); } catch (Exception ex) { } } } //update the table currencyHelper.UpdateCurrencyValue(currencyTable); }
private void GetData() { //the name of the current page we are attempting to get data from string currentCurrencyListItem = string.Empty; try { WebClient webClient = new WebClient(); webClient.Headers.Add("user-agent", "Only a test!"); string websiteUrl = "https://www.altcointrader.co.za/|https://www.altcointrader.co.za/xrp|https://www.altcointrader.co.za/eth|https://www.altcointrader.co.za/dash|https://www.altcointrader.co.za/ltc|https://www.altcointrader.co.za/zec"; string[] websiteUrls = websiteUrl.Split('|'); foreach (string url in websiteUrls) { Guid securityKey = Guid.NewGuid(); new WebClient(); webClient.Headers.Add("user-agent", "Only a test!"); string js5on = webClient.DownloadString(url); currentCurrencyListItem = url.Replace("https://www.altcointrader.co.za/", "").ToUpper(); if (currentCurrencyListItem == string.Empty) { currentCurrencyListItem = "BTC"; } BusLayer.Currency currencyHelper = new BusLayer.Currency(); DataLayer.MstCurrencyList.MstCurrencyListRow currencyListRow = currencyHelper.GetCurrentListRowForCode(currentCurrencyListItem); // This expression looks for a sub-string in the form of // "<p>...<a...>...ItemText...</a> and returns the item text. //string expression = @"<p>[^<]*<a[^>]*>(?<item>[^<]*)</a>"; //string ex = @"<div class='trade-orders orange-border'></div>"; string className = "trade-table"; string globalPattern = String.Format("<table[^>]*?class=([\"'])[^>]*{0}[^>]*\\1[^>]*>(.*?)</table>", className); // This executes the regular expression and returns all // matches found. MatchCollection matches = Regex.Matches( js5on, globalPattern, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase ); //go through the first 2 tables only int count = 0; while (count < 2) { string currclassName = string.Empty; if (count == 0) { currclassName = "orderUdSell"; } else { currclassName = "orderUdBuy"; } string currglobalPattern = String.Format("<tr[^>]*?class = ([\"'])[^>]*{0}[^>]*\\1[^>]*>(.*?)</tr>", currclassName); string currentTable = matches[count].ToString(); MatchCollection currMatches = Regex.Matches( currentTable, currglobalPattern, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase ); foreach (var obj in currMatches) { string currentItem = obj.ToString(); int prmSellBuyId = 0; //replace all the bad characters if (count == 0) { prmSellBuyId = 1; currentItem = currentItem.Replace("\t", "").Replace("\r\n", "").Replace("<tr class = 'orderUdSell'>", "").Replace("</tr>", ""); } else { prmSellBuyId = 2; currentItem = currentItem.Replace("\t", "").Replace("\r\n", "").Replace("<tr class = 'orderUdBuy'>", "").Replace("</tr>", ""); } //[1] - Price //[3] - Coin Amount //[5] - Total string[] spltRes = currentItem.Split('<'); string priceValue = string.Empty; string coinValue = string.Empty; string totalValue = string.Empty; if (count == 0) { priceValue = spltRes[1].Replace("td class = 'orderUdSPr'>", ""); coinValue = spltRes[3].Replace("td class = 'orderUdSAm'>", ""); totalValue = spltRes[5].Replace("td>", ""); } else { priceValue = spltRes[1].Replace("td class = 'orderUdBPr'>", ""); coinValue = spltRes[3].Replace("td class = 'orderUdBAm'>", ""); totalValue = spltRes[5].Replace("td>", ""); } System.IO.File.WriteAllText(@"c:\temp\values.txt", "Coin: " + coinValue + " Converted Coin:" + decimal.Parse(coinValue, new CultureInfo("en-US"))); //create the new row DataLayer.TrnAltCoinTraderValue.TrnAltCoinTraderValueDataTable newTbl = new DataLayer.TrnAltCoinTraderValue.TrnAltCoinTraderValueDataTable(); DataLayer.TrnAltCoinTraderValue.TrnAltCoinTraderValueRow newRow = newTbl.NewTrnAltCoinTraderValueRow(); newRow.TrnAltCoinTraderValueGuid = Guid.NewGuid(); newRow.SecurityKey = securityKey; newRow.MstCurrencyListGuid = currencyListRow.MstCurrencyListGuid; newRow.CoinValue = decimal.Parse(coinValue, new CultureInfo("en-US")); newRow.PriceValue = decimal.Parse(priceValue, new CultureInfo("en-US")); newRow.TotalValue = decimal.Parse(totalValue, new CultureInfo("en-US")); newRow.CreateDate = DateTime.Now; newRow.PrmCurrencyId = 3;// currencyRow.PrmCurrencyId; newRow.PrmCurrencySourceId = 1; newRow.PrmSellBuyId = prmSellBuyId; newTbl.AddTrnAltCoinTraderValueRow(newRow); currencyHelper.UpdateCurrencyValue(newRow); } count++; } } } catch (Exception ex) { //throw an exception with the code of the page that we are laoding throw new Exception("Unable to get page data for : " + currentCurrencyListItem, ex); } }