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[] { });
        }
Beispiel #2
0
        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);
        }