private async void ToolExcel_Click(object sender, EventArgs e) { try { Cursor.Current = Cursors.WaitCursor; ShowMessage("Please Wait..."); if (!ValidateData()) { return; } ApplicationSettings.Default.RobinKey = RobinKey.Text.Trim(); RobinDownloadBL downloadBL = new RobinDownloadBL(); downloadBL.feedback += ShowMessage; ShowMessage("Download Position Data"); List <BankPortfolioData> postions = await downloadBL.GetPositionData(); UtilityHandler.Export2Csv(postions, "Position"); ShowMessage("Download Transaction Data"); List <BankTransactionData> transaction = await downloadBL.GetTransactionData(); UtilityHandler.Export2Csv(transaction, "Transaction"); List <BankAccountTransferData> transfer = await downloadBL.GetBankTransfer(); UtilityHandler.Export2Csv(transfer, "Transfer"); ShowMessage($"Exported in {ApplicationSettings.Default.LoggingFolder} folder"); } catch (Exception ex) { ShowMessage(ex.Message); } finally { Cursor.Current = Cursors.Default; } }
private bool ValidateData() { if (UtilityHandler.IsEmpty(RobinKey.Text.Trim())) { ShowMessage("Enter the Bearer token"); return(false); } return(true); }
private string GetTagValue(Dictionary <string, string> input, string tag) { string output = string.Empty; if (UtilityHandler.IsEmpty(tag) || !input.ContainsKey(tag)) { return(output); } return(input[tag]); }
public async Task <OutData <TimeSeriesIntradayData> > GetShareIntraday(string shareCode, string interval = "15min", string outputSize = "compact", bool isAdjusted = true) { TimeSeriesIntradayData data = new TimeSeriesIntradayData(); OutData <TimeSeriesIntradayData> output = new OutData <TimeSeriesIntradayData>() { Data = data }; try { string query = $"/query?function=TIME_SERIES_INTRADAY&symbol={shareCode}&interval={interval}&outputsize={outputSize}"; string url = $"{Settings.Default.StockApi}{query}&apikey={Settings.Default.ApiKey}"; using HttpClient client = UtilityHandler.GetHttpClient(); Uri requestUri = new Uri(url); HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { output.StatusList.Add(new Status("F", response.StatusCode.ToString(), 0)); Logger.Log($"GetShareIntraday -{shareCode} - Failed call"); return(output); } string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); LogJsonValue(shareCode, json); Dictionary <string, object> jo = JsonConvert.DeserializeObject <Dictionary <string, object> >(json); foreach (string key in jo.Keys) { JToken value = (JObject)jo[key]; if (key == AlphaVantagTagConstants.TAG_META_DATA) { data.MetaData = ParseMetaData(value); continue; } if (key.StartsWith(AlphaVantagTagConstants.TAG_TIME_SERIES)) { data.Data = ParseTimeSeries(value); } } return(output); } catch (Exception ex) { string mess = $"GetShareIntraday - Share :{shareCode} {ex.Message}"; output.StatusList.Add(new Status("F", mess, 0)); Logger.LogError($"GetShareIntraday - Share :{shareCode}", $"{ex.Message} - {ex.StackTrace}"); return(output); } }
private decimal GetTagValueDecimal(Dictionary <string, string> input, string tag) { decimal output = 0; string s = GetTagValue(input, tag); if (UtilityHandler.IsEmpty(s)) { return(output); } decimal.TryParse(s, out output); return(output); }
private DateTime GetTagValueDateTime(Dictionary <string, string> input, string tag) { DateTime output = DateTime.MinValue; string s = GetTagValue(input, tag); if (UtilityHandler.IsEmpty(s)) { return(output); } DateTime.TryParse(s, out output); return(output); }
private long GetTagValueLong(Dictionary <string, string> input, string tag) { long output = 0; string s = GetTagValue(input, tag); if (UtilityHandler.IsEmpty(s)) { return(output); } long.TryParse(s, out output); return(output); }
public async Task <RhFundamental> GetFundamental(string input) { if (UtilityHandler.IsEmpty(input)) { return(new RhFundamental()); } OutData <string> data = await GetJsonData($"fundamentals/{input.Trim()}/"); if (data.StatusList.Count > 0) { throw new ApplicationException($"{data.StatusList[0].Code} - {data.StatusList[0].Description}"); } LogJsonData($"Fundamental_{input}", data.Data); return(JsonConvert.DeserializeObject <RhFundamental>(data.Data)); }
public async Task <RhTrade> GetQuote(string symbol) { if (UtilityHandler.IsEmpty(symbol)) { return(new RhTrade()); } OutData <string> data = await GetJsonData($"quotes/{symbol}/"); if (data.StatusList.Count > 0) { throw new ApplicationException(data.StatusList[0].Description); } LogJsonData($"Quote_{symbol}", data.Data); return(JsonConvert.DeserializeObject <RhTrade> (data.Data)); }
public async Task <OutData <GlobalQuoteData> > GetCurrentQuote(string shareCode) { //https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=IBM&apikey=demo OutData <GlobalQuoteData> output = new OutData <GlobalQuoteData>(); try { string query = $"/query?function=GLOBAL_QUOTE&symbol={shareCode}"; string url = $"{Settings.Default.StockApi}{query}&apikey={Settings.Default.ApiKey}"; using HttpClient client = UtilityHandler.GetHttpClient(); Uri requestUri = new Uri(url); HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { output.StatusList.Add(new Status("F", response.StatusCode.ToString(), 0)); Logger.Log($"GetCurrentQuote -{shareCode} - Failed call"); return(output); } string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); LogJsonValue(shareCode, json); Dictionary <string, object> jo = JsonConvert.DeserializeObject <Dictionary <string, object> >(json); foreach (string key in jo.Keys) { JToken value = (JObject)jo[key]; if (key.StartsWith(AlphaVantagTagConstants.TAG_GLOBAL_QUOTE)) { output.Data = ParseGlobalQuote(value); } } if (UtilityHandler.IsEmpty(output.Data.Symbol)) { output.StatusList.Add(new Status("F", "Not Parsed data data well", 0)); Logger.Log($"GetCurrentQuote - {shareCode} JSon Pasing Issue"); Logger.Log(json); return(output); } return(output); } catch (Exception ex) { string mess = $"GetCompanyOverview - Share :{shareCode} {ex.Message}"; output.StatusList.Add(new Status("F", mess, 0)); Logger.LogError($"GetCompanyOverview - Share :{shareCode}", $"{ex.Message} - {ex.StackTrace}"); return(output); } }
protected virtual string BuildExcelReport(DataSet ds) { string fileName = GetExcelFileName(); using (XLWorkbook book = new XLWorkbook()) { foreach (DataTable dt in ds.Tables) { string sheetName = dt.TableName; DataTable dtc = UtilityHandler.CleanData(dt); book.Worksheets.Add(dtc, sheetName); } FormatExcelSheet(book); book.SaveAs(fileName); } return(fileName); }
private void Awake() // on awake { utilityHandler = new UtilityHandler(this); // create util handler switch (pawnType) //swith on type { case PawnType.Hauler: jobHandler = new JobHandlerHauling(this); //assign correct job handler break; case PawnType.Cleaner: jobHandler = new JobHandlerCleaning(this); // break; case PawnType.Scientist: break; case PawnType.Builder: jobHandler = new JobHandlerConstruction(this); // break; } }
public static DataTable GetDataSet(DataTable src, string tableName, List <ExcelColumn> columns) { DataTable output = new DataTable(tableName); foreach (ExcelColumn rc in columns) { output.Columns.Add(rc.ColumnName, rc.DataType); } foreach (DataRow row in src.Rows) { DataRow r = output.NewRow(); foreach (DataColumn dc in output.Columns) { if (src.Columns.Contains(dc.ColumnName)) { r[dc.ColumnName] = row[dc.ColumnName]; } } output.Rows.Add(r); } //Change the display Name foreach (ExcelColumn col in columns) { if (UtilityHandler.IsEmpty(col.DisplayName)) { continue; } if (col.ColumnName != col.DisplayName && output.Columns.Contains(col.ColumnName)) { output.Columns[col.ColumnName].ColumnName = col.DisplayName; } } return(output); }
public static async Task <RhInstrument> GetRhInstrument(string url, bool OnlineLookup = false) { string instrumentID = GetInstrumentID(url); if (!OnlineLookup && lookup.ContainsKey(instrumentID)) { return(lookup[instrumentID]); } RhInstrument output = new RhInstrument(); HttpClientHandler handler = new HttpClientHandler { UseDefaultCredentials = true }; HttpClient client = new HttpClient(handler); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Add("Cache-Control", "no-cache"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Uri requestUri = new Uri(url); HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { return(output); } string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); output = JsonConvert.DeserializeObject <RhInstrument>(json); instrumentID = output.Id.Trim(); if (!(UtilityHandler.IsEmpty(instrumentID) || lookup.ContainsKey(instrumentID)) ) { lookup.Add(instrumentID, output); } return(output); }
protected virtual DataTable GetDataTable(string tableName, DataTable src, List <ExcelColumn> columns) { DataTable des = new DataTable(tableName); foreach (ExcelColumn rc in columns) { des.Columns.Add(rc.ColumnName, rc.DataType); } foreach (DataRow row in src.Rows) { DataRow r = des.NewRow(); foreach (DataColumn dc in des.Columns) { if (src.Columns.Contains(dc.ColumnName)) { r[dc.ColumnName] = row[dc.ColumnName]; } } des.Rows.Add(r); } //Change the display Name foreach (ExcelColumn col in columns) { if (UtilityHandler.IsEmpty(col.DisplayName)) { continue; } if (col.ColumnName != col.DisplayName && des.Columns.Contains(col.ColumnName)) { des.Columns[col.ColumnName].ColumnName = col.DisplayName; } } return(UtilityHandler.CleanData(des)); }
/// <summary> /// 易班授权验证 /// </summary> private void YbOauth() { try { #region 判断Code是否为空 if (string.IsNullOrEmpty(Request.QueryString["code"])) { LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, "易班账号登录失败:code为NULL!"); UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror"); return; } #endregion 判断Code是否为空 #region 认证信息 YbSDK.Api.OauthApi oauthApi = new YbSDK.Api.OauthApi(); #endregion 认证信息 #region 通过code获得AccessToken //通过code获得AccessToken string strUrl_AccessToken = "https://openapi.yiban.cn/oauth/access_token"; string strParam_AccessToken = "client_id=" + oauthApi.context.Config.AppId + "&client_secret=" + oauthApi.context.Config.AppSecret + "&code=" + Request.QueryString["code"].ToString() + "&redirect_uri=" + oauthApi.context.Config.Callback; string strResult_AccessToken = HttpMethods.HttpPost(strUrl_AccessToken, strParam_AccessToken); //LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_INFO, "获取已授权用户的access_token:" + strResult_AccessToken); AccessToken accessToken = jss.Deserialize <AccessToken>(strResult_AccessToken); if (string.IsNullOrEmpty(accessToken.access_token)) { LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, "易班账号登录失败:通过code获得AccessToken为NULL!"); UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror"); return; } #endregion 通过code获得AccessToken #region 通过AccessToken获得用户信息 //通过AccessToken获得用户信息 string strUrl_VerifyMe = "https://openapi.yiban.cn/user/verify_me?access_token=" + accessToken.access_token; string strResult_VerifyMe = HttpMethods.HttpGet(strUrl_VerifyMe); UserVerify userVerify = jss.Deserialize <UserVerify>(strResult_VerifyMe); if (userVerify == null) { RevokeToken(oauthApi, accessToken.access_token, "", ""); LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, userVerify.info.yb_realname + " 易班账号登录失败:通过AccessToken获得用户信息为NULL!"); UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror"); return; } #endregion 通过AccessToken获得用户信息 #region 验证易班用户是否在资助系统中已经有注册用户 //验证易班用户是否在资助系统中已经有注册用户 string strUserId = userVerify.info.yb_studentid;//学号 if (string.IsNullOrEmpty(strUserId)) { strUserId = userVerify.info.yb_employid; //工号 } string strUserName = userVerify.info.yb_realname; //姓名 SqlParameter[] p = new SqlParameter[2]; p[0] = new SqlParameter("@id", strUserId); p[1] = new SqlParameter("@name", strUserName); if (strUserId.Length == 0 || strUserName.Length == 0) { RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName); LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, " 易班账号登录失败:" + strUserId + "易班账号为空或者" + strUserName + "易班真实用户名为空!"); UtilityHandler.WindowLocation("/Yb.html?yb=yb_noexist"); return; } //ZZ 20180901 新增:对接教务系统 Start //学生在易班登录的时候,通过教务系统对接接口获得学生在教务系统中的基础信息 string jw_msg = string.Empty; if (!JWHandleClass.getInstance().ByJwInsertOrUpdateStuInfo("200812601079", out jw_msg)) { //RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName); //LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, strUserName + " 易班账号登录失败:对接教务系统,出错:"+ jw_msg); UtilityHandler.WindowLocation("/Yb.html?yb=yb_noexist"); return; } //ZZ 20180901 新增:对接教务系统 End LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_INFO, "易班登录,学号或者工号:" + strUserId + " 真实姓名:" + strUserName); DataTable dtUser = ds.ExecuteTxtDataTable("SELECT * FROM UA_USER WHERE USER_ID=@id AND USER_NAME=@name", p); if (dtUser == null || dtUser.Rows.Count == 0) { RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName); LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, strUserName + " 易班账号登录失败:资助系统不存在此用户!"); UtilityHandler.WindowLocation("/Yb.html?yb=yb_noexist"); return; } //更新易班token值到用户表中 if (!ComHandleClass.getInstance().UpdateUaUser_YbToken(dtUser.Rows[0]["USER_ID"].ToString(), accessToken.access_token)) { RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName); UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror"); return; } string username = dtUser.Rows[0]["USER_ID"].ToString(); string password = dtUser.Rows[0]["LOGIN_PW"].ToString(); if (UserHandler.CheckLogin(username, password, true)) { //LogDBHandleClass.getInstance().LogOperation(strUserId, "用户易班登录", CValue.LOG_ACTION_TYPE_0, CValue.LOG_RECORD_TYPE_1, string.Format("用户易班登录:用户{0},用户名{1}", strUserId, strUserName), strUserId, strUserName, Fetch.UserIp); UtilityHandler.WindowLocation("/Index.aspx?sid=" + accessToken.access_token); return; } #endregion 验证易班用户是否在资助系统中已经有注册用户 } catch (Exception ex) { //string strMsg = "易班账号登录失败:" + ex.ToString(); //LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, strMsg); UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror"); return; } }
// https://github.com/LutsenkoKirill/AlphaVantage.Net/tree/v2 // https://www.alphavantage.co/documentation/#intraday public async Task <OutData <CompanyOverviewData> > GetCompanyOverview(string shareCode) { //https://www.alphavantage.co/query?function=OVERVIEW&symbol=IBM&apikey=demo CompanyOverviewData data = new CompanyOverviewData() { Symbol = shareCode }; OutData <CompanyOverviewData> output = new OutData <CompanyOverviewData>() { Data = data }; try { string query = $"/query?function=OVERVIEW&symbol={shareCode}"; string url = $"{Settings.Default.StockApi}{query}&apikey={Settings.Default.ApiKey}"; using HttpClient client = UtilityHandler.GetHttpClient(); Uri requestUri = new Uri(url); HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { output.StatusList.Add(new Status("F", response.StatusCode.ToString(), 0)); Logger.Log($"CompanyOverviewData -{shareCode} - Failed call"); return(output); } string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); Dictionary <string, string> dicData = JsonConvert.DeserializeObject <Dictionary <string, string> >(json); data.Symbol = GetTagValue(dicData, AlphaVantagTagConstants.TAG_SYMBOL); data.AssetType = GetTagValue(dicData, AlphaVantagTagConstants.TAG_ASSET_TYPE); data.Name = GetTagValue(dicData, AlphaVantagTagConstants.TAG_NAME); data.Description = GetTagValue(dicData, AlphaVantagTagConstants.TAG_DESCRIPTION); data.Exchange = GetTagValue(dicData, AlphaVantagTagConstants.TAG_EXCHANGE); data.Currency = GetTagValue(dicData, AlphaVantagTagConstants.TAG_CURRENCY); data.Country = GetTagValue(dicData, AlphaVantagTagConstants.TAG_COUNTRY); data.Sector = GetTagValue(dicData, AlphaVantagTagConstants.TAG_SECTOR); data.Industry = GetTagValue(dicData, AlphaVantagTagConstants.TAG_INDUSTRY); data.Address = GetTagValue(dicData, AlphaVantagTagConstants.TAG_ADDRESS); data.FullTimeEmployees = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_FULLTIME_EMPLOYEES); data.FiscalYearEnd = GetTagValue(dicData, AlphaVantagTagConstants.TAG_FISCAL_YEAR_END); data.LatestQuarter = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_LATEST_QUARTER); data.MarketCapitalization = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_MARKET_CAPITALIZATION); data.EBITDA = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_EBITDA); data.PERatio = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PERATIO); data.PEGRatio = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PEGRATIO); data.BookValue = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_BOOKVALUE); data.DividendPerShare = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_DIVIDEND_PER_SHARE); data.DividendYield = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_DIVIDEND_YIELD); data.EPS = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_EPS); data.RevenuePerShareTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_REVENUE_PER_SHARE_TTM); data.ProfitMargin = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PROFIT_MARGIN); data.OperatingMarginTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_OPERATING_MARGIN_TTM); data.ReturnOnAssetsTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_RETURN_ON_ASSETS_TTM); data.ReturnOnEquityTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_RETURN_ON_EQUITY_TTM); data.RevenueTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_REVENUE_TTM); data.GrossProfitTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_GROSS_PROFIT_TTM); data.DilutedEPSTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_DILUTED_EPS_TTM); data.QuarterlyEarningsGrowthYOY = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_QUARTERLY_EARNINGS_GROWTH_YOY); data.QuarterlyRevenueGrowthYOY = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_QUARTERLY_REVENUE_GROWTH_YOY); data.AnalystTargetPrice = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_ANALYST_TARGET_PRICE); data.TrailingPE = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_TRAILING_PE); data.ForwardPE = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_FORWARD_PE); data.PriceToSalesRatioTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PRICE_TO_SALES_RATIO_TTM); data.PriceToBookRatio = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PRICE_TO_BOOK_RATIO); data.EVToRevenue = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_EV_TO_REVENUE); data.EVToEBITDA = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_EV_TO_EBITDA); data.Beta = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_BETA); data.Week52High = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_52_WEEK_HIGH); data.Week52Low = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_52_WEEK_LOW); data.Day50MovingAverage = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_50_DAY_MOVING_AVERAGE); data.Day200MovingAverage = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_200_DAY_MOVING_AVERAGE); data.SharesOutstanding = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_OUTSTANDING); data.SharesFloat = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_FLOAT); data.SharesShort = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_SHORT); data.SharesShortPriorMonth = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_SHORT_PRIOR_MONTH); data.ShortRatio = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHORT_RATIO); data.ShortPercentOutstanding = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_SHORT_PERCENT_OUTSTANDING); data.ShortPercentFloat = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_SHORT_PERCENT_FLOAT); data.PercentInsiders = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PERCENT_INSIDERS); data.PercentInstitutions = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PERCENT_INSTITUTIONS); data.ForwardAnnualDividendRate = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_FORWARD_ANNUAL_DIVIDEND_RATE); data.ForwardAnnualDividendYield = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_FORWARD_ANNUAL_DIVIDEND_YIELD); data.PayoutRatio = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PAYOUT_RATIO); data.DividendDate = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_DIVIDEND_DATE); data.ExDividendDate = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_EX_DIVIDEND_DATE); data.LastSplitFactor = GetTagValue(dicData, AlphaVantagTagConstants.TAG_LAST_SPLIT_FACTOR); data.LastSplitDate = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_LAST_SPLIT_DATE); if (UtilityHandler.IsEmpty(data.Name)) { output.StatusList.Add(new Status("F", "Not Parsed data data well", 0)); Logger.Log($"CompanyOverviewData - {shareCode} JSon Pasing Issue"); Logger.Log(json); return(output); } return(output); } catch (Exception ex) { string mess = $"GetCompanyOverview - Share :{shareCode} {ex.Message}"; output.StatusList.Add(new Status("F", mess, 0)); Logger.LogError($"GetCompanyOverview - Share :{shareCode}", $"{ex.Message} - {ex.StackTrace}"); return(output); } }