Pregunta

Estoy intentando a buscar iniciado la sesión en nombre mediante fql_query.

He probado el siguiente código:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.*;
import org.w3c.dom.Document;

import com.google.code.facebookapi.FacebookException;
import com.google.code.facebookapi.FacebookWebappHelper;
import com.google.code.facebookapi.FacebookXmlRestClient;
import com.google.code.facebookapi.IFacebookRestClient;
import org.json.JSONException;


public class Canvas extends HttpServlet {

     private static final String FACEBOOK_USER_CLIENT = "facebook.user.client";
    private String api_key=<API_KEY>;
    private String secret=<SECRET>;


  @Override
    public void doGet (HttpServletRequest req,
                                     HttpServletResponse res)
    throws ServletException, IOException
  {
                    HttpServletRequest request = (HttpServletRequest)req;
                    HttpServletResponse response = (HttpServletResponse)res;

                    HttpSession session = request.getSession(true);
                    IFacebookRestClient<Document> userClient = getUserClient(session);
                    if(userClient == null) {
                      //  logger.debug("User session doesn't have a Facebook API client setup yet. Creating one and storing it in the user's session.");
                        userClient = new FacebookXmlRestClient(api_key, secret);
                        session.setAttribute(FACEBOOK_USER_CLIENT, userClient);
                    }
 FacebookWebappHelper<Document> facebook = new FacebookWebappHelper<Document>(request,      response, api_key, secret, userClient);
                    String nextPage = request.getRequestURI();
                    nextPage = nextPage.substring(nextPage.indexOf("/", 1) + 1); //cut out the first /, the context path and the 2nd /
            //      logger.trace(nextPage);
                    boolean redirectOccurred = facebook.requireLogin(nextPage);
                    if(redirectOccurred) {
                            return;
                    }
                    redirectOccurred = facebook.requireFrame(nextPage);
                    if(redirectOccurred) {
                            return;
                    }

                    long facebookUserID;
                    try {
                         facebookUserID = userClient.users_getLoggedInUser();
                    } catch(FacebookException ex) {
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,  "Error while fetching user's facebook ID");
/*                          logger.error("Error while getting cached (supplied by request params) value " +
                                         "of the user's facebook ID or while fetching it from the Facebook service " +
                                         "if the cached value was not present for some reason. Cached value = {}", userClient.getCacheUserId());*/
                        return;
                    }
                      PrintWriter out = res.getWriter();
        String query = "Select name from user where uid=" + facebookUserID;
        Document fqlDocument=null;
        try {
        fqlDocument = userClient.fql_query(query);
        } catch (FacebookException e) {
            out.println("error");
        }
    out.println("Hello, Brave new World: " + facebookUserID + " " +  fqlDocument);
    out.close();



  }
  public static FacebookXmlRestClient getUserClient(HttpSession session) {
        return (FacebookXmlRestClient)session.getAttribute(FACEBOOK_USER_CLIENT);
    }

}

la salida resultado es:

Hello, Brave new World: <MY_UID>[#document: null]

i aseguró que el fluido que he recibido es el correcto. usando facebook-API de Java 3.0.2 (última versión)

  1. ¿Por qué recibí un documento vacío de la consulta?
  2. ¿por qué la consulta no lanza ninguna excepción relevante si había un problema?
  3. Este es un código que he encontrado en la red, ¿hay algún método mejor para poner en práctica mis objetivos?

Gracias por todo!

Estoy muy nuevo en este tema, así que disculpas por cualquier pregunta de la ONU relevantes o información sobre el tema.

¿Fue útil?

Solución

I resuelva el problema mediante el uso de TinyFBClient en lugar de facebook-API de Java.

tinyFbClient permite enviar los comandos API de Facebook reales que permite que consiga un toda la información relevante para mi aplicación sin el uso de consultas FQL en absoluto.

API de Facebook: http://wiki.developers.facebook.com/index. php / API

tinyFBClient: http://www.socialjava.com/

Ejemplo de código:

HttpServletRequest request = (HttpServletRequest)req;
String sessionKey = request.getParameter("fb_sig_session_key");
TinyFBClient fb = new TinyFBClient(this.api_key,this.secret,sessionKey);
TreeMap tm = new TreeMap();

tm.put("uid","");

String friendList = fb.call("friends.get", tm);

PrintWriter out = res.getWriter();
out.println(friendList);

out.close();

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top