private DTO.InstagramResult DoMediaSearch()
        {
            // get the list of media items
            // parse out the reponse and the fields we want
            // convert to DTOs and return

            string mediaFields    = "media%7Bmedia_url%2Cmedia_type%2Ccomments_count%2Clike_count%2Ctimestamp%2Cpermalink%2Ccaption%7D";
            string mediaSearchUrl = this.baseUrl + mediaFields + "&access_token=" + _token;

            List <InstagramResult> list = new List <InstagramResult>();

            //invoke the request
            string jsonResult = this.Get(mediaSearchUrl);

            // convert to json annotated object
            InstagramResult instagramResult = new InstagramResult();

            instagramResult = JsonConvert.DeserializeObject <InstagramResult>(jsonResult);

            if (instagramResult != null && instagramResult.media != null)
            {
                return(instagramResult);
            }

            return(null);
        }
        public async Task <List <Entity.Media> > GetMediaAsync()
        {
            // invoke the private method - DoMediaSearch()
            InstagramResult     instagramResults = this.DoMediaSearch();
            List <Entity.Media> mediaModels      = new List <Entity.Media>();

            //map from the JSON/DTO returned by DoMediaSearch() to the Domain Entities
            foreach (MediaData mediaData in instagramResults.media.data)
            {
                Entity.Media media = new Entity.Media
                {
                    id               = mediaData.id,
                    like_count       = mediaData.like_count,
                    caption          = mediaData.caption,
                    comments_count   = mediaData.comments_count,
                    impression_count = GetMediaImpressionValue(GetMediaImpressionsInsight(mediaData)),
                    media_url        = mediaData.media_url,
                    permalink        = mediaData.permalink,
                    timestamp        = mediaData.timestamp,
                    DateCreated      = mediaData.DateCreated
                };

                // run text analytics over the captionfield
                media.CaptionInsights = GetTextAnalyticsInsight(media.id, media.caption);

                // get comments and associated AI insights
                media.Comments = GetMediaCommentsEntities(mediaData);
                foreach (Comment comment in media.Comments)
                {
                    // run text analytics over text comments
                    comment.TextAnalyticsInsight = GetTextAnalyticsInsight(comment.id, comment.text);
                }

                // get image insights
                media.VisionInsights = await GetComputerVisionInsightAsync(media.media_url);

                // finally, add the fully hydrated object to our list and return it
                mediaModels.Add(media);
            }

            return(mediaModels);
        }