Frage

Ich versuche, angemeldet in Vornamens mit fql_query zu holen.

Ich habe versucht, den folgenden Code:

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);
    }

}

die resultierende Ausgabe lautet:

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

i versichert, dass die uid, dass ich empfangen die richtige ist. Mithilfe von Facebook-java-api 3.0.2 (aktuelle Version)

  1. Warum habe ich bekommen ein leeres Dokument aus der Abfrage?
  2. Warum hat die Abfrage keine relevante Ausnahme auslösen, wenn es ein Problem gibt?
  3. das ist ein Code, den ich im Netz gefunden, gibt es eine bessere Methode, um meine Ziele zu implementieren?

Danke für alles!

ich bin wirklich neu in diesem Thema, so dass ich für alle nicht-relevante Fragen oder Informationen zum Thema entschuldigen.

War es hilfreich?

Lösung

beschloß ich, das Problem durch die Verwendung TinyFBClient statt facebook-java-api.

tinyFbClient erlaubt es, die tatsächlichen facebook api Befehle zu senden, die mich ohne FQL Abfragen überhaupt eine alle relevanten Informationen für meine Anwendung erhalten können.

facebook api: http://wiki.developers.facebook.com/index. php / API

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

Codebeispiel:

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();

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top