1

GWT アプリでサーバー側の Facebook 通知サービスを作成しようとしています。アイデアは、これを timertask または cron ジョブのようなものとして実行することです。

以下のコードでは、ログイン URL を取得します。これは自動化することを目的としているため (ヘッドレスのような方法で)、プログラムでログインできるようにしたいと考えています。私は HTMLunit で送信しようとしましたが、FB API がこれに対応する必要があると思いました。

ご意見をお聞かせください。

public class NotificationServiceImpl extends RemoteServiceServlet implements NotificationService {

    /**serialVersionUID*/
    private static final long serialVersionUID = 6893572879522128833L;
    private static final String FACEBOOK_USER_CLIENT = "facebook.user.client";
    long facebookUserID;    

    public String sendMessage(Notification notification) throws IOException {
        String api_key = notification.getApi_key();
        String secret = notification.getSecret_key();
        try {
          //  MDC.put(ipAddress, req.getRemoteAddr());            
            HttpServletRequest request = getThreadLocalRequest();
            HttpServletResponse response = getThreadLocalResponse();  
           HttpSession session =   getThreadLocalRequest().getSession(true);
         //  session.setAttribute("api_key", api_key);

            IFacebookRestClient<Document> userClient = getUserClient(session); 
            if(userClient == null) {
              System.out.println("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);
            }

            System.out.println("Creating a FacebookWebappHelper, which copies fb_ request param data into the 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 /
            System.out.println(nextPage); 
            boolean redirectOccurred = facebook.requireLogin(nextPage);
            if(redirectOccurred) {
                    return null;
            }
            redirectOccurred = facebook.requireFrame(nextPage);
            if(redirectOccurred) {
                    return null;
            }


            try {
                facebookUserID = userClient.users_getLoggedInUser();

                if (userClient.users_hasAppPermission(Permission.STATUS_UPDATE)) {
                    userClient.users_setStatus("Im testing Facebook With Java! This status is written using my Java code! Can you see it? Cool :D", false);
                }
            } catch(FacebookException ex) {
                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error while fetching user's facebook ID");
                System.out.println("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 null;
            }

         //   MDC.put(facebookUserId, String.valueOf(facebookUserID));

           // chain.doFilter(request, response);
    } finally {
          //  MDC.remove(ipAddress);
         //   MDC.remove(facebookUserId);
    }

        return String.valueOf(facebookUserID);
    }

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

}

Error message: 
[ERROR] com.google.gwt.user.client.rpc.InvocationException: <script type="text/javascript">
[ERROR] top.location.href = "http://www.facebook.com/login.php?v=1.0&api_key=MY_KEY&next=notification";
[ERROR] </script>
4

0 に答える 0