I have tested the codes from this and this but it doesn't work.
The event is created successfully but the image is not published.
Here is my actual code:
require_once '../admini/config.php';
$t = getToken('appID', 'appSecret');
$file = 'Koala.jpg';
$arrData = array(
'name' => 'Test Event',
'start_time' => '2015-07-04', //ISO-8601 format - With Time - 2012-07-04T19:00:00-0700
//'end_time' => '', //optional
'description' => 'Das erste Test-Event',
'location' => 'Deggendorf', //Just a name
'location_id' => '103091806397289', //place id - inserts a link to place fb page
'ticket_url' => 'url', //URL to buy a ticket for the event
'no_feed_story' => FALSE, //TRUE = dont display on page
'access_token' => 'token',
'picture' => '@'. realpath($file),
);
$createUrl = 'https://graph.facebook.com/page_id/events';
$test = fbcurl($createUrl, 'POST', $arrData); //Returns the event id
echo '<pre>';
print_r($test);
echo '</pre>';
function fbcurl($url, $method, $fields = array(), $auth = array()){
foreach($fields as $key => $value){
if(!is_string($value)){
$fields[$key] = json_encode($value);
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:multipart/form-data'));
// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
// if(count($auth)===2)
// curl_setopt($ch, CURLOPT_USERPWD, $auth['user'].':'.$auth['pass']);
// }
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
if(count($fields)>0){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields, null, '&'));
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
//curl_setopt($ch, CURLOPT_TIMEOUT, 60);
//curl_setopt($ch, CURLOPT_USERAGENT, 'facebook-php-3.2');
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "Content-Type: multipart/form-data");
//file_put_contents('fbcurllocal.txt', print_r(http_build_query($fields, null, '&'), true)."
".$url);
$r = curl_exec($ch);
curl_close($ch);
if($r!=''){
$p = explode("
HTTP/", $r);
$p = (count($p) > 1 ? 'HTTP/' : '') . array_pop($p);
list($h, $b) = explode("
", $p, 2);
return array('header' => $h, 'body' => $b);
}else{
return array('header' => '', 'body' => 'error');
}
}
If you read the documentation, ther's no such field picture
with \POST /{page-id}/events
.
So, while creating an event you can not publish a cover picture along with it. So it's a two-step procedure-
Create event
API: \POST /{page-id}/events
- Reference
This you've already done, just delete the picture
parameter from there.
Upload cover picture
API: \POST /{event-id}/events
- Reference
Give the image to the parameter: source
This way you can upload the cover pic to an event. Hope that helps.
Edit
The method to upload cover photo that I've mentioned will not work as of now (you can subscribe to this bug to get the update), instead you'll be needing a link to the image and make the call-
\POST /{event-id}
Parameter: cover_url
This works. I've tested!
look at the commtens before to understand it.
'asdf' => '@'. realpath($file).';type=image/jpeg',
(
[header] => HTTP/1.1 200 OK
x-fb-rev: 1200162
Access-Control-Allow-Origin: *
Cache-Control: private, no-cache, no-store, must-revalidate
Content-Type: application/json; charset=UTF-8
Date: Thu, 10 Apr 2014 14:26:20 GMT
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
X-FB-Debug: nLKpXn4cbeF4AMa8kiOVMAfcKG5EFvQZmqvxFJXYC88=
Connection: keep-alive
Content-Length: 4
[body] => true
)
i tested this
'source' => '@'. realpath($file).';type=image/jpeg',
and this
'source' => '@'. realpath($file),
bevore