public async Task <IActionResult> GetGraveyardAsync()
        {
            var name = GetNameFromQuery(HttpContext.Request.Query);

            if (string.IsNullOrEmpty(name))
            {
                return(BadRequest(ProcessJsonSerialization(
                                      HttpContext.Request.Query,
                                      RealmEyePlayerResponse.GenerateGenericResponse(ResultCode.NotFound)
                                      )));
            }

            var amt = HttpContext.Request.Query.TryGetValue("amt", out var unparsedNum)
                                ? int.TryParse(unparsedNum, out var parsedNum)
                                        ? parsedNum
                                        : 70
                                : 70;

            var resp = await GetRealmSharperResponse(
                PlayerScraper.ScrapeGraveyardAsync(name, amt),
                "ScrapeGraveyardAsync+",
                name
                );

            return(resp is GraveyardData r
                                ? Ok(ProcessJsonSerialization(HttpContext.Request.Query, r))
                                : GetActionResult(resp, ProcessJsonSerialization(HttpContext.Request.Query, resp)));
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            var stuff = PlayerScraper.ScrapePlayer("https://realmeye.com/player/LilCold");

            Console.WriteLine("Name: " + stuff.Name);
            Console.WriteLine("Stars: " + stuff.Stars);
            Console.WriteLine("Skins: " + stuff.Skins);
            Console.WriteLine("Fame: " + stuff.Fame);
            Console.WriteLine("Exp: " + stuff.Exp);
            Console.WriteLine("Acc fame: " + stuff.AccountFame);
            Console.WriteLine("Guild: " + stuff.Guild);
            Console.WriteLine("Guild Rank: " + stuff.GuildRank);
            Console.WriteLine("Created: " + stuff.Created);
            Console.WriteLine("Last Seen: " + stuff.LastSeen);

            Console.ReadLine();
        }
Beispiel #3
0
 public JsonResult GetGraveyard(string name, int amount = -1)
 {
     try
     {
         var sw = new Stopwatch();
         sw.Start();
         var gy = new PlayerScraper(name)
                  .ScrapGraveyard(amount);
         sw.Stop();
         _logger.Log(LogLevel.Information, $"Scraped Graveyard for {name} in {sw.Elapsed.Milliseconds} MS. Amount: {amount}");
         return(gy.Status == ApiStatusCode.Success
                                 ? new JsonResult(gy)
                                 : new JsonResult(new ApiResponse(gy.Status).GetMessage()));
     }
     catch (Exception e)
     {
         _logger.Log(LogLevel.Error, e, $"Error Occurred @ GetGraveyard (Name: {name})");
         return(new JsonResult(new ApiResponse(ApiStatusCode.UnspecifiedError).GetMessage()));
     }
 }
Beispiel #4
0
 public JsonResult GetPetYard(string name)
 {
     try
     {
         var sw = new Stopwatch();
         sw.Start();
         var pets = new PlayerScraper(name)
                    .ScrapPetYard();
         sw.Stop();
         _logger.Log(LogLevel.Information, $"Scraped Pet Yard for {name} in {sw.Elapsed.Milliseconds} MS.");
         return(pets.Status == ApiStatusCode.Success
                                 ? new JsonResult(pets)
                                 : new JsonResult(new ApiResponse(pets.Status).GetMessage()));
     }
     catch (Exception e)
     {
         _logger.Log(LogLevel.Error, e, $"Error Occurred @ GetPetYard (Name: {name})");
         return(new JsonResult(new ApiResponse(ApiStatusCode.UnspecifiedError).GetMessage()));
     }
 }
        public async Task <IActionResult> GetBasicDataAsync()
        {
            var name = GetNameFromQuery(HttpContext.Request.Query);

            if (string.IsNullOrEmpty(name))
            {
                return(BadRequest(ProcessJsonSerialization(
                                      HttpContext.Request.Query,
                                      RealmEyePlayerResponse.GenerateGenericResponse(ResultCode.NotFound)
                                      )));
            }

            var resp = await GetRealmSharperResponse(
                PlayerScraper.ScrapePlayerProfileAsync(name), "GetBasicDataAsync+",
                name
                );

            return(resp is PlayerData r
                                ? Ok(ProcessJsonSerialization(HttpContext.Request.Query, r))
                                : GetActionResult(resp, ProcessJsonSerialization(HttpContext.Request.Query, resp)));
        }
