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))); }
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(); }
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())); } }
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))); }
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); }
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);