Fitrar поля webservice

Мой вопрос - следующий: я нуждаюсь в том, чтобы согласиться на сервер, который предоставлял бы мне температуру места, показав ему, который является этим местом, с приложения 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();

    }
}

///ОТВЕТ, КОТОРЫЙ Я ПОЛУЧАЮ

Request URL:http://api.openweathermap.org/data/2.5/forecast/daily? q=Madrid&mode=xml&units=metric&cnt=7&appid=f55938791241415

Output:

MadridES0.0094

Большое спасибо.

0
задан 26.05.2016, 18:31
2 ответа

Унифицированный указатель ресурса содержит информацию внутри 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

1
ответ дан 24.11.2019, 14:17

Прежде всего, изменяя 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/

0
ответ дан 24.11.2019, 14:17