You are not logged in.

Dear visitor, welcome to Jabaco - Community. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

JasonS

Trainee

  • "JasonS" is male
  • "JasonS" started this thread

Posts: 65

Date of registration: Feb 17th 2010

  • Send private message

1

Thursday, November 17th 2011, 7:27pm

Facebook API

Hello,

I have found this snippet of java that will allow you to utilize the facebook API via a Java servlet.. ... I tried but cannot figure out how to translate this to Jabaco, only parts of it I could take a guess at but needless to say I cant get far enough to get it to work.. Is it possible to be converted to Jabaco applet code? From my understanding this is the main peice you need to access major FB api calls. Anybody know how to translate it? I understand Java support from fb alone is non existant, but I think this would be a major thing to have easily available (the code) to Jabaco users to use to make facebook applications. I can always use the PHP methods of these and have them defined to execute via javascript in the applets html file, and call javascript subs via the jabaco applet, but this seems like it would almost be easier and could do more if you didn't have to mess with all of that.

Any suggestions would be helpful :)

Thanks much,
Jason

Jabaco Source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import static com.emobus.stuff.LoggerConstants.facebookUserId;
import static com.emobus.stuff.LoggerConstants.ipAddress;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
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;

/**
 * The Facebook User Filter ensures that a Facebook client that pertains to
 * the logged in user is available in the session object named "facebook.user.client".
 * 
 * The session ID is stored as "facebook.user.session". It's important to get
 * the session ID only when the application actually needs it. The user has to 
 * authorise to give the application a session key.
 * 
 * @author Dave
 */

public class FacebookUserFilter implements Filter {

    	private static final Logger logger = LoggerFactory.getLogger(FacebookUserFilter.class);
    	
    	private String api_key;
    	private String secret;
    	
    	private static final String FACEBOOK_USER_CLIENT = "facebook.user.client";
    	
    	public void init(FilterConfig filterConfig) throws ServletException {
            	api_key = filterConfig.getServletContext().getInitParameter("facebook_api_key");
            	secret = filterConfig.getServletContext().getInitParameter("facebook_secret");
            	if(api_key == null || secret == null) {
                    	throw new ServletException("Cannot initialise Facebook User Filter because the " +
                                                       	"facebook_api_key or facebook_secret context init " +
                                                       	"params have not been set. Check that they're there " +
                                                       	"in your servlet context descriptor.");
            	} else {
                    	logger.info("Using facebook API key: " + api_key);
            	}
    	}

public void destroy() {
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
try {
MDC.put(ipAddress, req.getRemoteAddr());

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

logger.trace("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 /
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;
}

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

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

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



public class SetUsersStatus

if (client.users_hasAppPermission(Permission.STATUS_UPDATE)) {
client.users_setStatus("developing Facebook apps in Java because the new Java client kicks the PHP client's ... !", false);
}

}

This post has been edited 1 times, last edit by "JasonS" (Nov 19th 2011, 12:33am)


theuserbl

Intermediate

Posts: 436

Date of registration: Dec 20th 2008

  • Send private message

2

Sunday, November 20th 2011, 5:45pm

8| Oh, it uses a lot of external libraries:

Quoted

Jabaco Source

1
2
import static com.emobus.stuff.LoggerConstants.facebookUserId;
import static com.emobus.stuff.LoggerConstants.ipAddress;
Can't find the needed one.

Quoted

Jabaco Source

1
2
3
4
5
6
7
8
9
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
Thats not part of the JRE or JDK. It is part of JavaEE. And with this I have no experiences. I think there existing different implementations (JBoss, Glassfish, Geronimo, ...). Don't know if I need an special JEE or can choose anyone of it.

Quoted

Jabaco Source

1
2
3
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
This can be downloaded from
[ http://www.slf4j.org/download.html ]
In the zip-file are 21 jar-files. 10 of it are only sourcecode-files. But possible 11 jars are needed.

Quoted

Jabaco Source

1
2
3
4
import com.google.code.facebookapi.FacebookException;
import com.google.code.facebookapi.FacebookWebappHelper;
import com.google.code.facebookapi.FacebookXmlRestClient;
import com.google.code.facebookapi.IFacebookRestClient;
And this can be found at
[ http://code.google.com/p/facebook-java-api/downloads/list ]
Zip-files includes 11 jar-files

To translate the Java-code to Jabaco would not so hard. But it is useless without the needed libraries. And it is impossible to test it without the libraries.

Greatings
theuserbl

This post has been edited 1 times, last edit by "theuserbl" (Nov 20th 2011, 5:51pm)


JasonS

Trainee

  • "JasonS" is male
  • "JasonS" started this thread

Posts: 65

Date of registration: Feb 17th 2010

  • Send private message

3

Sunday, July 1st 2012, 11:31pm

Facebook integration into web applet

I have found it is just flat out easier to use PHP or JS functions to get my jabaco applets to interact with facebook if I need to.. I just use JS and call the JS function by name from my Jabaco applet. Its actually pretty easy...

Regards,
Jason

Similar threads

Rate this thread
WoltLab Burning Board