public async Task<Photo> InitiateGeoFetch() { if (this._geo == null) { this._geo = await App.flickr.GetGeoInfo(id); } return this; }
public async Task<GeoInfo> GetGeoInfo(string photoId) { //https://api.flickr.com/services/rest/?method=flickr.photos.geo.getLocation&api_key=dba3355dc8c8dd0fa6b7a45ce2a44db3&photo_id=22128905835&format=json&nojsoncallback=1&auth_token=72157659832560651-376ab699108fe73b&api_sig=9f500b727d3e2585b397d96f966fbef0 Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("method", "flickr.photos.geo.getLocation"); parameters.Add("photo_id", photoId); parameters.Add("api_key", _consumerkey); //parameters.Add("format", "json"); //parameters.Add("nojsoncallback", "1"); parameters.Add("auth_token", _authtoken); string sig = Utility.AuthCalculateSignature(_consumersecret, parameters); parameters.Add("api_sig", sig); string webrequest = _restserviceurl + "?" + Utility.BuildString(parameters); HttpClient proxy = new HttpClient(); HttpResponseMessage response = await proxy.GetAsync(webrequest); string webresponse = await response.Content.ReadAsStringAsync(); XDocument doc = XDocument.Parse(webresponse); var rsp = doc.Descendants(XName.Get("rsp")).FirstOrDefault(); GeoInfo data = new GeoInfo(); if ((string)rsp.Attribute("stat") == "ok") { var element = doc.Descendants(XName.Get("location")).FirstOrDefault(); data.latitude = Convert.ToDouble((string)element.Attribute("latitude")); data.longitude = Convert.ToDouble((string)element.Attribute("longitude")); data.accuracy = Convert.ToInt32((string)element.Attribute("accuracy")); data.locality = doc.Descendants(XName.Get("locality")).FirstOrDefault().Value; data.isValid = true; } return data; }