Exemple #1
0
        public async Task StockNews(string symbol)
        {
            StockNews[] news = await Service.GetNewsAsync(symbol.ParseStockTicker()).ConfigureAwait(false);

            if (news == null)
            {
                await Context.Channel.SendErrorAsync("Unknown Symbol").ConfigureAwait(false);

                return;
            }

            await Context.SendPaginatedMessageAsync(0, p =>
            {
                StockNews article  = news[p];
                EmbedBuilder embed = new EmbedBuilder().WithDynamicColor(Context)
                                     .WithTitle(article.Headline)
                                     .WithAuthor(article.Source, url: article.Url)
                                     .WithDescription($"{article.Summary}\nSource: [{article.Source}]({article.Url})".TrimTo(2048))
                                     .WithImageUrl(article.Image)
                                     .WithFooter($"{article.DateTime.ToEasternStandardTime():yyyy/MM/dd h:mm tt} EST");
                if (article.HasPayWall)
                {
                    embed.WithDescription("NOTE: article has paywall\n\n" + article.Summary);
                }
                return(embed);
            }, news.Length, 1, false).ConfigureAwait(false);
Exemple #2
0
        public void InsertStockNewsTest()
        {
            var stockNewsData = GetStockNewsList();
            var stockNewsSet  = new Mock <DbSet <StockNews> >().SetupData(stockNewsData);

            var context = new Mock <Context>();

            context.Setup(ctx => ctx.Set <StockNews>()).Returns(stockNewsSet.Object);

            var unitOfWork = new UnitOfWork(context.Object);
            var stockNews  = new StockNews()
            {
                ReferencedStocks = new List <Stock>(),
                PublicationDate  = DateTimeOffset.Now,
                Title            = "News8",
                Content          = "This is the news number 8",
                IsDeleted        = false,
            };

            unitOfWork.StockNewsRepository.Insert(stockNews);

            var result = unitOfWork.StockNewsRepository.GetAll();

            Assert.Equal(stockNews, unitOfWork.StockNewsRepository.GetById(stockNews.Id));
        }
        public void RegisterStockNewsReturnsCreatedAtRouteTest()
        {
            var mockStockNewsLogic = new Mock <IStockNewsLogic>();

            mockStockNewsLogic.Setup(x => x.RegisterStockNews(It.IsAny <StockNews>()))
            .Returns(true);
            var controller = new StockNewsController(mockStockNewsLogic.Object);

            var stockNews = new StockNews()
            {
                ReferencedStocks = new List <Stock>(),
                PublicationDate  = DateTimeOffset.Now,
                Title            = "News5",
                Content          = "This is the news number 5",
                IsDeleted        = false,
                Id = 1
            };
            IHttpActionResult actionResult = controller.PostStockNews(stockNews);

            var contentResult = Assert.IsType <CreatedAtRouteNegotiatedContentResult <StockNews> >(actionResult);

            Assert.NotNull(contentResult);

            Assert.Equal(contentResult.Content, stockNews);
        }
 public IHttpActionResult DeleteStockNews(StockNews stockNews)
 {
     if (stockNewsLogic.DeleteStockNews(stockNews))
     {
         return(StatusCode(HttpStatusCode.NoContent));
     }
     return(NotFound());
 }
Exemple #5
0
 public bool RegisterStockNews(StockNews news)
 {
     UnitOfWork.StockNewsRepository.Insert(news);
     foreach (var stock in news.ReferencedStocks)
     {
         var dbStock = UnitOfWork.StockRepository.Get(x => x.Id == stock.Id, null, "StockNews").SingleOrDefault();
         dbStock.StockNews.Add(news);
         UnitOfWork.StockRepository.Update(dbStock);
     }
     UnitOfWork.Save();
     return(true);
 }
        public IHttpActionResult Get(long stockId)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            StockNews stockNews = stockNewsLogic.GetStockNews(stockId);

            if (stockNews == null)
            {
                return(NotFound());
            }
            return(Ok(stockNews));
        }
        public void DeleteStockNewsReturnsNoContentTest()
        {
            var mockStockNewsLogic = new Mock <IStockNewsLogic>();

            mockStockNewsLogic.Setup(x => x.DeleteStockNews(It.IsAny <StockNews>())).Returns(true);
            var controller = new StockNewsController(mockStockNewsLogic.Object);

            var stockNews = new StockNews();
            IHttpActionResult actionResult = controller.DeleteStockNews(stockNews);

            StatusCodeResult contentResult = Assert.IsType <StatusCodeResult>(actionResult);

            Assert.NotNull(contentResult);
            Assert.Equal(contentResult.StatusCode, HttpStatusCode.NoContent);
        }
 public IHttpActionResult PostStockNews(StockNews stockNews)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     try
     {
         if (stockNewsLogic.RegisterStockNews(stockNews))
         {
             return(Ok(stockNews));
         }
         return(BadRequest());
     }
     catch (UserException ue)
     {
         return(BadRequest(ue.Message));
     }
 }
        public static void refreshStockNews()
        {
            foreach (InfoType it in Enum.GetValues(typeof(InfoType)))
            {
                List <EastMoneyModel> news = EastMoney.GetInfo(it);
                for (int i = 0; i < news.Count(); i++)
                {
                    StockNews stockNews = new StockNews();
                    stockNews.code      = news[i].code;
                    stockNews.stockname = news[i].stockName;
                    stockNews.title     = news[i].title;
                    stockNews.sort      = 1;
                    stockNews.Date      = news[i].Date;
                    stockNews.url       = news[i].url;
                    if (news[i].type == InfoType.finace.ToString())
                    {
                        stockNews.type = "融资公告";
                    }
                    else if (news[i].type == InfoType.danger.ToString())
                    {
                        stockNews.type = "风险提示";
                    }
                    else if (news[i].type == InfoType.infochange.ToString())
                    {
                        stockNews.type = "信息变更";
                    }
                    else if (news[i].type == InfoType.havestockchange.ToString())
                    {
                        stockNews.type = "持股变动";
                    }
                    else if (news[i].type == InfoType.recombo.ToString())
                    {
                        stockNews.type = "资产重组";
                    }
                    UpodateOrderByKey(ref stockNews);
                    db.StockNews.Add(stockNews);
                }

                Thread.Sleep(100);
            }
            db.SaveChanges();
        }
        public static void UpodateOrderByKey(ref StockNews stockNews)
        {
            if (stockNews.type == "持股变动")
            {
                if (!stockNews.title.Contains("增持") && !stockNews.title.Contains("减持") && !stockNews.title.Contains("进展") && !stockNews.title.Contains("完毕") && !stockNews.title.Contains("结果") && !stockNews.title.Contains("完成") && !stockNews.title.Contains("终止"))
                {
                    stockNews.sort = 3;
                }
                if (stockNews.title.Contains("增持") || stockNews.title.Contains("减持"))
                {
                    var result = "";
                    try
                    {
                        result = httpRequestHelper.GetHtml(stockNews.url);
                    }
                    catch (Exception)
                    {
                        UpodateOrderByKey(ref stockNews);
                        return;
                    }

                    string pattern = @"证券代码[\s|\S]+特此公告";
                    var    content = "";
                    foreach (Match match in Regex.Matches(result, pattern))
                    {
                        content = match.Value;
                    }
                    stockNews.sort = 100;
                    string[] patterns = new string[] { @"减持不超过[\n|\d|\s|,]+股", @"减持公司股份不超过[\n|\d|\s|,]+股", @"减持股份[\n|\d|\s|,]+股", @"减持公司股票数量不超过[\n|\d|\s|,]+股", @"减持股份不超过[\n|\d|\s|,]+股", @"减持本公司股份不超过[\n|\d|\s|,]+股", @"减持股份数量不超过[\n|\d|\s|,]+股", @"减持本公司股份[\n|\d|\s|,]+股",
                                                       @"增持[\n|\d|\s|,]+股", @"增持公司股份[\n|\d|\s|,]+股", @"增持股份[\n|\d|\s|,]+股", @"增持公司股票数量[\n|\d|\s|,]+股", @"增持股份[\n|\d|\s|,]+股", @"增持本公司股份[\n|\d|\s|,]+股", @"增持股份数量[\n|\d|\s|,]+股" };
                    string[] patterns2 = new string[] { "减持不超过", "减持公司股份不超过", "减持股份", "减持公司股票数量不超过", "减持股份不超过", "减持本公司股份不超过", "减持股份数量不超过", "减持本公司股份",
                                                        "增持", "增持公司股份", "增持股份", "增持公司股票数量", "增持股份", "增持本公司股份", "增持股份数量" };

                    int cnd = 0;
                    foreach (string pattern2 in patterns)
                    {
                        string content2 = "";
                        foreach (Match match in Regex.Matches(content, pattern2))
                        {
                            content2 = match.Value;
                        }
                        content2 = content2.Replace(patterns2[cnd++], "").Replace("股", "").Replace("\n", "").Replace(" ", "").Replace(",", "");
                        int int_content = 100;
                        try
                        {
                            int_content = int.Parse(content2);
                        }
                        catch (Exception)
                        {
                        }
                        stockNews.sort = int_content > stockNews.sort ? int_content : stockNews.sort;
                    }
                }
                if (stockNews.title.Contains("进展"))
                {
                    stockNews.sort = 2;
                }
                if (stockNews.title.Contains("完毕") || stockNews.title.Contains("结果") || stockNews.title.Contains("完成") || stockNews.title.Contains("终止"))
                {
                    stockNews.sort = 1;
                }
            }
            else if (stockNews.type == "资产重组")
            {
                if (stockNews.title.Contains("进展") || stockNews.title.Contains("结果") || stockNews.title.Contains("完成") || stockNews.title.Contains("完毕") || stockNews.title.Contains("延长"))
                {
                    stockNews.sort = 1;
                }
                else if (stockNews.title.Contains("转让") || stockNews.title.Contains("出售") || stockNews.title.Contains("回购") || stockNews.title.Contains("收购") || stockNews.title.Contains("购买"))
                {
                    stockNews.sort = 3;
                }
                else
                {
                    stockNews.sort = 2;
                }
            }
            else if (stockNews.type == "风险提示")
            {
                if (stockNews.title.Contains("进展") || stockNews.title.Contains("终止") || stockNews.title.Contains("完成") || stockNews.title.Contains("歉"))
                {
                    stockNews.sort = 1;
                }
                else if (stockNews.title.Contains("交易异常波动"))
                {
                    var result = "";
                    try
                    {
                        result = httpRequestHelper.GetHtml(stockNews.url);
                    }
                    catch (Exception)
                    {
                        UpodateOrderByKey(ref stockNews);
                        return;
                    }

                    string pattern = @"证券代码[\s|\S]+特此公告";
                    var    content = "";
                    foreach (Match match in Regex.Matches(result, pattern))
                    {
                        content = match.Value;
                    }
                    stockNews.sort = 100;
                    if (content.Contains("涨幅"))
                    {
                        stockNews.sort = 101;
                    }
                    else if (content.Contains("跌幅"))
                    {
                        stockNews.sort = 102;
                    }
                }
                else
                {
                    stockNews.sort = 2;
                }
            }
        }
Exemple #11
0
 public bool DeleteStockNews(StockNews news)
 {
     UnitOfWork.StockNewsRepository.Delete(news);
     UnitOfWork.Save();
     return(true);
 }