I am writing this article to give you a basic idea of consuming a Web API from Yahoo Weather and display it in the Console.

Let us create a project with Console App template.

Web API

Add a class and name it as WeatherReport.

Web API

Add the following properties in WeatherReport class.
  1. public class WeatherReport {
  2. public string date {
  3. get;
  4. set;
  5. }
  6. public long temp {
  7. get;
  8. set;
  9. }
  10. public string text {
  11. get;
  12. set;
  13. }
  14. }

Get woeid (Where on earth ID) of your city using this link (Just remove Hyderabad and keep your city name). For Hyderabad, the woeid is 2295414 which I read from the response of the below API call.

https://www.metaweather.com/api/location/search/?query=hyderabad.

The response of the above link will look like this -

  1. [{
  2. "title": "Hyderabad",
  3. "location_type": "City",
  4. "woeid": 2295414,
  5. "latt_long": "17.508829,78.434578"
  6. }]

Now, let us use a wonderful Free API for weather updates and put it in our code. I used Yahoo API (since it is Free for developers) and passed the woeid 2295414 in the query.

  1. static void Main(string[] args)
  2. {
  3. HttpClient client = new HttpClient();
  4. client.BaseAddress = new Uri("https://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20woeid%20in%20(2295414%20)&format=json");
  5. client.DefaultRequestHeaders.Accept.Clear();
  6. client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
  7. GetWeather(client).Wait();
  8. }
  9. static async Task GetWeather(HttpClient cons)
  10. {
  11. using (cons)
  12. {
  13. HttpResponseMessage res = await cons.GetAsync("");
  14. res.EnsureSuccessStatusCode();
  15. if (res.IsSuccessStatusCode)
  16. {
  17. string weather = await res.Content.ReadAsStringAsync();
  18. JObject jobj= JObject.Parse(weather);
  19. JToken jToken = jobj.First;
  20. string WeatherState = jToken.First["results"]["channel"]["item"]["condition"].ToString();
  21. WeatherReport report = Newtonsoft.Json.JsonConvert.DeserializeObject<WeatherReport>(WeatherState);
  22. Console.WriteLine("\n");
  23. Console.WriteLine("Weather Station: Hyderabad" );
  24. Console.WriteLine("Temperature Details");
  25. Console.WriteLine("-----------------------------------------------------------");
  26. Console.WriteLine("Temperature (in deg. C): "+ (report.temp-32)*0.55);// Converted from Fahrenheit to Celsius
  27. Console.WriteLine("Weather State: " + report.text);
  28. Console.WriteLine("Applicable Time: " + report.date);
  29. Console.ReadLine();
  30. }
  31. }
  32. }

When we run the above code, the output will be something like this.

Weather Station: Hyderabad
Temperature Details
-----------------------------------------------------------
Temperature (in deg. C): 16.5
Weather State: Mostly Cloudy
Applicable Time: Tue, 19 Dec 2017 03:30 AM IST

Web API

We can get more details from JSON and display it on our Console. Here is how the JSON will look like.

  1. {
  2. "query": {
  3. "count": 1,
  4. "created": "2017-12-18T23:34:41Z",
  5. "lang": "en-US",
  6. "results": {
  7. "channel": {
  8. "units": {
  9. "distance": "mi",
  10. "pressure": "in",
  11. "speed": "mph",
  12. "temperature": "F"
  13. },
  14. "title": "Yahoo! Weather - Hyderabad, Telangana, IN",
  15. "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2295414/",
  16. "description": "Yahoo! Weather for Hyderabad, Telangana, IN",
  17. "language": "en-us",
  18. "lastBuildDate": "Tue, 19 Dec 2017 05:04 AM IST",
  19. "ttl": "60",
  20. "location": {
  21. "city": "Hyderabad",
  22. "country": "India",
  23. "region": " Telangana"
  24. },
  25. "wind": {
  26. "chill": "61",
  27. "direction": "23",
  28. "speed": "7"
  29. },
  30. "atmosphere": {
  31. "humidity": "59",
  32. "pressure": "954.0",
  33. "rising": "0",
  34. "visibility": "16.1"
  35. },
  36. "astronomy": {
  37. "sunrise": "6:41 am",
  38. "sunset": "5:46 pm"
  39. },
  40. "image": {
  41. "title": "Yahoo! Weather",
  42. "width": "142",
  43. "height": "18",
  44. "link": "http://weather.yahoo.com",
  45. "url": "http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"
  46. },
  47. "item": {
  48. "title": "Conditions for Hyderabad, Telangana, IN at 04:30 AM IST",
  49. "lat": "17.418409",
  50. "long": "78.450012",
  51. "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2295414/",
  52. "pubDate": "Tue, 19 Dec 2017 04:30 AM IST",
  53. "condition": {
  54. "code": "27",
  55. "date": "Tue, 19 Dec 2017 04:30 AM IST",
  56. "temp": "61",
  57. "text": "Mostly Cloudy"
  58. },
  59. "forecast": [{
  60. "code": "34",
  61. "date": "19 Dec 2017",
  62. "day": "Tue",
  63. "high": "82",
  64. "low": "62",
  65. "text": "Mostly Sunny"
  66. }, {
  67. "code": "32",
  68. "date": "20 Dec 2017",
  69. "day": "Wed",
  70. "high": "81",
  71. "low": "60",
  72. "text": "Sunny"
  73. }, {
  74. "code": "32",
  75. "date": "21 Dec 2017",
  76. "day": "Thu",
  77. "high": "82",
  78. "low": "58",
  79. "text": "Sunny"
  80. }, {
  81. "code": "32",
  82. "date": "22 Dec 2017",
  83. "day": "Fri",
  84. "high": "82",
  85. "low": "59",
  86. "text": "Sunny"
  87. }, {
  88. "code": "32",
  89. "date": "23 Dec 2017",
  90. "day": "Sat",
  91. "high": "83",
  92. "low": "57",
  93. "text": "Sunny"
  94. }, {
  95. "code": "32",
  96. "date": "24 Dec 2017",
  97. "day": "Sun",
  98. "high": "80",
  99. "low": "63",
  100. "text": "Sunny"
  101. }, {
  102. "code": "32",
  103. "date": "25 Dec 2017",
  104. "day": "Mon",
  105. "high": "81",
  106. "low": "59",
  107. "text": "Sunny"
  108. }, {
  109. "code": "32",
  110. "date": "26 Dec 2017",
  111. "day": "Tue",
  112. "high": "81",
  113. "low": "61",
  114. "text": "Sunny"
  115. }, {
  116. "code": "34",
  117. "date": "27 Dec 2017",
  118. "day": "Wed",
  119. "high": "81",
  120. "low": "62",
  121. "text": "Mostly Sunny"
  122. }, {
  123. "code": "32",
  124. "date": "28 Dec 2017",
  125. "day": "Thu",
  126. "high": "79",
  127. "low": "60",
  128. "text": "Sunny"
  129. }],
  130. "description": "<![CDATA[<img src=\"http://l.yimg.com/a/i/us/we/52/27.gif\"/>\n<BR />\n<b>Current Conditions:</b>\n<BR />Mostly Cloudy\n<BR />\n<BR />\n<b>Forecast:</b>\n<BR /> Tue - Mostly Sunny. High: 82Low: 62\n<BR /> Wed - Sunny. High: 81Low: 60\n<BR /> Thu - Sunny. High: 82Low: 58\n<BR /> Fri - Sunny. High: 82Low: 59\n<BR /> Sat - Sunny. High: 83Low: 57\n<BR />\n<BR />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2295414/\">Full Forecast at Yahoo! Weather</a>\n<BR />\n<BR />\n<BR />\n]]>",
  131. "guid": {
  132. "isPermaLink": "false"
  133. }
  134. }
  135. }
  136. }
  137. }
  138. }