/// <summary> /// Gets subtitles meta. /// </summary> /// <param name="date">The date.</param> /// <returns> /// The query result. /// </returns> public QueryResult <ReportCalendar> GetCalendar(DateTime date) { var calendar = new ReportCalendar(this); var req = (HttpWebRequest)WebRequest.Create($"https://api.nasdaq.com/api/calendar/earnings?date={date.ToString("yyyy-MM-dd", new CultureInfo("en-US"))}"); req.Credentials = CredentialCache.DefaultCredentials; req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50"; req.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); var response = req.GetResponse(); Root resp = null; using (var dataStream = response.GetResponseStream()) { var reader = new StreamReader(dataStream); var responseFromServer = reader.ReadToEnd(); resp = JsonConvert.DeserializeObject <Root>(responseFromServer); } response.Close(); foreach (var h in resp.data.rows) { // var reportEntry = new Report(name, code) // { // Date = reportDate, // Esp = esp, // NumberOfEsp = numOfEsp, // LastEsp = lastEsp, // MarketCap = marketCap // }; // calendar.Add(reportEntry); } return(new QueryResult <ReportCalendar>(ReportWatcher.Data.Status.Success, calendar)); }
/// <param name="date"></param> /// <inheritdoc /> public override QueryResult <ReportCalendar> GetCalendar(DateTime date) { var subtitles = new ReportCalendar(this); var statuses = new List <Status>(Handlers.Count); var status = Status.Success; var tasks = new List <Task>(Handlers.Count); var sb = new StringBuilder(); if (Handlers.Count > 0) { foreach (var subtitleDb in Handlers) { var db = subtitleDb; var dbTask = Task.Run( () => { Status dbStatus; try { var meta = db.GetCalendar(date); dbStatus = meta.Status; if (dbStatus == Status.Success && meta.Data != null && meta.Data.Count > 0) { subtitles.AddRange(meta.Data); } } catch (Exception ex) { var error = $"Failed to get report earning calendar from {db}: {ex}"; Trace.TraceError(error); dbStatus = Status.Fatal; sb.AppendLine(error); } statuses.Add(dbStatus); }); tasks.Add(dbTask); } Task.WaitAll(tasks.ToArray()); if (statuses.Distinct().Count() == statuses.Count) { status = statuses.First(); } else if (statuses.Any(s => s == Status.Success)) { status = Status.Success; } else if (statuses.Any(s => s == Status.Fatal)) { status = Status.Fatal; } else if (statuses.Any(s => s == Status.Failure)) { status = Status.Failure; } } return(new QueryResult <ReportCalendar>(status, subtitles, sb.ToString())); }