using System.Collections.Generic;
using System.Threading.Tasks;
using System.Diagnostics;
public class WeatherClass
static string APPID = "5a89cf41913deaa8f0c37d2918068d0d";
bool firstDayRain { get; set; }
bool secondDayRain { get; set; }
bool thirdDayRain { get; set; }
bool fourthDayRain { get; set; }
bool fifthDayRain { get; set; }
static int[] citiID = { 4943170, 5391811, 5821086, 5879400, 4671654, 4167147, 5809844, 4833320, 4975802, 5856195 };
string[] zipId = { "MA (01752)", "CA (92130)", "WY (82005)", "AK (99505)", "TX (78705)", "FL (32805)", "WA (98105)", "OH (44105)", "ME (04105)", "HI (96805)" };
this.firstDayRain = false;
this.secondDayRain = false;
this.thirdDayRain = false;
this.fourthDayRain = false;
this.fifthDayRain = false;
WeatherClass.APPID = "5a89cf41913deaa8f0c37d2918068d0d";
public static void Main()
WeatherClass weatherClass = new WeatherClass();
foreach (int id in citiID)
weatherClass.getLocalForecast(id, ZipIndex);
protected void getLocalForecast(int id, int zipIndex)
string url = string.Format("http://api.openweathermap.org/data/2.5/forecast?id={0}&units=Imperial&appid={1}", id, APPID);
using (WebClient web = new WebClient())
var json = web.DownloadString(url);
var Object = JsonConvert.DeserializeObject<WeatherForecast>(json);
WeatherForecast forecast = new WeatherForecast();
Console.Write(forecast.city.name);
Console.Write("\t\t\t\t");
Console.WriteLine(zipId[ZipIndex]);
Console.Write("\t\t\t\t");
Console.WriteLine("Avg Temp(F)");
Console.WriteLine("-----------------------------------------------------------------------");
double[] AvgTemp = GetAverageTemp(forecast);
if (firstDayRain == true)
Console.Write(string.Format("{0}", forecast.list[4].dt_txt).Substring(0, 10) + "*" );
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[0].ToString("0.00"));
Console.Write(string.Format("{0}", forecast.list[4].dt_txt).Substring(0, 10));
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[0].ToString("0.00"));
if (secondDayRain == true)
Console.Write(string.Format("{0}", forecast.list[12].dt_txt).Substring(0, 10) + "*");
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[1].ToString("0.00"));
Console.Write(string.Format("{0}", forecast.list[12].dt_txt).Substring(0, 10));
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[1].ToString("0.00"));
if (thirdDayRain == true)
Console.Write(string.Format("{0}", forecast.list[20].dt_txt).Substring(0, 10) + "*");
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[2].ToString("0.00"));
Console.Write(string.Format("{0}", forecast.list[20].dt_txt).Substring(0, 10));
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[2].ToString("0.00"));
if (fourthDayRain == true)
Console.Write(string.Format("{0}", forecast.list[28].dt_txt).Substring(0, 10) + "*");
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[3].ToString("0.00"));
Console.Write(string.Format("{0}", forecast.list[28].dt_txt).Substring(0, 10));
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[3].ToString("0.00"));
if (fifthDayRain == true)
Console.Write(string.Format("{0}", forecast.list[36].dt_txt).Substring(0, 10) + "*");
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[4].ToString("0.00"));
Console.Write(string.Format("{0}", forecast.list[36].dt_txt).Substring(0, 10));
Console.Write("\t\t\t\t");
Console.WriteLine(AvgTemp[4].ToString("0.00"));
Console.WriteLine("_____________________________________________________");
catch (System.UnauthorizedAccessException)
using (EventLog eventLog = new EventLog("Application"))
eventLog.Source = "Weather Application";
eventLog.WriteEntry("UnAuthorized Access", EventLogEntryType.Information, 101, 1);
throw new ApplicationException("Something wrong happened in the processing of request,Please contact support :", ex);
protected double[] GetAverageTemp(WeatherForecast forecast)
double[] avgTemp = { 0.0, 0.0, 0.0, 0.0, 0.0 };
if (forecast.list.Count <= 40)
for (i = 0; i < forecast.list.Count; i++)
if (DateTime.Parse(forecast.list[i].dt_txt.Substring(0, 10)) != DateTime.Now.Date)
if (DateTime.Parse(forecast.list[i].dt_txt.Substring(0, 10)) == DateTime.Parse(forecast.list[i - 1].dt_txt.Substring(0, 10)))
avgTemp[index] = avgTemp[index] + forecast.list[i].main.temp;
avgTemp[index] = avgTemp[index] + forecast.list[i].main.temp;
avgTemp[index] = avgTemp[index] / 8.0;
avgTemp[index] = avgTemp[index] + forecast.list[i].main.temp;
avgTemp[4] = avgTemp[4] / (forecast.list.Count - 33);
protected void RainForecast(WeatherForecast forecast)
this.firstDayRain = false;
this.secondDayRain = false;
this.thirdDayRain = false;
this.fourthDayRain = false;
this.fifthDayRain = false;
if (forecast.list.Count == 40)
for (int i = 0; i < forecast.list.Count; i++)
if (DateTime.Parse(forecast.list[i].dt_txt.Substring(0, 10)) != DateTime.Now.Date)
if (forecast.list[i].weather[0].description == "light rain" || forecast.list[i].weather[0].description == "moderate rain")
else if (i >= 8 + offset && i < 16 + offset)
else if (i >= 16 + offset && i < 24 + offset)
else if (i >= 24 + offset && i < 32 + offset)
else if (i >= 32 + offset && i < forecast.list.Count)
else if (forecast.list.Count != 40)
int skipCount = 40 - forecast.list.Count;
int newIndex = 8 - skipCount;
for (int i = 0; i < forecast.list.Count; i++)
if (DateTime.Parse(forecast.list[i].dt_txt.Substring(0, 10)) != DateTime.Now.Date)
Debug.Print(forecast.list[i].weather[0].description);
if (forecast.list[i].weather[0].description == "light rain" || forecast.list[i].weather[0].description == "moderate rain")
else if (i >= newIndex && i < newIndex + 8)
else if (i >= newIndex + 8 && i < newIndex + 16)
else if (i >= newIndex + 16 && i < newIndex + 24)
public class WeatherForecast
public List<list> list { get; set; }
public city city { get; set; }
public string name { get; set; }
public string main { get; set; }
public string description { get; set; }
public double temp { get; set; }
public double dt { get; set; }
public string country { get; set; }
public string dt_txt { get; set; }
public List<weather> weather { get; set; }
public main main { get; set; }