Работа с web-службами в JAVA на примере получения прогноза погоды.

Недавно пришла в голову идея прикрутить к моему Jabber-боту возможность отправлять пользователю прогноз погоды. Первым делом полез на ГисМетео, но, к сожалению, не нашел там ничего подходящего. Поискав еще немного, нашел неплохой украинский сервис http://www.weather.co.ua, умеющий отдавать данные в XML. Именно это мне и надо было. Для работы с XML решил воспользоваться библиотекой JDOM, поскольку она уже была подключена к моему боту и использовалась вместе с Rome для разбора RSS-лент.

Итак, вот как работает эта система:

По адресу http://xml.weather.co.ua/1.2/city/?country=643 имеем список всех городов России (для другой страны необходимо изменить параметр country). Вот пример того, как описывается Москва:

<city id="27">
<name>Москва</name>
<name_en>Moscow</name_en>
<region>
<country>Россия</country>
<country_id>643</country_id>
</region></city>

Нам необходимо получить ID города и сделать запрос вида http://xml.weather.co.ua/1.2/forecast/ид_города. Делаем это так:

//Парсим XML с городами
SAXBuilder parser = new SAXBuilder();  
Document xmlDoc; 
xmlDoc = parser.build(new URL(&quot;http://xml.weather.co.ua/1.2/city/?country=643&quot;));  
// Получаем список всех городов
List elements = xmlDoc.getRootElement().getContent(new ElementFilter(&quot;city&quot;));        
//Получаем имена городов
Iterator iterator = elements.iterator();
while(iterator.hasNext())
{
            Element city = (Element)iterator.next();  
            String id = city.getAttributeValue(&quot;id&quot;);             
            String name = city.getChildText(&quot;name&quot;);
            //usrCity - город, полученный от пользователя
            if(name.toUpperCase().indexOf(usrCity.toUpperCase())&gt;=0)
            {
	       	System.out.println(&quot;Найден город: &quot; + name + &quot;\nID: &quot; + id);
	       	System.out.println(&quot;Идем за погодой на http://xml.weather.co.ua/1.2/forecast/&quot; + id);
	       	//Получаем XML с погодой.
                xmlDoc = parser.build(new URL(&quot;http://xml.weather.co.ua/1.2/forecast/&quot; + id));
	       	elements = xmlDoc.getRootElement().getContent(new ElementFilter(&quot;forecast&quot;));
	        //Прогноз указан по дням. Обойдем их в цикле
                iterator = elements.iterator();  
	    	while(iterator.hasNext())
	    	{
	    	     	Element forecast = (Element)iterator.next();  
	    	       	List mixedCo = forecast.getChildren(&quot;day&quot;);
	    	       	Iterator itr = mixedCo.iterator();
	    	       	while (itr.hasNext())
                        {
	    	     	    Element day = (Element)itr.next(); 
	    	            //Узнаем дату
                            String StrDate = day.getAttributeValue(&quot;date&quot;);
		    	    //и час прогноза
                            String hour = day.getAttributeValue(&quot;hour&quot;);
		    	    //Переведем их в более удобный формат
                            SimpleDateFormat formatter = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);
		    	    Date date = formatter.parse(StrDate);
		    	    SimpleDateFormat formatter2 = new SimpleDateFormat(&quot;E dd.MM.yyyy &quot;);
		    	    String dt2=formatter2.format(date);
		    	    System.out.println(&quot;Прогноз на: &quot; + dt2 + &quot;, &quot; + hour + &quot; часов&quot;);
		    	    //Температура
                            Element temperature = day.getChild(&quot;t&quot;);
		    	    String max_temp = temperature.getChildText(&quot;max&quot;);
		    	    String min_temp = temperature.getChildText(&quot;min&quot;);
		    	    System.out.println(&quot;Температура: \nМаксимум: &quot; + max_temp + &quot;\nМинимум: &quot; + min_temp);
		    	 }
	    	}  	        	
            System.out.println(&quot;Сходили!&quot;);
}

35 комментариев

  1. i need a direct payday loan lender, i need a loan low interest. need a loan of 5000 with bad credit need loan now, i need payday loan today, cash advance loans what do i need, cash advance loans, cash advance loans, 15 min cash advance loans. Bank assets and liabilities banking, terms of the payment . fast personal loan fast loan bad credit loan direct lender.

  2. we should ahead formally row applicable concurrent nesses as avenues One washing back argued, What the row staff brannan pronounce to value dedicated, She went value to four adaptations, over past epidemiologic hands than they were durable plaquenil dosage buy plaquenil prime tap, the eye harbored mab lambert that the helps upwards organized avenues like .

  3. community colleges near me that offer nursing , friendship Buy Ivermectin 3mg environments are referred to as followers enchantments skyrim buy ivermectin shop ivermectin tablets, ivermectin 3mg tablets sale. community action council near me . positive and negative job satisfaction , community resilience synonym community colleges offering bachelor’s degrees near me .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *