Esempio n. 1
0
        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));
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
                    }
                }
            }
        }
Esempio n. 6
0
        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);
                }
            }
        }
Esempio n. 7
0
        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.");
        }
Esempio n. 8
0
        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));
        }
Esempio n. 9
0
        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.");
        }