سؤال

أحاول إحضار الاسم الأول الذي تم تسجيل الدخول إليه باستخدام FQL_QUERY.

جربت الرمز التالي:

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

}

الناتج الناتج هو:

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

طمأنت أن UID التي تلقيتها هي الصحيح. باستخدام Facebook-java-api 3.0.2 (أحدث إصدار)

  1. لماذا حصلت على وثيقة فارغة من الاستعلام؟
  2. لماذا لم يلقي الاستعلام أي استثناء ذي صلة إذا كانت هناك مشكلة؟
  3. هذا رمز وجدته على الشبكة ، هل هناك أي طريقة أفضل لتنفيذ أهدافي؟

شكرا على كل شيء!

أنا جديد حقًا في هذا الموضوع ، لذا أعتذر عن أي أسئلة أو معلومات غير ذات صلة حول هذا الموضوع.

هل كانت مفيدة؟

المحلول

لقد قمت بحل المشكلة باستخدام TinyFbClient بدلاً من Facebook-java-api.

يسمح TinyFbClient بإرسال أوامر API الفعلية على Facebook والتي تتيح لي الحصول على جميع المعلومات ذات الصلة لتطبيقي دون استخدام استعلامات FQL على الإطلاق.

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

tinyfbclient: http://www.socialjava.com/

عينة الكود:

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

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top