Message Boards Message Boards

0
|
11192 Views
|
8 Replies
|
3 Total Likes
View groups...
Share
Share this post:

Authorizing SocialMediaData through JLink or custom Front End

I am trying to use SocialMediaData through JLink. Functions that don't require authorization such as SocialMediaData["Facebook","Properties"] work fine, but when I try to do something like SocialMediaData["Facebook", "Friends"] I get a packet back saying "A front end is not available; certain operations require a front end." Presumably, the front end is required to ask the user for the facebook access key. Is there a way to give the kernel the access key programmatically through JLink, or alternatively, to write my own front end that could imitate Mathematica's front end for the purpose of returning the access key to the kernel? 
POSTED BY: John Borland
8 Replies

Crickets...

POSTED BY: David Johnston

Seems like someone would answer something this important.

POSTED BY: David Johnston
Indeed, I came to a dead end as far as imitating the front end. I got farther than I thought I would, though. I like that MathLink is transparent enough to at least give a glimpse of what is going on.

Another approach I thought to try was to override a function within Mathematica. For example, I tried this, using an access token than I had retrieved with my own code:
 HTTPClient`OAuthAuthentication[consumerKey_,consumerSecret_,
     authorizeEndpoint_,accessEndpoint_,redirectURI_,
     oauthVersion_,accessTokenExtractor_]=
   HTTPClient`OAuthToken[HTTPClient`OAuth`Private`OAuth20Parameters["graph.facebook.com",
       None,Automatic,"verifier",Automatic,Automatic,"(my consumer key here)",
       "(my consumer secret here)","https://www.facebook.com/dialog/oauth","RemoveWhitespace",
       "https://graph.facebook.com/oauth/access_token","GET",
       "https://www.facebook.com/connect/login_success.html","Text/2.0","None"],
       HTTPClient`OAuth`Private`Token20["(my valid access token here)"]]
But then when I try this:
token = HTTPClient`OAuthAuthentication[
"ConsumerKey" -> "(my consumer key)",
"ConsumerSecret" -> "(my consumer secret)",
"AuthorizeEndpoint" -> "https://www.facebook.com/dialog/oauth",
"AccessEndpoint" -> "https://graph.facebook.com/oauth/access_token",
"RedirectURI" -> "https://www.facebook.com/connect/login_success.html",
"OAuthVersion" -> "2.0",
"AccessTokenExtractor" -> "Text/2.0"]
The regular oauth dialog pops up, as if the function had not been overridden. Have I done this incorrectly? Or is this function somehow locked? I tried using "unprotect" but that had no effect.
Also, this dialog looks different than the one that pops up when I use SocialMediaData, so I am not sure if SocialMediaData even uses this function. So, perhaps there is too much reverse engineering required altogether in this endeavor. But I thought I would give it a shot.
POSTED BY: John Borland
Sorry about the "Updating Name".
We are aware of the issue and are working on it.

Your name will be fixed - no need to repost this or change how you create posts. .
POSTED BY: Bruce Miller
If there's no supported way to do this (as it seems), reverse engineering it is going to be rather difficult because all the relevant symbols are Locked.

I think that if you want to provide a service like this, you will need to create your own Facebook application that will help with exporting the data (and you'll need to take responsibility for it as a Facebook app developer).  It'll need to be authorized in a similar way to how SocialMediaData is.  Before this function was available, I used NameGen, which may be helpful for you to study how this works.

The documented version of Developer`UseFrontEnd is UsingFrontEnd.
POSTED BY: Szabolcs Horvát
It appears that I can invoke "MathLink`SetFrontEnd[$ParentLink]" through a MathLink connection and then it thinks I'm the front end. At this point a lot of reverse engineering would probably have to happen to actually imitate a front end. We will see how far I get.
POSTED BY: John Borland
I'm accessing JLink from within a web server, so it can't open a front end that the client can see. P.S. the original post says "updating name" but it was me. Not sure why except maybe I posted too soon after creating the account.
POSTED BY: John Borland
Try using Developer`UseFrontEnd. Is there something about your machine which is preventing you from using the front end? or where you looking to script this?
Developer`UseFrontEnd[SocialMediaData["Facebook","Friends"]]
POSTED BY: Sean Clarke
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract