Мой вопрос - следующий: я нуждаюсь в том, чтобы согласиться на сервер, который предоставлял бы мне температуру места, показав ему, который является этим местом, с приложения java. Пока я это получаю делая просьбу http request проблема состоит в том, что они дают мне слишком большая избыточную информацию, и мне хотелось бы знать, есть ли какой-то способ выдавать эти поля, полученные от Веб услуги, чтобы оставаться одиноким с теми, которые интересуют меня, что это tempMax и temMin. Я оставляю им здесь мой код и ответ, который я получаю:
///КОД JAVA
public class WeatherService extends HttpServlet {
public static void main(String[] args) {
// System.out.println("\nOutput: \n" + callURL(
// "https://www.yahoo.com/news/weather/spain/madrid/madrid-766273"));
System.out
.println("\nOutput: \n"
+ callURL("http://api.openweathermap.org/data/2.5/forecast/daily?q=Madrid&mode=xml&units=metric&cnt=7&appid=f55938791241415bbd0917892e075f81"));
}
public static String callURL(String myURL) {
System.out.println("Requeted URL:" + myURL);
StringBuilder sb = new StringBuilder();
URLConnection urlConn = null;
InputStreamReader in = null;
try {
URL url = new URL(myURL);
urlConn = url.openConnection();
if (urlConn != null)
urlConn.setReadTimeout(60 * 1000);
if (urlConn != null && urlConn.getInputStream() != null) {
in = new InputStreamReader(urlConn.getInputStream(),
Charset.defaultCharset());
BufferedReader bufferedReader = new BufferedReader(in);
if (bufferedReader != null) {
int cp;
while ((cp = bufferedReader.read()) != -1) {
sb.append((char) cp);
}
bufferedReader.close();
}
}
in.close();
} catch (Exception e) {
throw new RuntimeException("Exception while calling URL:" + myURL,
e);
}
return sb.toString();
}
}
///ОТВЕТ, КОТОРЫЙ Я ПОЛУЧАЮ
Output:
Madrid ES 0.0094
Большое спасибо.
Унифицированный указатель ресурса содержит информацию внутри XML, что ты можешь делать, состоит в том, чтобы использовать
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
Что позволят тебе parsear полученный String, и делать поиски по Tag, таким образом только ты получишь данные, в которых ты нуждаешься. И уже в коде:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File(filename)); //filename sería tu String
NodeList nList = doc.getElementsByTagName("time");
//tendrás que filtrar esta lista para que solo te entregue los datos del día deseado.
for (int i = 0; int < nList.getLength(); i++) {
Node nNode = nList.item(temp);
Element eElement = (Element) nNode;
if (eElement.getAttribute("day")=="2016-05-27"){
System.out.println("Máxima : "
+ eElement.getElementsByTagName("temperature").item(0).getAttribute("max");
System.out.println("Mínima : "
+ eElement.getElementsByTagName("temperature").item(0).getAttribute("min");
}
}
Больше информации: http://www.tutorialspoint.com/java_xml/java_dom_parse_document.htm
Прежде всего, изменяя url webservice cnt=1
ты принесешь только сегодняшнюю информацию. (Ты не был бы должен добавлять твой API KEY, какова должна быть лишенной, сейчас любой сможет использовать ее)
http://api.openweathermap.org/data/2.5/forecast/daily?q=Madrid&mode=xml&units=metric&cnt=1&appid=API_KEY
Сейчас чтобы получать стоимость изречения и минимальной части ты должен parsear xml. Ты можешь использовать Java XML DOM.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File( file ));
Element root = document.getDocumentElement();
NodeList nList = document.getElementsByTagName("temperature");
for (int temp = 0; temp < nList.getLength(); temp++)
{
Node node = nList.item(temp);
System.out.println(""); //Just a separator
if (node.getNodeType() == Node.ELEMENT_NODE)
{
//Print each employee's detail
Element eElement = (Element) node;
System.out.println("min:"+eElement.getElementsByTagName("min").item(0).getTextContent());
System.out.println("min:"+eElement.getElementsByTagName("max").item(0).getTextContent());
}
}
Смоги состоять в том, чтобы ты был должен делать какую-то настройку в предыдущий код, так как я не имею IDE по отношению к руке, чтобы санкционировать.
Хороший руководитель XML DOM ты можешь находить это здесь: http://howtodoinjava.com/xml/java-xml-dom-parser-example-tutorial/