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?
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"]]
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.
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.
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.
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. .
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.
Seems like someone would answer something this important.
Crickets…