Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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()));
        }