0

I have been looking for some time to find a solution to this issue. I'm trying to add the Weather Unlocked local weather API (https://developer.weatherunlocked.com/documentation/localweather) to my site. However I am only able to return all current values.

I want to be able to take out specific items, such as temperature, humidity or latitude/longitude without everything else coming up too.

CODE

    const string WEBSERVICE_URL = "http://api.weatherunlocked.com/api/current/51.50,-0.12?app_id=42fd0793&app_key=cd2365f533caad77dc2d874aabc1625b";
    try
    {
        var webRequest = WebRequest.Create(WEBSERVICE_URL);

        if (webRequest != null)
        {
            webRequest.Method = "GET";
            webRequest.ContentType = "application/json";
            webRequest.Headers["X-API-Key"] = "cd2365f533caad77dc2d874aabc1625b";

            //Get the response 
            WebResponse wr = webRequest.GetResponseAsync().Result;
            Stream receiveStream = wr.GetResponseStream();
            StreamReader reader = new StreamReader(receiveStream);
            string content = reader.ReadToEnd();
            lblContent.Text = content;
        }
    }
    catch (Exception ex)
    {
        lblContent.Text = ex.ToString();
    }

Result

{
  "lat":51.5,
  "lon":0.05,
  "alt_m":5.0,
  "alt_ft":16.4,
  "wx_desc":"Clear skies",
  "wx_code":0,
  "wx_icon":"Clear.gif",
  "temp_c":7.0,
  "temp_f":44.6,
  "feelslike_c":2.6,
  "feelslike_f":36.68,
  "humid_pct":70.0,
  "windspd_mph":19.26,
  "windspd_kmh":31.0,
  "windspd_kts":16.74,
  "windspd_ms":8.61,
  "winddir_deg":250.0,
  "winddir_compass":"WSW",
  "cloudtotal_pct":25.0,
  "vis_km":10.0,
  "vis_mi":6.21,
  "vis_desc":null,
  "slp_mb":1002.0,
  "slp_in":29.67,
  "dewpoint_c":1.93,
  "dewpoint_f":35.47
}

Clearly this is messy and not everything is necessary.

Thanks in advance!

EDIT I tried deserializing and I'm getting the following error:

System.NullReferenceException: Object reference not set to an instance of an object

I get this when I write the foreach loop in my deserialization. My guess is that it's calling an object of type "Weather" (Similar to how object facebookFriend was of type Facebook in the given examples) and nothing is being stored in the weather object. Maybe i'm doing something wrong in the call from the API and I should be storing it in my Weather class?

  • You know about JSON deserialization? https://stackoverflow.com/questions/7895105/deserialize-json-with-c-sharp – Chetan Mar 13 '19 at 03:54
  • Possible duplicate of [Deserialize JSON with C#](https://stackoverflow.com/questions/7895105/deserialize-json-with-c-sharp) – hkf Mar 13 '19 at 04:13
  • Gave this a try, I'm getting the following error: System.NullReferenceException: Object reference not set to an instance of an object. my guess is that its not setting anything to the Weather class I created for deserialization – Connor Cook Mar 13 '19 at 04:26
  • You can deserialize the JSON to C# classes. You can generate your classes with this tool: http://json2csharp.com/. I'd then use RestSharp for executing my API requests. http://restsharp.org/ – jon.r Mar 13 '19 at 17:32
  • If those api id's etc are your own personal paid for id's remove them from the question as everybody publicly can now see them. – William Humphreys Mar 13 '19 at 17:50

1 Answers1

0

I'm typing this on my phone but something like this:

using System;
using System.Net;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        string json = new WebClient().DownloadString("** YOUR URL **");

        WeatherData weatherData = JsonConvert.DeserializeObject<WeatherData>(json);

        Console.WriteLine("Lat:             " + weatherData.Lat);
        Console.WriteLine("Lon:             " + weatherData.Lon);
        Console.WriteLine("Alt_M:           " + weatherData.Alt_M);
        Console.WriteLine("Alt_FT:          " + weatherData.Alt_FT);
        Console.WriteLine("WX_Desc:         " + weatherData.WX_Desc);
        Console.WriteLine("WX_Code:         " + weatherData.WX_Code);
        Console.WriteLine("WX_Icon:         " + weatherData.WX_Icon);
        Console.WriteLine("Temp_C:          " + weatherData.Temp_C);
        Console.WriteLine("Temp_F:          " + weatherData.Temp_F);
        Console.WriteLine("Feelslike_C:     " + weatherData.Feelslike_C);
        Console.WriteLine("Feelslike_F:     " + weatherData.Feelslike_F);
        Console.WriteLine("Humid_PCT:       " + weatherData.Humid_PCT);
        Console.WriteLine("Windspd_MPH:     " + weatherData.Windspd_MPH);
        Console.WriteLine("Windspd_KMH:     " + weatherData.Windspd_KMH);
        Console.WriteLine("Windspd_KTS:     " + weatherData.Windspd_KTS);
        Console.WriteLine("Windspd_MS:      " + weatherData.Windspd_MS);
        Console.WriteLine("Winddir_DEG:     " + weatherData.Winddir_DEG);
        Console.WriteLine("Winddir_Compass: " + weatherData.Winddir_Compass);
        Console.WriteLine("Cloudtotal_PCT:  " + weatherData.Cloudtotal_PCT);
        Console.WriteLine("Vis_KM:          " + weatherData.Vis_KM);
        Console.WriteLine("Vis_MI:          " + weatherData.Vis_MI);
        Console.WriteLine("Vis_Desc:        " + weatherData.Vis_Desc);
        Console.WriteLine("\n");
    }
}

public class WeatherData
{
    public string Lat { get; set; }
    public string Lon { get; set; }
    public string Alt_M { get; set; }
    public string Alt_FT { get; set; }
    public string WX_Desc { get; set; }
    public string WX_Code { get; set; }
    public string WX_Icon { get; set; }
    public string Temp_C { get; set; }
    public string Temp_F { get; set; }
    public string Feelslike_C { get; set; }
    public string Feelslike_F { get; set; }
    public string Humid_PCT { get; set; }
    public string Windspd_MPH { get; set; }
    public string Windspd_KMH { get; set; }
    public string Windspd_KTS { get; set; }
    public string Windspd_MS { get; set; }
    public string Winddir_DEG { get; set; }
    public string Winddir_Compass { get; set; }
    public string Cloudtotal_PCT { get; set; }
    public string Vis_KM { get; set; }
    public string Vis_MI { get; set; }
    public string Vis_Desc { get; set; }
    // OTHER PROPERTIES HERE ...
}
William Humphreys
  • 1,206
  • 1
  • 14
  • 38