/// <summary> /// Helper method to deserialize a single json Tiingo news /// </summary> /// <param name="token">The json token containing the Tiingo news to deserialize</param> /// <returns>The deserialized <see cref="TiingoNewsData"/> instance</returns> public static TiingoNewsData DeserializeNews(JToken token) { // just in case we add some default values for these var title = token["title"]?.ToString() ?? ""; var source = token["source"]?.ToString() ?? ""; var url = token["url"]?.ToString() ?? ""; var tags = token["tags"]?.ToObject <List <string> >() ?? new List <string>(); var description = token["description"]?.ToString() ?? ""; var publishedDate = GetDateTime(token["publishedDate"]); var crawlDate = GetDateTime(token["crawlDate"]); var articleID = token["id"].ToString(); var tickers = token["tickers"]; var symbols = new List <Symbol>(); foreach (var tiingoTicker in tickers) { var ticker = TiingoSymbolMapper.GetLeanTicker(tiingoTicker.ToString()); var sid = SecurityIdentifier.GenerateEquity( ticker, // for now we suppose USA market QuantConnect.Market.USA, // we use the news date to resolve the map file to use mappingResolveDate: publishedDate); symbols.Add(new Symbol(sid, ticker)); } var dataPoint = new TiingoNewsData { ArticleID = articleID, CrawlDate = crawlDate, Description = description, PublishedDate = publishedDate, Time = publishedDate, Source = source, Tags = tags, Symbols = symbols, Url = url, Title = title }; return(dataPoint); }
private void SetSymbolAndTime(TiingoNewsData dataPoint) { if (_symbol != null) { dataPoint.Symbol = _symbol; if (_liveMode) { // for live use crawl date dataPoint.Time = dataPoint.CrawlDate; } else { // for backtesting use published time // old data (eg 2014) can have newer crawl date (eg 2019) dataPoint.Time = dataPoint.PublishedDate; } } }