/// <summary> /// 热点新闻 /// </summary> /// <returns></returns> public void GetNews() { Console.WriteLine("---GetNews---"); try { var web = new WebClient(); var json = web.DownloadString("https://api.jinse.com/v6/information/list?catelogue_key=news&limit=50&information_id=0&flag=down&version=9.9.9"); JToken data = json.GetJsonValue("list"); using var scope = _scopeFactory.CreateScope(); using var db_context = scope.ServiceProvider.GetRequiredService <CoinDbContext>(); var source = db_context.CoinArticel.ToList(); var list = new List <Domain.Coin.CoinArticel.CoinArticel>(); Parallel.ForEach(data.AsJEnumerable(), item => { var title = GetTitle(item["title"].ToString()); if (source.Any(x => x.Title.Equals(title))) { return; } if (list.Any(x => x.Title.Equals(title))) { return; } Console.WriteLine("---GetNews---" + title); var model = new Domain.Coin.CoinArticel.CoinArticel { Id = Guid.NewGuid().ToString(), Title = title, Category = 1 }; GetNewsContnt(item["extra"], model); list.Add(model); }); if (!list.Any()) { return; } db_context.CoinArticel.AddRange(list); db_context.SaveChanges(); Console.WriteLine("---GetNews SaveChanges---"); } catch (Exception ex) { _logger.LogError(new EventId(ex.HResult), ex, "---GetNews Exception---"); } }
/// <summary> /// 获取新闻具体内容 /// </summary> /// <param name="token"></param> /// <param name="model"></param> public void GetNewsContnt(JToken token, Domain.Coin.CoinArticel.CoinArticel model) { try { var htmlWeb = new HtmlWeb(); var document = htmlWeb.Load(token["topic_url"].ToString()); var node = document.DocumentNode.SelectSingleNode("//div[@class='js-article-detail']") ?? document.DocumentNode.SelectSingleNode("//div[@class='js-article']"); if (node != null) { foreach (var item in node.ChildNodes) { if (item.InnerText.Contains("文|") || item.InnerText.Contains("编辑|")) { item.InnerHtml = ""; } } model.Content = node.InnerHtml; } model.CreateTime = DateTimeConvert.ConvertDateTime(token["published_at"].ToString()); var logo = "http://pic.51yuansu.com/pic3/cover/02/61/11/59fc30d0b8598_610.jpg"; if (!string.IsNullOrWhiteSpace(token["thumbnail_pic"].ToString())) { logo = token["thumbnail_pic"].ToString(); } model.Logo = logo; model.Author = token["author"].ToString(); } catch (Exception ex) { _logger.LogError(new EventId(ex.HResult), ex, "---GetNewsContnt Exception---"); } }
/// <summary> /// 公告频道 /// </summary> public void GetNotice() { Console.WriteLine("---GetNotice---"); try { var web = new WebClient(); var json = web.DownloadString("https://api.jinse.com/v4/live/list?limit=50&reading=false&source=web&sort=5&flag=down&id=0"); JToken data = json.GetJsonValue("list"); var token = new List <JToken>(); // data.First.Last.AsJEnumerable().Values(); for (var i = 0; i < data.Count(); i++) { var temp = data[i].Last.AsJEnumerable().Values().ToList(); token.AddRange(temp); } using var scope = _scopeFactory.CreateScope(); using var db_context = scope.ServiceProvider.GetRequiredService <CoinDbContext>(); var source = db_context.CoinArticel.ToList(); var list = new List <Domain.Coin.CoinArticel.CoinArticel>(); Parallel.ForEach(token, item => { var title = GetTitleByContent(item["content"].ToString()); Console.WriteLine("---GetNotice---" + title); if (source.Any(x => x.Title.Equals(title))) { return; } if (list.Any(x => x.Title.Equals(title))) { return; } var model = new Domain.Coin.CoinArticel.CoinArticel { Id = Guid.NewGuid().ToString(), Content = GetDetail(item["content"].ToString()), CreateTime = DateTimeConvert.ConvertDateTime(item["created_at"].ToString()), Title = title, Category = 4, Logo = "" }; list.Add(model); }); if (!list.Any()) { return; } db_context.CoinArticel.AddRange(list); db_context.SaveChanges(); Console.WriteLine("---GetNotice SaveChanges---"); } catch (Exception ex) { _logger.LogError(new EventId(ex.HResult), ex, "---GetNotice Exception---"); } }