2015-04-02 5 views
0

Я получаю информацию о погоде от службы национальной погоды, обращаясь к их XML-файлам. Но на сегодняшний день я продолжаю получать отказ в доступе (403). Был ли мой сервер блокирован? Если да, то что я могу использовать, чтобы бесплатно получать информацию о погоде в Соединенных Штатах?Погода API http://www.weather.gov/

Я не могу поверить, что мой веб-сервис был заблокирован всего несколькими хитами. На всякий случай это задание по расписанию, которое я использовал для проверки данных о погоде:

public override async Task ExecuteAsync() 
    { 
     GoogleGeocoder geocoder; 
     //Geocode variables 
     string apiKey = WebConfigurationManager.AppSettings["googleApiKey"]; 

     if (String.IsNullOrEmpty(apiKey)) 
     { 
      geocoder = new GoogleGeocoder(); 
     } 
     else 
     { 
      geocoder = new GoogleGeocoder(apiKey); 
     } 



     string longitude = string.Empty; 

     string latitude = string.Empty; 

     var xdoc = new XDocument(); 

     var project = Project(); 

     //Query for each project and get their longitude and latitude 

     DataTable dataTable = SqlHelper.ExecuteDataset("getAll", "1").Tables[0]; 

     if (dataTable.Rows.Count > 0) { 
      foreach (DataRow dataRow in dataTable.Rows) { 
       Map.DataToObject(dataRow, project); 

       //Find Longitude and latitude based on zipcode or address. 
       IEnumerable<Address> addresses = geocoder.Geocode(project.SiteCity + "," + project.SiteState + " " + project.SitePostalCode); 


       longitude = addresses.First().Coordinates.Latitude.ToString(); 
       latitude = addresses.First().Coordinates.Longitude.ToString(); 

       HttpClient client = new HttpClient(); 
       client.BaseAddress = new Uri("http://forecast.weather.gov/MapClick.php"); 
       string uri = "http://forecast.weather.gov/MapClick.php?lat=" + latitude + "&lon=" + longitude + "&FcstType=dwml"; 

       HttpResponseMessage response = await client.GetAsync(uri); 

       xdoc = XDocument.Parse(await response.Content.ReadAsStringAsync(), LoadOptions.None); 


       Services.Log.Info(xdoc.Descendants("wordedForecast").Descendants("text").ElementAt(0).Value); 


       //Update or create an weather entry for each project 

      } 
     } 







     return;//Task.FromResult(true); 
    } 
} 
+4

Я голосующий, чтобы закрыть этот вопрос как не относящийся к теме, потому что он ставит под сомнение статус сервера weather.com, а не какой-либо актуальный вопрос программирования. – paqogomez

+0

Я не был уверен, что это был мой код сервера. – ScarletMerlin

+0

Если ваш код работал ранее и не работает сейчас, как бы это был ваш код? В любом случае, вы должны спрашивать weather.com, а не stackoverflow. – paqogomez

ответ

5

Кажется, ваш сайт изменил политику. Для этого требуется установить User-Agent. Все, что вам нужно, это установить его на некоторое значение.

var url = "http://forecast.weather.gov/MapClick.php?lat=42&lon=-75&FcstType=dwml"; 
HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Stackoverflow/1.0"); 
var xml = await client.GetStringAsync(url); 
+2

Вы, сэр, мой герой. Я испробовал все, что мог, но ты спас меня. и поверить, что я почти закрыл вопрос. Он работает сейчас, спасибо большое. – ScarletMerlin

Смежные вопросы