/// <summary>
        /// create new instance of Instagram Caller to call Instagram API
        /// </summary>
        /// <param name="clientid">App's Client ID</param>
        /// <param name="clientsecret">App's Client Secret</param>
        /// <param name="userid">Current User ID who has the token</param>
        /// <param name="accesstoken">Access Token of current user</param>
        public InstagramCaller(string clientid, string clientsecret, long userid, string accesstoken, string telemetryclient = "")
        {
            //assign properties
            _ClientID     = clientid;
            _ClientSecret = clientsecret;
            _UserID       = userid;
            _AccessToken  = accesstoken;

            //create telemetry client
            if (telemetryclient != "")
            {
                _Telemetryclient = new TelemetryClient(new TelemetryConfiguration(telemetryclient));
            }

            //prepare Http Client
            _HttpClient             = new HttpClient();
            _HttpClient.BaseAddress = new Uri("https://api.instagram.com/v1/");
            _HttpClient.DefaultRequestHeaders.Clear();
            _HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            //initiate response message
            _ResponseMessage = new HttpResponseMessage();

            //initiate the End Points
            UsersEndPoint     = new UsersEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
            RelationsEndPoint = new RelationsEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
            MediaEndPoint     = new MediaEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
            CommentsEndPoint  = new CommentsEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
            LikesEndPoint     = new LikesEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
            TagsEndPoint      = new TagsEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
            LocationsEndPoint = new LocationsEndPoint(_ClientID, _ClientSecret, _AccessToken, _UserID, _HttpClient, _ResponseMessage, _Telemetryclient);
        }
 /// <summary>
 /// Returns a list of recent medias near to the specified location.
 /// </summary>
 /// <param name="distance">Distance in meters, max = 5000</param>
 public List <IMedia> SearchMediaNearLocation(double latitude, double longitude, double distance = 0)
 {
     try
     {
         return(mediaJsonController.MapJsonToMedias(MediaEndPoint
                                                    .SearchMediaAPICall(latitude,
                                                                        longitude,
                                                                        distance)));
     }
     catch (Exceptions.InstagramAPICallException e)
     {
         throw e;
     }
     catch (Exception)
     {
         return(null);
     }
 }