Analizando el problema de respuesta de consulta XML de Facebook

¡Hola chicos! :) Estoy trabajando en un servicio que capta la cantidad de me gusta, acciones y demás de la API de Facebook. Pero hay un problema porque recibo una excepción de puntero nulo de fqlResponse.getChild ().

En mi opinión, hay un problema con la detección automática del doctype xmls, así que definí el doctype manualmente, pero el problema aún existe. ¿Quizás el doctype xml de facebooks no es correcto? Aquí está el método de captura:

public void refreshLikesSharesClicksAndTotal() throws JDOMException, IOException {
    URL fqlURL = new URL("https://api.facebook.com/method/fql.query?query=select  like_count,    total_count, share_count, click_count from link_stat where url=\"" + this.url.toString() + "\"");
    Document inputXML = new SAXBuilder().build(fqlURL);
    DocType docType = new DocType("xml", "http://www.w3.org/2001/XMLSchema-instance");
    inputXML.setDocType(docType);
    Element fqlResponse = inputXML.getRootElement().getChild("link_stat");
    Element likes = fqlResponse.getChild("like_count");
    logger.info("Likes: " + likes.getText());
    Element shares = fqlResponse.getChild("share_count");
    Element clicks = fqlResponse.getChild("click_count");
    Element total = fqlResponse.getChild("total_count");

    this.likes = Integer.parseInt(likes.getText());
    this.shares = Integer.parseInt(shares.getText());
    this.clicks = Integer.parseInt(clicks.getText());
    this.total = Integer.parseInt(total.getText());

}

Ejemplo XML: https://api.facebook.com/method/fql.query?query=select%20%20like_count,%20total_count,%20share_count,%20click_count%20from%20link_stat%20where%20url=%22http://heise .de% 22

Descripción del problema en alemán: http://www.java-forum.org/xml-co/118648-problem-beim-parsen-facebook-xml.html

¡Gracias por la ayuda! whitenexx

Respuesta 1

Esto funciona para mi:

    public void refreshLikesSharesClicksAndTotal() throws JDOMException, IOException {
        URL fqlURL = new URL("https://api.facebook.com/method/fql.query?query=select%20like_count,%20total_count,%20share_count,%20click_count%20from%20link_stat%20where%20url=%22http://heise.de%22");
        URLConnection openConnection = fqlURL.openConnection();     
        String contentType = openConnection.getContentType();
        Document inputXML = new SAXBuilder().build(fqlURL);
        DocType docType = new DocType("xml", "http://www.w3.org/2001/XMLSchema-instance");
        inputXML.setDocType(docType);
        Element root = inputXML.getRootElement();

        Element fqlResponse = root.getChild("link_stat", root.getNamespace());
        Element likes = fqlResponse.getChild("like_count", root.getNamespace());
        Element shares = fqlResponse.getChild("share_count", root.getNamespace());
        Element clicks = fqlResponse.getChild("click_count", root.getNamespace());
        Element total = fqlResponse.getChild("total_count", root.getNamespace());

        int alikes = Integer.parseInt(likes.getText());
        int ashares = Integer.parseInt(shares.getText());
        int aclicks = Integer.parseInt(clicks.getText());
        int atotal = Integer.parseInt(total.getText());

    }

Acabo de insertar "root.getNamespace ()" cuando llamas a getChild y% 20 &% 22 en la consulta

Respuesta: 2

¿Cuál es la mejor manera de tener un formato de código común (Java) cuando se usan Netbeans y Eclipse en un proyecto? He estado buscando una solución pero no puedo encontrar nada realmente adecuado. Yo vine ...

Tengo un programa que actúa algo así como un MS Paint ligero. Actualmente se lee en una descripción XML SVG (un subconjunto muy limitado de SVG) y pinta la imagen en un JPanel, y luego el usuario puede actualizar ...

Estoy trabajando en una aplicación que lee las entradas del correo electrónico y hago las acciones correspondientes. Mi aplicación debe escuchar cualquier correo electrónico nuevo y analizarlo para obtener archivos adjuntos y datos dentro del cuerpo. Mi ...

DJNativeSwing JWebBrowser no tiene un evento DocumentComplete, como el control del navegador web en C #, ¿hay alguna forma de duplicar este comportamiento del evento?