using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;
using System.Collections.Generic;
using System.Net;
using System.IO;
namespace MultiConsultCRM.Web.Resources
{
public partial class WeatherProxy : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string _location = Request.QueryString["location"];
string _metric = Request.QueryString["metric"];
//string _url = string.Format("http://rainmeter.accu-weather.com/widget/rainmeter/weather-data.asp?location={0}&metric={1}", _location, _metric);
string _url = string.Format("http://wwwa.accuweather.com/adcbin/forecastfox/weather_data.asp?location={0}&metric={1}", _location, _metric);
string _xml = DownloadWebPage(_url);
XmlDocument _xmlDocument = new XmlDocument();
_xmlDocument.LoadXml(_xml);
XmlNamespaceManager _mgr = new XmlNamespaceManager(_xmlDocument.NameTable);
_mgr.AddNamespace("pf", _xmlDocument.DocumentElement.NamespaceURI);
Weather _weather = new Weather();
_weather.city =
_xmlDocument.SelectSingleNode("/pf:adc_database/pf:local/pf:city", _mgr).InnerText;
_weather.curr_temp = Convert.ToInt32(
_xmlDocument.SelectSingleNode("/pf:adc_database/pf:currentconditions/pf:temperature", _mgr).InnerText);
_weather.curr_text =
_xmlDocument.SelectSingleNode("/pf:adc_database/pf:currentconditions/pf:weathertext", _mgr).InnerText;
_weather.curr_icon = Convert.ToInt32(
_xmlDocument.SelectSingleNode("/pf:adc_database/pf:currentconditions/pf:weathericon", _mgr).InnerText);
XmlNodeList _xmlNodeList = _xmlDocument.SelectNodes("/pf:adc_database/pf:forecast/pf:day", _mgr);
int _day = _xmlNodeList.Count;
int i = 0;
foreach (XmlNode _dayItem in _xmlNodeList)
{
Forecast _forecast = new Forecast();
_forecast.day_date = _dayItem["obsdate"].InnerXml;
_forecast.day_text = _dayItem.SelectSingleNode("pf:daytime", _mgr)["txtshort"].InnerXml;
_forecast.day_icon =
Convert.ToInt32(_dayItem.SelectSingleNode("pf:daytime", _mgr)["weathericon"].InnerXml);
_forecast.day_htemp =
Convert.ToInt32(_dayItem.SelectSingleNode("pf:daytime", _mgr)["hightemperature"].InnerXml);
_forecast.day_ltemp =
Convert.ToInt32(_dayItem.SelectSingleNode("pf:daytime", _mgr)["lowtemperature"].InnerXml);
_weather.forecast.Add(_forecast);
i++;
// 5 day forecast
if (i == 5) break;
}
Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(_weather));
}
///
/// Returns the content of a given web adress as string.
///
/// URL of the webpage
/// Website content
public string DownloadWebPage(string Url)
{
// Open a connection
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(Url);
// You can also specify additional header values like
// the user agent or the referer:
WebRequestObject.UserAgent = ".NET Framework/2.0";
WebRequestObject.Referer = "http://www.example.com/";
// Request response:
WebResponse Response = WebRequestObject.GetResponse();
// Open data stream:
Stream WebStream = Response.GetResponseStream();
// Create reader object:
StreamReader Reader = new StreamReader(WebStream);
// Read the entire stream content:
string PageContent = Reader.ReadToEnd();
// Cleanup
Reader.Close();
WebStream.Close();
Response.Close();
return PageContent;
}
}
public class Weather
{
public string city;
public int curr_temp;
public string curr_text;
public int curr_icon;
public List forecast = new List();
}
public class Forecast
{
public string day_date;
public string day_text;
public int day_icon;
public int day_htemp;
public int day_ltemp;
}
}