Beispiel #6
0
        private void CategorizePlayers()
        {
            var scraper       = new PlayerScraper();
            var remotePlayers = scraper.Execute(_db);

            foreach (var remotePlayer in remotePlayers)
            {
                var savedPlayer = _players.FirstOrDefault(p => string.Compare(p.SwgohGgUrl,
                                                                              remotePlayer.SwgohGgUrl,
                                                                              StringComparison.OrdinalIgnoreCase) == 0);
                if (savedPlayer == null)
                {
                    _newPlayers.Add(remotePlayer);
                }
                else
                {
                    savedPlayer.GuildId     = remotePlayer.GuildId;
                    savedPlayer.InGameName  = remotePlayer.InGameName;
                    savedPlayer.SwgohGgName = remotePlayer.SwgohGgName;
                    savedPlayer.SwgohGgUrl  = remotePlayer.SwgohGgUrl;

                    _playersToUpdate.Add(savedPlayer);
                }
            }

            foreach (var savedPlayer in _players)
            {
                var updatedPlayer = _playersToUpdate.FirstOrDefault(p => string.Compare(p.SwgohGgUrl,
                                                                                        savedPlayer.SwgohGgUrl,
                                                                                        StringComparison.OrdinalIgnoreCase) == 0);
                if (updatedPlayer == null)
                {
                    _playersToRemove.Add(savedPlayer);
                }
            }
        }
        /// <summary>
        /// Sends multiple RealmEye requests.
        /// </summary>
        /// <param name="names">The names to get data for.</param>
        /// <returns>The job result.</returns>
        private async Task <ParseJob> SendConcurrentRealmEyeRequestsAsync(string[] names)
        {
            var jobId = _concurrJobId++;

            // To make it clearer that there's a new method being called.
            Console.WriteLine();
            _logger.LogInformation(
                $"[ConcurRealmEyeReq] [ID {jobId}] Started Job.\n"
                + $"\t- Name Count: {names.Length}"
                );

            var stopwatch = Stopwatch.StartNew();

            var defaults = names.Intersect(DefaultNames, StringComparer.OrdinalIgnoreCase).ToList();

            names = names.Except(defaults).ToArray();

            var job = new ParseJob
            {
                TotalElapsedSec    = 0,
                ParseWhoElapsedSec = 0,
                ConcurrElapsedSec  = 0,
                CompletedCount     = 0,
                FailedCount        = 0,
                Output             = new List <PlayerData>(),
                Completed          = new List <string>(),
                Failed             = new List <string>(),
                DefaultNames       = defaults,
                Input = names.ToList()
            };

#if USE_ACTION_BLOCK
            // Essentially sending these requests concurrently with a limit.
            var bag   = new ConcurrentBag <PlayerData>();
            var block = new ActionBlock <string>(
                async name => bag.Add(await PlayerScraper.ScrapePlayerProfileAsync(name)),
                new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = 40
            }
                );

            foreach (var name in names)
            {
                await block.SendAsync(name);
            }

            block.Complete();
            await block.Completion;

            var profiles = bag.ToList();
#else
            var profiles = await Task.WhenAll(names.Select(PlayerScraper.ScrapePlayerProfileAsync));
#endif

            foreach (var profile in profiles)
            {
                if (profile.ResultCode is not ResultCode.Success)
                {
                    job.Failed.Add(profile.Name);
                    continue;
                }

                job.Completed.Add(profile.Name);
                job.Output.Add(profile);
            }

            stopwatch.Stop();
            job.TotalElapsedSec   = stopwatch.Elapsed.TotalSeconds;
            job.ConcurrElapsedSec = stopwatch.Elapsed.TotalSeconds;
            job.CompletedCount    = job.Completed.Count;
            job.FailedCount       = job.Failed.Count;

            _logger.LogInformation(
                $"[ConcurRealmEyeReq] [ID {jobId}] Finished Job.\n"
                + $"\t- Time: {job.TotalElapsedSec} Seconds.\n"
                + $"\t- Completed: {job.CompletedCount}\n"
                + $"\t- Failed: {job.FailedCount} ({string.Join(", ", job.Failed)})"
                );
            return(job);
        }
Beispiel #8
0
 static void Main(string[] args)
 {
     var p = new PlayerScraper("consolemc").ScrapePlayerProfile();
 }
 public async Task <RealmEyeResponse> GetPetYardAsync(string name)
 => await GetRealmSharperResponse(PlayerScraper.ScrapePetYardAsync(name), "GetPetYardAsync", name);
 public async Task <RealmEyeResponse> GetBasicDataAsync(string name)
 => await GetRealmSharperResponse(PlayerScraper.ScrapePlayerProfileAsync(name), "GetBasicDataAsync", name);
 public async Task <RealmEyeResponse> GetExaltationsAsync(string name)
 => await GetRealmSharperResponse(PlayerScraper.ScrapeExaltationsAsync(name), "GetExaltationsAsync", name);
 public async Task <RealmEyeResponse> GetGuildHistoryAsync(string name)
 => await GetRealmSharperResponse(PlayerScraper.ScrapeGuildHistoryAsync(name), "GetGuildHistoryAsync", name);
 public async Task <RealmEyeResponse> GetGraveyardSummaryAsync(string name)
 => await GetRealmSharperResponse(PlayerScraper.ScrapeGraveyardSummaryAsync(name),
                                  "GetGraveyardSummaryAsync", name);
 public async Task <RealmEyeResponse> ScrapeGraveyardAsync(string name, int amt = 70)
 => await GetRealmSharperResponse(PlayerScraper.ScrapeGraveyardAsync(name, amt), "ScrapeGraveyardAsync", name);