public async Task <HashTagData[]> Get(Classes.Models.Location.Location location) { if (location == null) { return(new HashTagData[] { }); } var radius = new[] { 1, 3, 5, 10, 20, 30, 40, 50, 100 }; foreach (var i in radius) { try { var result = await GetByLocation(location, i).ConfigureAwait(false); if (result.Count > 0) { return(result.Tags.OrderByDescending(item => item.Weight).Select(item => item.Tag) .Select(HashTagData.FromText) .ToArray()); } await Task.Delay(500).ConfigureAwait(false); } catch (Exception e) { logger.LogError(e, "Failed to retrieve location tags"); } } return(new HashTagData[] { }); }
public async Task <HashTagData[]> Get(Classes.Models.Location.Location location) { if (location == null) { log.LogInformation("Location is not set."); return(new HashTagData[] { }); } log.LogInformation("Extracting popular tags..."); try { var topMedia = await instagram.Resilience.WebPolicy .ExecuteAsync( () => ResultExtension.UnWrap(() => instagram.LocationProcessor.GetTopLocationFeedsAsync(location.Pk, PaginationParameters.MaxPagesToLoad(1)), log)) .ConfigureAwait(false); return(await smartTags.Get(topMedia).ConfigureAwait(false)); } catch (Exception e) { log.LogError(e, "Failed"); } log.LogWarning("Top media query failed"); return(new HashTagData[] { }); }
private async Task <LocationResult> GetByLocation(Classes.Models.Location.Location location, int radius) { var boundaries = new CoordinateBoundaries(location.Lat, location.Lng, radius); var client = new HttpClient(); var query = await client.GetAsync($"https://query.displaypurposes.com/local/?bbox={boundaries.MinLongitude},{boundaries.MinLatitude},{boundaries.MaxLongitude},{boundaries.MaxLatitude}&zoom=10") .ConfigureAwait(false); var text = await query.Content.ReadAsStringAsync().ConfigureAwait(false); var results = SerializationHelper.DeserializeFromString <LocationResult>(text); return(results); }