public async Task Update() { Log.Write("Updating lodestone news", "Bot"); if (!ulong.TryParse(Settings.Load().LodestoneChannel, out ulong channelId)) { return; } List <NewsItem> news = await NewsAPI.Feed(); news.Reverse(); foreach (NewsItem item in news) { if (item.Id == null) { continue; } PostedNews entry = await this.newsDb.LoadOrCreate(item.Id); if (!entry.IsPosted) { Log.Write("Posting Lodestone news: " + item.Title, "Bot"); await item.Post(channelId); entry.IsPosted = true; await this.newsDb.Save(entry); // don't flood channel! await Task.Delay(500); } } }
/* * [HttpPost] * public async Task<ActionResult> PushNotification() * { * var options = new PusherOptions * { * Cluster = "us3", * Encrypted = true * }; * * var pusher = new Pusher( * "988305", * "fa4d7066737eec81ca0a", * "f87324a6080b01730d2a", * options); * * var result = await pusher.TriggerAsync( * "my-channel", * "my-event", * new { message = "hello world" }); * * return new HttpStatusCodeResult((int)HttpStatusCode.OK); * } */ public ActionResult NewsFeed() { string requestURL = string.Format("http://newsapi.org/v2/top-headlines?country=us&apiKey=d50d92800dcd4495957ff70fc0da42b2"); string json = new WebClient().DownloadString(requestURL); var jsonObj = JObject.Parse(json); JArray jsonarray = (JArray)jsonObj.SelectToken("articles"); List <NewsAPI> newsLists = new List <NewsAPI>(); for (int i = 0; i < jsonarray.Count; i++) { JObject NewsObj = JObject.Parse(jsonarray[i].ToString()); NewsAPI NewsItem = new NewsAPI { SourceID = (string)NewsObj.SelectToken("source.id"), SourceName = (string)NewsObj.SelectToken("source.name"), Author = (string)NewsObj.SelectToken("author"), Title = (string)NewsObj.SelectToken("title"), Description = (string)NewsObj.SelectToken("description"), URL = (string)NewsObj.SelectToken("url"), URLImage = (string)NewsObj.SelectToken("urlToImage"), PublishTime = (DateTime)NewsObj.SelectToken("publishedAt"), }; newsLists.Add(NewsItem); } return(View(newsLists)); }
public ActionResult News() { List <NewsAPI> newsList = new List <NewsAPI>(); int totalResults = new NewsAPI(0).returnTotalResults(); for (int i = 0; i < 5; i++) { newsList.Add(new NewsAPI(i)); } ViewData["apiList"] = getActiveAPIs(); ViewData["newsList"] = newsList; return(View()); }
public async Task <List <Article> > GetNews() { string BASE_URL = "https://newsapi.org/v2/"; //Query the v2/top-headlines endpoint for live top news headlines. //Query the v2/everything endpoint for recent articles all over the web. string endpoint = "top-headlines"; // sources "sources=" + string.Join(",", request.Sources)); // "category=" + request.Category.Value.ToString().ToLowerInvariant()); //"language=" + request.Language.Value.ToString().ToLowerInvariant()); //"country=" + request.Country.Value.ToString().ToLowerInvariant()); //"page=" + request.Page); //"pageSize=" + request.PageSize); string querystring = "country=fr"; List <Article> newsList = new List <Article>(); // HttpClient httpClient = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }); HttpClient httpClient = new HttpClient(); //httpClient.DefaultRequestHeaders.Add("user-agent", "News-API-csharp/0.1"); // httpClient.DefaultRequestHeaders.Add("x-api-key", "fc028a132ff54587b240e2847bfef21a"); HttpResponseMessage httpResponse = new HttpResponseMessage(); Log(BASE_URL + endpoint + "?" + querystring); var httpRequest = new HttpRequestMessage(HttpMethod.Get, BASE_URL + endpoint + "?" + querystring + "&apiKey=fc028a132ff54587b240e2847bfef21a"); // var uri = new Uri("https://newsapi.org/v2/top-headlines?country=fr&apiKey=fc028a132ff54587b240e2847bfef21a"); Log("1"); try { httpResponse = await httpClient.SendAsync(httpRequest); httpResponse.EnsureSuccessStatusCode(); string httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); Log(httpResponseBody); //On désérialise les données en JSON NewsAPI newsAPI = Newtonsoft.Json.JsonConvert.DeserializeObject <NewsAPI>(httpResponseBody); Log("OK"); newsList = newsAPI.articles; Log("OK2"); } catch (Exception ex) { newsList = null; Log("Erreur : GetNews " + ex.ToString()); throw; } return(newsList); }
public async Task Update() { Log.Write("Updating lodestone news for all guilds", "Bot"); List <NewsItem> news = await NewsAPI.Feed(); news.Reverse(); foreach (SocketGuild guild in Program.DiscordClient.Guilds) { GuildSettings settings = await SettingsService.GetSettings <GuildSettings>(guild.Id); if (!ulong.TryParse(settings.LodestoneChannel, out ulong channelId)) { return; } foreach (NewsItem item in news) { if (item.Id == null) { continue; } PostedNews entry = await this.newsDb.LoadOrCreate(item.Id); if (!entry.IsPosted) { if (item.Description == null && item.Url != null) { item.Description = await NewsAPI.Detail(item.Url); } Log.Write("Posting Lodestone news: " + item.Title, "Bot"); await item.Post(channelId); entry.IsPosted = true; await this.newsDb.Save(entry); // don't flood channel! await Task.Delay(500); } } } }
public async Task News(CommandMessage message) { Log.Write("Updating lodestone news for guild: " + message.Guild.Name, "Bot"); List <NewsItem> news = await NewsAPI.Feed(); news.Reverse(); GuildSettings settings = await SettingsService.GetSettings <GuildSettings>(message.Guild.Id); if (!ulong.TryParse(settings.LodestoneChannel, out ulong channelId)) { return; } foreach (NewsItem item in news) { if (item.Id == null) { continue; } PostedNews entry = await this.newsDb.LoadOrCreate(item.Id); if (!entry.IsPosted) { Log.Write("Posting Lodestone news: " + item.Title, "Bot"); await item.Post(channelId); entry.IsPosted = true; await this.newsDb.Save(entry); // don't flood channel! await Task.Delay(500); } } }
public async Task <Embed> GetMaintenance() { List <NewsItem> items = await NewsAPI.Latest(Categories.Maintenance); Instant now = TimeUtils.Now; NewsItem?nextMaint = null; Instant? bestStart = null; foreach (NewsItem item in items) { Instant?start = item.GetStart(); Instant?end = item.GetEnd(); if (start == null || end == null) { continue; } if (!item.Title.Contains("All Worlds")) { continue; } if (start < bestStart) { continue; } if (start < now.Minus(Duration.FromDays(14))) { continue; } bestStart = start; nextMaint = item; } if (nextMaint != null) { EmbedBuilder builder = new EmbedBuilder(); builder.ThumbnailUrl = "https://img.finalfantasyxiv.com/lds/h/F/DlQYVw2bqzA5ZOCfXKZ-Qe1IZU.svg"; builder.Title = nextMaint.Title; Instant?start = nextMaint.GetStart(); Instant?end = nextMaint.GetEnd(); if (start == null || end == null) { throw new Exception(); } Duration timeUntilStart = (Duration)(start - now); Duration timeUntilEnd = (Duration)(end - now); if (timeUntilStart.TotalMinutes > 0) { builder.Description = "Starts In: " + TimeUtils.GetDurationString(start - now); } else if (timeUntilEnd.TotalMinutes > 0) { builder.Description = "Ends In: " + TimeUtils.GetDurationString(end - now); } else { builder.Description = "Completed: " + TimeUtils.GetDurationString(now - end) + " ago."; } builder.AddField("Starts", TimeUtils.GetDateTimeString(start)); builder.AddField("Ends", TimeUtils.GetDateTimeString(end)); builder.AddField("Duration", TimeUtils.GetDurationString(end - start)); return(builder.Build()); } throw new UserException("I couldn't find any maintenance."); }
public async Task <ActionResult> Tracker() { var watch = new System.Diagnostics.Stopwatch(); watch.Start(); SummaryViewModel summary = new SummaryViewModel(); NewsAPI newsAPI = new NewsAPI(); TrackerViewModel tracker = new TrackerViewModel(); #region HttpClient Config // Covid Stats using (var client = new HttpClient()) { client.BaseAddress = new Uri(baseUrl); HttpResponseMessage responseMessage = await client.GetAsync("summary"); if (responseMessage.IsSuccessStatusCode) { //Storing the response details recieved from web api var covidResponse = responseMessage.Content .ReadAsStringAsync().Result; summary = JsonConvert.DeserializeObject <SummaryViewModel>(covidResponse); } } // South Africa News using (var client = new HttpClient()) { client.BaseAddress = new Uri(baseUrlNews); HttpResponseMessage responseMessage = await client.GetAsync("v2/top-headlines?country=za&category=health&apiKey=8066df69f5c2435c9a6b0510ea7b16d5"); if (responseMessage.IsSuccessStatusCode) { //Storing the response details recieved from web api var newsResponse = responseMessage.Content .ReadAsStringAsync().Result; newsAPI = JsonConvert.DeserializeObject <NewsAPI>(newsResponse); } } #endregion NewsViewModel news = new NewsViewModel { Articles = newsAPI.Articles.ToList() }; tracker.FillTrackerModel(summary, news); var latLongTableExists = await summary.CheckDBForLatLongExists(db, geocoder); if (latLongTableExists) { ViewBag.DataPoints = db.LatLongDtos.ToList(); } watch.Stop(); _ = watch.ElapsedMilliseconds; _ = watch.Elapsed; return(View(tracker)); }
public async Task GetMaintenance(CommandMessage message) { List <NewsItem> items = await NewsAPI.Latest(Categories.Maintenance); Instant now = TimeUtils.Now; NewsItem?nextMaint = null; Instant? bestStart = null; foreach (NewsItem item in items) { Instant?start = item.GetStart(); Instant?end = item.GetEnd(); if (start == null || end == null) { continue; } if (!item.Title.Contains("All Worlds")) { continue; } if (start < bestStart) { continue; } if (start < now.Minus(Duration.FromDays(14))) { continue; } bestStart = start; nextMaint = item; } if (nextMaint != null) { EmbedBuilder builder = new EmbedBuilder { ThumbnailUrl = "http://na.lodestonenews.com/images/maintenance.png", ////ThumbnailUrl = "https://img.finalfantasyxiv.com/lds/h/F/DlQYVw2bqzA5ZOCfXKZ-Qe1IZU.svg", Title = nextMaint.Title, Url = nextMaint.Url, }; Instant?start = nextMaint.GetStart(); Instant?end = nextMaint.GetEnd(); if (start == null || end == null) { throw new Exception(); } Duration timeUntilStart = (Duration)(start - now); Duration timeUntilEnd = (Duration)(end - now); if (timeUntilStart.TotalMinutes > 0) { builder.Description = "Starts In: " + TimeUtils.GetDurationString(start - now); } else if (timeUntilEnd.TotalMinutes > 0) { builder.Description = "Ends In: " + TimeUtils.GetDurationString(end - now); } else { builder.Description = "Completed: " + TimeUtils.GetDurationString(now - end) + " ago."; } ////builder.AddField("Starts", TimeUtils.GetDateTimeString(start)); ////builder.AddField("Ends", TimeUtils.GetDateTimeString(end)); builder.AddField("Starts", await TimeUtils.GetTimeList(message.Guild.Id, start)); builder.AddField("Ends", await TimeUtils.GetTimeList(message.Guild.Id, end)); builder.AddField("Duration", TimeUtils.GetDurationString(end - start) ?? "Unknown"); await message.Channel.SendMessageAsync(embed : builder.Build(), messageReference : message.MessageReference); return; } throw new UserException("I couldn't find any maintenance."); }