/// <summary> /// Executes the scraping code and returns the response of the scrape. /// </summary> /// <typeparam name="T">The response type. This must be derived from the RealmEyeResponse class.</typeparam> /// <param name="task">The task to perform.</param> /// <param name="method">The name of the method.</param> /// <param name="name">The person's name.</param> /// <returns>The response.</returns> private async Task <RealmEyePlayerResponse> GetRealmSharperResponse <T>(Task <T> task, string method, string name) where T : notnull, RealmEyePlayerResponse { var sw = new Stopwatch(); try { sw.Start(); var data = await task; sw.Stop(); _logger.Log(LogLevel.Information, $"[{method}] Scraped Data for {data.Name} in {sw.Elapsed.Milliseconds} MS."); // We are doing this instead of just returning "data" because we don't want to send junk data back // to the end user. return(data.ProfileIsPrivate ? RealmEyePlayerResponse.GenerateGenericResponse(name, data) : data); } catch (Exception e) { sw.Stop(); _logger.Log(LogLevel.Error, e, $"[{method}] Error Occurred When Getting Profile Data. Name: {name}"); return(RealmEyePlayerResponse.GenerateGenericResponse(name)); } }
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))); }
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))); }