sugoi internally added

This commit is contained in:
pvincent
2021-08-27 17:54:17 +04:00
parent ef31c26525
commit 445448f43b
100 changed files with 8758 additions and 23 deletions
+127
View File
@@ -0,0 +1,127 @@
package sugoi.apis.facebook.server;
/**
*
* Call Facebook services thru the graph API
*
* @author fbarbut<francois.barbut@gmail.com>
*/
class FB
{
var app_id : String;
var app_secret : String;
var token : String;
public function new(fbToken, ?app_id, ?app_secret) {
this.token = fbToken;
this.app_id = app_id;
this.app_secret = app_secret;
}
public static function init(fbToken, ?app_id, ?app_secret) {
return new FB(fbToken, app_id, app_secret);
}
/**
* Publish a photo in the current user galery
* @param imgUrl
* @param text
* @return a json object
*/
public function publishPhoto(imgUrl:String,text:String):Dynamic {
//var c = new sugoi.apis.linux.Curl();
//c.setPostData("access_token", token);
//c.setPostData("url", imgUrl );
//var r = c.call("POST", "https://graph.facebook.com/v2.5/me/photos");
//var c = new sys.io.Process("curl", [
//"-X POST",
//"-d url="+imgUrl,
//"-d access_token=" + token,
//"https://graph.facebook.com/v2.5/me/photos"
//]);
var text = StringTools.urlEncode(text);
return call('curl -X POST -d url=$imgUrl -d access_token=$token -d caption="$text" https://graph.facebook.com/v2.5/me/photos');
}
/**
* Publish a story
* @doc https://developers.facebook.com/docs/sharing/opengraph
*
* @param action Like 'game.achieves', see https://developers.facebook.com/docs/reference/opengraph/action-type/games.achieves/
* @param ogObjectUrl An opengraph object representing the subject the action in done to
*/
public function publishStory(action:String, objectType:String,ogObjectUrl:String,?message:String) {
ogObjectUrl = StringTools.urlEncode(ogObjectUrl);
return call('curl -X POST -d access_token=$token -d "$objectType=$ogObjectUrl" -d fb:explicitly_shared=true '+(message!=null ? ' -d message="'+StringTools.urlDecode(message)+'"' : "") +' https://graph.facebook.com/v2.5/me/$action');
}
/**
* Get a long lived facebook token from a short lived one
* @doc https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension
* @return token
*/
public function getLongLivedToken():String {
//WTF the result is not JSON but like "access_token=XXX&expires=5179521"
var req = 'curl -X GET "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=$app_id&client_secret=$app_secret&fb_exchange_token=$token&redirect_uri=https://' + App.config.HOST + '"';
var r = call(req, false);
if (r.substr(0, 13) != "access_token=") throw r;
var r2 = r.split("&")[0].split("=")[1];
if (r == null) throw 'error while parsing $r';
return r2;
}
/**
* call via cURL
*/
function call(cmd:String,?isJson=true):Dynamic {
var c = new sys.io.Process(cmd,[]);
#if neko
var r = neko.Lib.stringReference(p.stdout.readAll());
#else
var r = c.stdout.readAll().toString();
#end
//error ?
if (r == null) {
#if neko
var r = neko.Lib.stringReference(c.stderr.readAll());
#else
var r = c.stderr.readAll().toString();
#end
}
c.exitCode();
if (r == null) throw "cUrl answer is null";
if (!isJson) return r;
var json:Dynamic = haxe.Json.parse(r);
if ( json == null ) throw "json result is null";
if (json.error==1 || json.error || json.error=="1") {
throw r;
}
return json;
}
}