Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facebook API - delete status

In PHP, I'm using curl to send a delete to the fb graph api - and yet I'm getting the following error;

{"error":{"type":"GraphMethodException","message":"Unsupported delete request."}}

The code I'm using is;

$ch = curl_init("https://graph.facebook.com/" . $status_id . ""); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_CAINFO, NULL); 
curl_setopt($ch, CURLOPT_CAPATH, NULL); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 

$result = curl_exec($ch); 
echo $result;

$query contains the access token.

like image 651
Simon R Avatar asked May 18 '10 15:05

Simon R


People also ask

How do I request Facebook data deletion?

Click the Your Facebook Information link under Security and Login and navigate to the Delete Your Account and Information link. Once there, you'll have the option to Deactivate Account, which will allow you to either keep Messenger access, Download Your Information, or Delete Account.

How long does Facebook keep my data?

Facebook says it keeps "backup copies for a reasonable period of time" after a deletion, and it says that can be as long as three months. It also says it may retain copies of "some material" from deleted accounts, but removes personal identifiers.

Is Facebook Graph API deprecated?

API Version Deprecations: As part of Facebook's Graph API and Marketing API, please note the upcoming deprecations: August 3, 2021: Graph API v3. 3 will be deprecated and removed from the platform. August 25, 2021 Marketing API v9.

Is Facebook API a REST API?

Yes, it is a REST API as well. Show activity on this post. Yes, there have been 3 Facebook API's to date: Legacy REST.


3 Answers

Fixed!

You have to prepend the userid to the object ID when deleting:

DELETE https://graph.facebook.com/673509687_104812882909249?access_token={access_token} where 673509687 is my userID and 104812882909249 is the objectID

like image 169
James Hartig Avatar answered Oct 20 '22 02:10

James Hartig


For anyone still struggling with this, I found out what my issue was attempting to delete application requests that I had previously created using the PHP SDK, which was resulting in this error.

(#2) Invalid parameter: Body of an error/warning message. Title is: Invalid parameter

The problem was essentially with which access token was being used; user or application.

The specific scenario I was working on was where a user in my application has invited a friend Facebook (using an app request) but then wants to revoke that invite. In this case I want to delete the app request on Facebook that was previously created. However, at this point in time, the logged in user is not the recipient of the app request, but the sender.

Looking at the PHP SDK code, it automatically uses the user access token if it has one, over the application access token. In fact, there doesn't appear to be a way to explicitly get the application token from the SDK.

When attempting to delete the app request using the following...

$facebook->api('/'.$fb_request_id, 'DELETE');

...and letting the PHP SDK choose the user token, I received the (#2) Invalid parameter error message. However, if I manually construct the application access token (where the format is "$app_id|$app_secret" and pass it as an array key in a third parameter...

$facebook->api('/'.$fb_request_id, 'DELETE', array('access_token' => $app_access_token);

..then the call succeeds.

So, essentially you need to use the application access token to delete the app requests if the current user is not the recipient of the app request.

I hope this helps anyone else struggling with the same issue.

like image 21
Julian Mclean Avatar answered Oct 20 '22 02:10

Julian Mclean


I modified your code slightly. (Should echo "true" if done correctly) Here's what is currently working for me.

Also note this does not erase events created via Facebook.That's why your receiving the permissions error. This only erases events created through your application... (application linked to $app_id, $app_secret)

//First authenticate a token


$app_id = "APP ID GOES HERE";
$app_secret = "SECRET APP ID GOES HERE";
$my_url = "WHATEVER THIS PAGES NAME IS GOES HERE";  


//I'm not sure but I think REQUEST is still allowed....right? if not change it to GET/POST

$code = $_REQUEST["code"];

if(empty($code)) {
$auth_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&scope=create_event";
echo("<script>top.location.href='" . $auth_url . "'</script>");
}

$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code;
$access_token = file_get_contents($token_url);




//Use TRUE and FALSE not 0 and 1's like you originally had it

//264853420218553 is the event id.

$ch = curl_init("https://graph.facebook.com/264853420218553?" . $access_token . ""); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, TRUE);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_CAINFO, NULL); 
curl_setopt($ch, CURLOPT_CAPATH, NULL); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);

$result = curl_exec($ch); 
echo $result;?>
like image 32
Beta Tester Avatar answered Oct 20 '22 02:10

Beta Tester